码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • cap分布式理论


    目录

    Consistency(一致性)

    Availability(可用性)

    Partition Tolerance(分区容忍性)

    AP

    CP

    为什么当 P 存在时,C 和 A 不能同时存在呢?


    cap 理论

    cap是实现分布式系统的思想。

    由3个元素组成。

    Consistency(一致性)

    在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。

    Availability(可用性)

    虽然系统内部会出现一些故障,但整体一直会对外提供服务,不至于崩溃。比如有10台 server,其中4台 server 出现了故障,经过特殊处理,把请求交给剩余的6台运行正常的 server,整体还在运行中,没有因为4台出现故障的 server 造成整体失效,实现高可用。

    Partition Tolerance(分区容忍性)

    有 C 和 D 两台 server,C 在中国,D 在美国,如果发生网络异常,则 C 和 D 在不同网络分区中可以正常运行。

    实现分布式理论基本上通过算法 paxos 和 gossip 来作为理论指导

    可以分成3种组合:CA、AP、CP

    在网络环境中,网络不可能不出现故障,所以 P 一定是存在的,一定要保证 P 的功能是正常的。

    在 P 必须存在的情况下,CAP 理论定义出两种组合,AP 和 CP

    AP

    代表在分区的情况下保证高可用,多台机器出现了问题至少有一个可用。

    CP

    代表在分区的情况下保障一致性,要么全部同步要么不同步。类似于关系数据库的事务特性ACID,全部sql要么全部执行成功,要么全部不成功,不成功的话需要回滚到之前状态。

    为什么当 P 存在时,C 和 A 不能同时存在呢?

    有 A 和 B 主从备份分布式系统,当 client1 向 A 写入数据时,为了保证两者的一致性,必须使用锁来避免 client2 从 B 读取出旧的数据,client1 向 A 和 B 写完数据后再释放锁。如果这样做就无法保证 A 的可用性,因为有锁的存在,client2 一直是阻塞状态,B 不能提供服务,所以一致性和高可用不可能同时存在。如果不在一个网络环境中,加锁的操作资源消耗是相当大。

    如果发生网络分区(脑裂)的情况,则 A 和 B 的主从架构不能保证数据的一致性,client2 想要读取最新正确的数据是不能实现的,除非放弃高可用特性或放弃一致性特性,所以 C 和 A 不可能同时存在。

    很多开源组件能看到这个理念的实践

    zookeeper

    cp,因为只要一个 leader,所有的写入只能通过 leader 执行,写入完成后同步给 follower。

    redis 集群

    ap,因为集群保证了是在高可用的基础上增加了分布式的功能,所以能做到ap,可以做到一致性,但是不是强一致性,是最终一致性,因为主从复制的异步导致的。

    mysql 集群

    ap 和 cp 都支持。

    至于选择 ap 还是 cp,需要看实际情况侧重于高可用还是一致性,对于一致性要求是强一致性还是最终一致性,有的组件两种组合都支持。有的只支持一种,具体要看实际情况具体选择。

    参考链接

    Paxos、Raft、ZAB、Gossip 分布式一致性算法理解 - 简书

  • 相关阅读:
    Spring框架系列(5) - 深入浅出SpringMVC请求流程和案例
    了解docker
    computer planetary MoBI:生物多样性重要性地图
    小迈科技可能的面试问题
    NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
    DO280管理和监控OpenShift平台--资源限制
    中断上下文使用spin_lock进程上下文使用spin_lock_irqsave的原因?
    Windows 和 Linux 系统下,如何查看 Redis 的版本号?
    克诺尔Knorr-Bremse EDI 对接流程
    【达摩院OpenVI】几行代码,尽享丝滑视频观感
  • 原文地址:https://blog.csdn.net/zlpzlpzyd/article/details/133675303
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号