9

分布式系统如何保持一致和可用 - CA。因为当分区发生时,CA 是不可能的。如果我们说不会发生分区,那么只有它们是CA,那么所有CP或AP的系统也将是CA,以防分区不会发生?

4

2 回答 2

20

它不能。

正如经常提到的,原始形式的 CAP 定理有点误导。可以重述为

在存在网络分区的情况下,分布式系统是可用的或一致的

所以你是对的。通常,系统不能仅分类为 CA、CP 或 AP,因为分区容限是系统的一个属性,它描述了在网络分区的情况下选择什么。因此,系统有时可以根据 AP 运行,而在其他时候根据 CP 运行(但并不常见)。

另一个有趣的部分是 RDBMS 数据库通常位于三角形的 CA 一侧。这仅适用于单节点设置。即使使用主(写)-从(读)设置,系统也不是 CA(或者如果它由于某种原因被称为“CA”,并且无法从网络分区中恢复,那么可能会发生裂麸场景,一个新的主被选举为分区,随之而来的是混乱,可能会破坏系统的一致性)。

有用的阅读:https ://codahale.com/you-cant-sacrifice-partition-tolerance/ 。

于 2018-03-24T12:31:53.000 回答
2

Stonebraker 博士说: CAP 定理的指导是,当存在网络分区时,您必须选择 A 或 C。在现实世界中很明显,在这种故障模式下可以同时实现 C 和 A。

有关CA 为何存在的想法,请参阅此内容:

CA 是操作范围的规范:您指定系统在分区下无法正常工作,或者更准确地说,分区超出了系统的操作范围。

我的背景与这些理论考虑相去甚远,我必须说它非常令人困惑。我正在研究分布式区块链系统,但我不明白为什么 C、A、P 的那些“广义”定义必须始终适用。如果假设 5% 的节点失败或被分割,共识仍然有效。如果最终用户连接到分区节点,该节点可以让用户知道它失去了连接。如果没有定义诸如“如果一定数量的节点发生故障或被分区,共识停止”之类的条件,我什至看不出任何主要的区块链网络是 CP。

于 2018-12-11T13:54:20.103 回答