根据Cap Theorem的CA分布式系统如何存在

问题描述 投票:0回答:4

分布式系统如何做到一致可用CA)?

因为我认为,当发生网络分区时,CA不可能以网络的每个节点(甚至用户连接到的分区节点)继续保持可用并以一致数据应答的方式实现.

distributed-computing distributed-system cap-theorem
4个回答
37
投票

不可以。

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

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

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

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

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


10
投票

可以,但不会。

CAP 定理解释了当一个或多个节点与集群的其他节点隔离时的保证。在这种情况下,节点具有三个选项,这会导致三个已知的 CAP 权衡:i) 它不断响应任何收到的请求AP; ii) 它不再响应收到的请求,直到它再次能够到达其他CP; iii) 在收到任何删除分区的请求之前它会关闭 CA

换句话说,您可以通过关闭节点而不是容忍分区来实现 CA,但请记住分区可能会继续发生,因此这将收敛到集群中有单个节点的情况,我假设这与您想要的相反,即拥有一个包含多个节点的集群就是重点。

因此,在实践中,您最终会在CPCA之间进行选择。请参阅此答案了解更多说明性示例。


2
投票

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

请参阅this了解 CA 为何存在的想法:

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

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


0
投票

CA 不实用,但我不认为 CAP 定理的表述有任何问题。 CA简单来说就是只有在不存在网络分区问题的情况下,系统才能同时提供一致性和可用性。然而,当存在网络分区问题时,系统无法正常运行(例如,最终可能会失去可用性或一致性);否则,它是 CAP,而不是 CA。

CA 系统的示例是什么?就像 @João Matos 提到的那样:当节点无法与其他节点通信时,它可以自行关闭。极端情况下,除了主节点之外的所有节点都自行关闭,最终主节点因为某种原因出现故障,导致系统故障(不再是CA)。

© www.soinside.com 2019 - 2024. All rights reserved.