分布式理论之 CAP 定理(布鲁尔定理)
1.什么是 CAP 定理CAP 定理(CAP theorem)又被称作「布鲁尔定理」,是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。该定...
目录
1. 什么是 CAP 定理
CAP 定理(CAP theorem)又被称作「布鲁尔定理」,是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。
该定理指出一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
2. 一致性(Consistency)
A read is guaranteed to return the most recent write for a given client.
对某个指定的客户端来说,读操作保证能够返回「最新的写操作结果」。
3. 可用性(Availability)
A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).
非故障的节点在合理的时间内返回「合理的响应不是错误和超时的响应」。
4. 分区容错性(Partition tolerance)
System continues to work despite message loss or partial failure.
当出现网络分区后,系统能够继续「履行职责」。
5. CAP 到底如何选
- 虽然 CAP 理论定义是三个要素中只能取两个,但放到分布式环境下来思考,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。
- 如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回 error(例如,当前系统不允许写入),这又和 A 冲突了,因为 A 要求返回 no error 和 no timeout。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。
6. 数据库中的 CAP 定理
6.1 MongoDB 与 CAP
MongoDB 是一个流行的 NoSQL 数据库管理系统,它将数据存储为 BSON(binary JSON)文档。
相对于 CAP 定理,MongoDB是一个 CP 数据存储,它通过保持一致性来解决网络分区问题,同时降低可用性。
MongoDB 是一个单一的主系统,每个副本集只能有一个主节点来接收所有的写操作。同一副本集中的所有其他节点都是辅助节点,它们复制主节点的操作日志并将其应用于自己的数据集。默认情况下,客户机也从主节点读取数据,但他们也可以指定一个允许他们从辅助节点读取数据的读取首选项。
当主节点不可用时,具有最新操作日志的次节点将被选为新的主节点。一旦所有其他次要节点都赶上新的主节点,集群将再次可用。由于在此期间客户端无法发出任何写请求,因此数据在整个网络中保持一致。
6.2 Cassandra 与 CAP
Apache Cassandra 是由 Apache 软件基金会维护的开源 NoSQL 数据库。它是一个列式数据库,允许您在分布式网络上存储数据。然而,与 MongoDB 不同的是,Cassandra 拥有一个无主的架构。
相对于 CAP 定理,Cassandra 是一个 AP 数据库,它提供可用性和分区容忍度,但不能一直提供一致性。因为 Cassandra 没有主节点,所以所有节点必须连续可用。然而,Cassandra 允许客户机在任何时候向任何节点写入数据并尽快协调不一致,从而提供了最终的一致性。
7. 巨人的肩膀
- https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e
- https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
- https://www.ibm.com/cloud/learn/cap-theorem
- https://www.educative.io/edpresso/what-is-the-cap-theorem
更多推荐
所有评论(0)