从0开始学架构
李运华
资深技术专家
立即订阅
38968 人已学习
课程目录
已完结 59 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 照着做,你也能成为架构师!
免费
基础架构 (13讲)
01 | 架构到底是指什么?
02 | 架构设计的历史背景
03 | 架构设计的目的
04 | 复杂度来源:高性能
05 | 复杂度来源:高可用
06 | 复杂度来源:可扩展性
07 | 复杂度来源:低成本、安全、规模
08 | 架构设计三原则
09 | 架构设计原则案例
10 | 架构设计流程:识别复杂度
11 | 架构设计流程:设计备选方案
12 | 架构设计流程:评估和选择备选方案
13 | 架构设计流程:详细方案设计
高性能架构模式 (8讲)
14 | 高性能数据库集群:读写分离
15 | 高性能数据库集群:分库分表
16 | 高性能NoSQL
17 | 高性能缓存架构
18 | 单服务器高性能模式:PPC与TPC
19 | 单服务器高性能模式:Reactor与Proactor
20 | 高性能负载均衡:分类及架构
21 | 高性能负载均衡:算法
高可用架构模式 (10讲)
22 | 想成为架构师,你必须知道CAP理论
23 | 想成为架构师,你必须掌握的CAP细节
24 | FMEA方法,排除架构可用性隐患的利器
25 | 高可用存储架构:双机架构
26 | 高可用存储架构:集群和分区
27 | 如何设计计算高可用架构?
28 | 业务高可用的保障:异地多活架构
29 | 异地多活设计4大技巧
30 | 异地多活设计4步走
31 | 如何应对接口级的故障?
可扩展架构模式 (6讲)
32 | 可扩展架构的基本思想和模式
33 | 传统的可扩展架构模式:分层架构和SOA
34 | 深入理解微服务架构:银弹 or 焦油坑?
35 | 微服务架构最佳实践 - 方法篇
36 | 微服务架构最佳实践 - 基础设施篇
37 | 微内核架构详解
架构实战 (13讲)
38 | 架构师应该如何判断技术演进的方向?
39 | 互联网技术演进的模式
40 | 互联网架构模板:“存储层”技术
41 | 互联网架构模板:“开发层”和“服务层”技术
42 | 互联网架构模板:“网络层”技术
43 | 互联网架构模板:“用户层”和“业务层”技术
44 | 互联网架构模板:“平台”技术
45 | 架构重构内功心法第一式:有的放矢
46 | 架构重构内功心法第二式:合纵连横
47 | 架构重构内功心法第三式:运筹帷幄
48 | 再谈开源项目:如何选择、使用以及二次开发?
49 | 谈谈App架构的演进
50 | 架构实战:架构设计文档模板
特别放送 (7讲)
架构专栏特别放送 | “华仔,放学别走!”第1期
架构专栏特别放送 | “华仔,放学别走!” 第2期
如何高效地学习开源项目 | “华仔,放学别走!” 第3期
架构师成长之路 | “华仔,放学别走!” 第4期
架构师必读书单 | “华仔,放学别走!” 第5期
新书首发 | 《从零开始学架构》
致「从0开始学架构」专栏订阅用户
结束语 (1讲)
结束语 | 坚持,成就你的技术梦想
从0开始学架构
登录|注册

22 | 想成为架构师,你必须知道CAP理论

李运华 2018-06-16
CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。
布鲁尔在提出 CAP 猜想的时候,并没有详细定义 Consistency、Availability、Partition Tolerance 三个单词的明确定义,因此如果初学者去查询 CAP 定义的时候会感到比较困惑,因为不同的资料对 CAP 的详细定义有一些细微的差别,例如:
Consistency: where all nodes see the same data at the same time.
Availability: which guarantees that every request receives a response about whether it succeeded or failed.
Partition tolerance: where the system continues to operate even if any one part of the system is lost or fails.
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学架构》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(62)

  • 鹅米豆发
    Paxos算法本身能提供的是,可靠的最终一致性保证。如有足够的隔离性措施,中间状态的无法被客户端读取,则可以达到强一致性,这种属于CP架构。其它情况,就是AP架构。
           CAP定理存在不少坑点,理解起来很是令人费解。
           1、适用场景。分布式系统有很多类型,有异构的,比如节点之间是上下游依赖的关系,有同构的,比如分区/分片型的、副本型的(主从、多主)。CAP定理的适用场景是副本型的这种。
           2、一致性的概念,从强到弱,线性一致性、顺序一致性、因果一致性、单调一致性、最终一致性,CAP中的一致性应该是指顺序一致性。
           3、CAP中的一致性,与ACID中的一致性的区别。事务中的一致性,是指满足完整性约束条件,CAP中的一致性,是指读写一致性。
           4、CAP中的可用性,与我们常说的高可用的区别。比如HBase、MongoDB属于CP架构,Cassandra、CounchDB属于AP系统,能说后者比前者更高可用么?应该不是。CAP中的可用性,是指在某一次读操作中,即便发现不一致,也要返回响应,即在合理时间内返回合理响应。我们常说的高可用,是指部分实例挂了,能自动摘除,并由其它实例继续提供服务,关键是冗余。
           5、哪些情况属于网络分区。网络故障造成的分区,属于。节点应用出现问题导致超时,属于。节点宕机或硬件故障,不属于。
    2018-06-16
    98
  • 鹅米豆发
    前面对于一致性的描述有些问题。修正一下。
    1、Paxos算法本身是满足线性一致性的。线性一致性,也是实际系统能够达到的最强一致性。
    2、Paxos及其各种变体,在实际工程领域的实现,大多是做了一定程度的取舍,并不完全是线性一致性的。
    3、比如,Zookeeper和Etcd,都是对于写操作(比如选举),满足线性一致性,对于读操作未必满足线性一致性。即可以选择线性一致性读取,也可以选择非线性一致性读取。这里的非线性一致性,就是顺序一致性。
    4、cap中的一致性,是指线性一致性,而不是顺序一致性。

    作者回复: 感谢,根据Raft的论文描述,工程上目前还没有完全实现paxos算法的系统

    2018-06-20
    30
  • Yole
    应该再补充哪些系统上ca,哪些是cp,哪些是ap,他们为什么这么设计,都有什么好处。

    作者回复: 你可以自己尝试去分析一下,有疑问评论即可

    2018-06-16
    15
  • tim
    请问一下作者,在CP的选型中。 假如是查询一条并不存在的数据,文中还说得通。
    但如果出现更新数据不及时,由于n1和n2 出现分区错误,那么n2如何知道自己不是最新的数据并返回error呢??
    假如就是简单的mysql主从, 从库并没有断连主库,只是数据在请求来是还没有更新到最新。 那么从库又从哪里得知这件事儿的呢??

    作者回复: CAP理论是忽略延时的,这就是说理论做了一个假设,只要网络通数据就会一致,这也是实际应用CAP时容易踩的坑,后面一章会讲

    2018-07-22
    6
  • Leon Wong
    老师你好,有个问题想请教:

    最近正在研究 zookeeper,通读完本篇课程,心中存疑,还望解答。

    zookeeper 并不保证所有的 client 都能读到最新的数据,相较于线性一致性而言,zookeeper 采用的是顺序一致性(我理解一致性程度更弱)。

    那么对于这种情况,zookeeper 与最终一致性方案相比,结合本篇文章的解释,其本质上依然不能保证所有的 client 读到最新的数据,那是否可以理解为 zookeeper 就是 AP 系统?

    抑或,根据本篇的解释,zookeeper 采用顺序一致性,能保证『指定』(而非所有)的 client 读到最新的数据,即可以称之为 CP 系统;而 AP 系统甚至可能不能保证任意一个 client 能读到最新数据。因此 zookeeper 属于 CP 系统的范畴?

    请问老师,两个思路,哪个正确?

    作者回复: 如果严格按照CAP理论来说,C约束并没有限定“指定”的client.

    2018-06-16
    5
  • luop
    第二版解释从 non-failing node 的角度去看待「可用性」,个人存疑。

    如果一个集群有 2 个 node,某个时刻 2 个 node 都 fail 了,那么此时该集群的「可用性」该如何定义?

    个人觉得:「一致性」和「可用性」都应该站在 client 侧去审视;而「分区容忍性」则是集群 node 侧在遇到网络分区的问题时,选择如何去影响 client 侧感知到的「一致性」和「可用性」。

    作者回复: 两个都挂整个集群肯定挂了,CAP关注的是分区时的可用性和一致性,不是说保证整个集群不挂,其实你最后的理解就是非常正确的👍👍

    2018-08-22
    4
  • 轩辕十四
    网络分区类似于脑裂。

    个人对CAP的类比,不知是否合适:
    P要求数据有冗余,
    C要求数据同步,会花时间,
    A要求返回及时,不需要等。
    不可能三角形说的是:
    要备份要同步,就得等;
    要备份不想等,就会不同步;
    要同步还不想等,就别备份

    作者回复: P要求分布式和数据同步,C要求数据完全一致,A要求返回及时

    2018-07-06
    4
  • zj
    ZK出现分区,不能再履行职责了吧,因此ZK不满足P。老师这样理解对吗

    作者回复: zk多数节点正常就可以正常运行,分区中的少数节点会进入leader选举状态,这个状态不能处理读写操作,因此不符合A,如果不考虑实时一致性,zk基本满足CP的要求

    2018-06-19
    4
  • 卡莫拉内西
    paxos, zk的zab协议的理论基础,保证的是最终一致性,满足的是cp

    作者回复: zk官方资料说zab不是paxos,而且zk的读操作没有满足CAP的C要求

    2018-06-17
    4
  • Leon Wong
    老师你好,有个问题想请教:

    最近正在研究 zookeeper,通读完本篇课程,心中存疑,还望解答。

    zookeeper 并不保证所有的 client 都能读到最新的数据,相较于线性一致性而言,zookeeper 采用的是顺序一致性(我理解一致性程度更弱)。

    那么对于这种情况,zookeeper 与最终一致性方案相比,结合本篇文章的解释,其本质上依然不能保证所有的 client 读到最新的数据,那是否可以理解为 zookeeper 就是 AP 系统?

    抑或,根据本篇的解释,zookeeper 采用顺序一致性,能保证『指定』(而非所有)的 client 读到最新的数据,即可以称之为 CP 系统;而 AP 系统甚至可能不能保证任意一个 client 能读到最新数据。因此 zookeeper 属于 CP 系统的范畴?

    请问老师,两个思路,哪个正确?

    作者回复: 如果严格按照CAP理论来说,C约束并没有约束“指定”的client

    2018-06-16
    1
    4
  • aduan
    老师,你好,有个疑问,在cp架构中n1,n2通讯是中断的,n2根据设什么作为依据返回error?

    作者回复: 一般都是心跳检测

    2018-12-16
    3
  • 星火燎原
    paxos算法目的是在分布式环境下对主节点一致性的选举,所以属于pc
    2018-06-16
    3
  • 孙振超
    知识获取来源分为几个层次:论文是第一手,书籍是第二层次,博客资料就是第三层的了,之前学习cap都是在网上找的博客,虽然也找了多篇博客相互佐证进行融合。但今天看了这篇文章才发现对cap的理解还是有些肤浅,真的是无声处惊雷,平凡处见真章,这种求学态度会贯穿在生活工作中的方方面面的,受教了。

    paxos协议是为了解决数据一致性而设计的算法,主要是通过投票选举的方式决定出主节点,之后就以主节点的数据为准,因而属于pc模式。

    另外,作者提到是以 Robert Greiner的文章进行cap的解读,网上介绍cap的文章很多,选择他的原因能否透漏一下?

    作者回复: 因为他的解读到位,他的解读契合CAP的精髓

    2018-07-29
    2
  • tim
    有个问题,既然无法保证p,那么我们选择它又有什么用呢。
    况且有些p是无法通过服务器来处理的,比如连接到服务器时,网络超时,服务器未接到任何信息。总不能指望浏览器来重试保证吧。

    对于p的理解,我觉得还是难以理解。有没有更加深入的文章

    作者回复: P是最容易保证的,中文叫“分区容忍”,意思就是你搭建一个分布式集群,然后断开网络,就是P了

    2018-07-21
    2
  • 刚子
    你好,大神,原文中''第二版定义了什么才是 CAP 理论探讨的分布式系统,强调了两点:interconnected 和 share data,为何要强调这两点呢?分布式系统并不一定会互联和共享数据''

    其中''分布式系统并不一定会互联和共享数据''结合上下文理解起来是一定的意思

    作者回复: mc集群的节点就不互联,负载均衡的集群节点也不互联

    2018-06-28
    2
  • 赵强强
    CAP讨论的是分布式系统,文中又说分布式系统必然选择P,感觉有矛盾,有点像鸡和蛋的问题。分区是分布式系统的一种异常现象,分区容忍应该是当发生分区问题时系统对外的功能特性,P到底是区别于C和A的一种特性,还是需要C和A配合才能完成,不是很理解,还请老师帮忙解答。
    2019-12-01
    1
  • Geek_88604f
    paxos的核心思想是少数服从多数,在节点数为2n+1的集群中,只要n+1节点上完成了写入就能保证接下来的读操作能够读到最新的值。从这一点来说它满足C(对某个指定的客户端来说,读操作保证能够返回最新的写操作结果);一个实现了paxos协议的集群最多可以容忍n个节点故障(n个节点同时故障的概率是比较小的),非故障节点组成的集群仍能正常提供服务,从这个角度来讲它满足A(非故障的节点在合理的时间内返回合理的响应,不是错误和超时的响应);paxos集群发生分区肯能存在两种情况,第一种情况是发生分区后没有发生重新选举,这种情况下集群仍能正常工作,因此满足P(当出现网络分区后,系统能够继续“履行职责”)。另一种情况是发生分区后原来的集群达不到多数派,集群不在对外提供服务,因此不满足P,当发生这种情况的时候,一般会快速修复。总的来说在某种意义上来看paxos满足CAP。

    作者回复: 分析的很好

    2019-09-08
    1
  • 金蝉子
    CAP理论的应用范围必须满足以下两点:
    1,互联和共享数据的系统
    2,系统对外的读写功能

    CAP只能满足三者中的两个,P必须满足,注重一致性则必须是CP(如zookeeper),注重可用性则必须是AP(如eureka)
    2019-05-16
    1
  • Gaozy
    有个疑问,很多工程实现都是选择AP并保证最终一致性,但是选择了A不就意味着返回数据不是最新的吗,最终一致性是如何实现的

    作者回复: 人工数据订正和补偿,定时脚本批量检查和修复等都可以

    2019-02-13
    1
  • 发条橙子 。
    你好老师 ,这里讲的分区容错是指什么 ,是指发生分区现象时系统正常运行 。 但是分区现象具体指的是什么 可以详细讲一下么

    作者回复: 分区就是集群中一部分节点和另外一部分无法通信

    2019-01-29
    1
收起评论
62
返回
顶部