架构设计微服务

成为架构师,你必须知道的CAP理论

2019-02-19  本文已影响73人  oneape15

CAP定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是回加州大学伯克得分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在2000年的ACM PODC上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。

CAP理论

在一个分布式系统(指互相连接并共享数据节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)可用性(Availability)分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

The CAP Theorem states that, in a distributed system (a collection of interconnected nodes that share data.), you can only have two out of the following three guarantees across a write/read pair: Consistency, Availability, and Partition Tolerance - one of them must be sacrificed. However, as you will see below, you don’t have as many options here as you might think.

CAP原则

A read is guaranteed to return the most recent write for a given client.

A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).

The system will continue to function when network partitions occur.

CAP应用

虽然CAP理论定义是三个要素中只能取两个,但放到分布式环境下来思考的话,我们会发出必须选择P(分区容错)要素,因为网络本身无法做到100%可靠,有可能出故障,所以分区是一个必然的现象。
如果我们选择了CA而放弃了P,那么当发生分区现象时,为了保证C,系统需要禁止写入,当有写入请求时,系统返回error,这双和A冲突了,因为A要求返回no errorno timeout。因此,分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。

CAP扩展

理论的优点在于清晰简洁、易于理解,但是缺点就是高度抽象化、省略了很多的细节,导致在将理论应用到实践时,由于各种复杂情况,可能出现误解和偏差,CAP理论也不例外。
如果我们没有意识到这些关键的细节点,那么在实践中应用CAP理论时,就可能发出方案很难落地。

而在我们谈到数据一致性时,CAPACIDBASE这些就是我们拿来讨论的对象,原因是这三者都是和数据一致性相关的理论,如果不仔细理解三者之间的差别,则可能会陷入一头雾水的状态,不知道该用哪个才好。

这里,我们来说说CAP的具体细节,简单对比一下ACID、BASE几个概念的关键区别点。

CAP关键细节点

C与A之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉到特定的数据或用户有所不同。

以一个用户管理系统为例,用户管理系统包含用户账号数据(用户ID、密码)、用户信息数据(昵称、兴趣、性别等)。通常情况下,用户账号数据会选择CP,而用户信息数据会选择AP,如果限定整个系统为CP,则不符合用户信息的应用场景;如果限定整个系统为AP,则又不符合用户账号数据的应用场景。
所以在CAP理论落地实践时,我们需要将系统内的数据按照不同的应用场景和要求进行分类,每类数据选择不同的策略(CP或AP),而不是直接限定整个系统所有数据都是同一策略。

ACID

ACID 是数据库管理系统为了保证事务的正确性而提出来的一个理论,ACID 包含四个约束:

划重点: 我们可以看到,ACID中的A(Atomicity)和CAP中的A(Availability)意义完全不同,而ACID中的C和CAP中的C名称虽然都是一致性,但含义也完全不一样。ACID 中的 C 是指数据库的数据完整性,而 CAP 中的 C 是指分布式节点中的数据一致性。再结合 ACID 的应用场景是数据库事务,CAP 关注的是分布式系统数据读写这个差异点来看,其实 CAP 和 ACID 的对比就类似关公战秦琼,虽然关公和秦琼都是武将,但其实没有太多可比性。

BASE

BASE 是指基本可用(Basically Available)软状态( Soft State)最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性。

划重点: BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。前面在剖析 CAP 理论时,提到了其实和 BASE 相关的两点:

  1. CAP 理论是忽略延时的,而实际应用中延时是无法避免的。
  2. AP 方案中牺牲一致性只是指分区期间,而不是永远放弃一致性。
总结

综合上面的分析,ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。

上一篇 下一篇

猜你喜欢

热点阅读