目录

1. 什么是 CAP 定理

2. 一致性(Consistency)

3. 可用性(Availability)

4. 分区容错性(Partition tolerance)

5. CAP 到底如何选

6. 数据库中的 CAP 定理

6.1 MongoDB 与 CAP

6.2 Cassandra 与 CAP

7. 巨人的肩膀


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. 巨人的肩膀

 

Logo

鸿蒙生态一站式服务平台。

更多推荐