3

在 CAP 定理中,“P”(分区)组件实质上表明系统运行良好,尽管存在物理网络分区。

我猜“C”(一致性)和“A”(可用性)在 DDBMS 上下文中对我来说非常有意义:为了保持一致性,所有客户端都必须拥有一致的数据视图,而不管它们所服务的 DB 节点如何。并且在可用性的情况下,所有客户端都必须能够从某个数据库节点获得响应以进行读/写(即,所有节点永远不会同时关闭)。

但出于某种原因,我对 CAP 的分区部分感到窒息,它的意义是什么,尤其是对于 DDBMS 而言。

使用分布式数据库,根据定义,您有多个(集群)节点。根据网络和系统架构、物理设备等,无论如何,在节点之间复制或通信(半连接等)时都会遇到性能问题。CAP 中的“P”也是一种提高 DDBMS 性能的方法。如果没有 P 保证,性能会受到阻碍吗?

此外,“P”与单个节点(非集群)数据库有何关系?我觉得在这种情况下它完全无关紧要。提前致谢!

4

2 回答 2

13

CAP 定理说,在分布式系统中,您不能在故障期间具有普遍的正确性、可用性和分区容错性。正确性意味着从任何节点读取的数据在任何其他节点都没有冲突的值。可用性意味着客户端可以使用所有健康的节点。分区容错意味着系统可以被分割成不能相互通信但仍能正常工作的子集。

假设你有 3 台机器。其中一个无法与其他人联系,或者换句话说,集群被分成 2 个分区。如果系统可以处理这种情况,那么它就是分区容错的。但是,您必须放弃完全正确性或完全可用性:

丢弃正确性:所有节点保持运行,但分离节点和剩余集群节点可能包含冲突数据,有时称为裂脑。

删除可用性:其中一个分区脱机。这可以保护数据完整性,因为任何成功的读取都不会在其他任何地方产生冲突的值。

从数据库系统的角度来看,这意味着您必须有不同的策略来处理故障。无法处理分区故障的数据库意味着如果任何节点出现故障,则行为未定义。在故障期间牺牲正确性的数据库将迫使应用程序在故障解决时处理一致性问题,但更多节点可以保持可用。放弃可用性的数据库将允许应用程序逻辑假定数据始终是一致的,但是在故障期间将无法访问一些其他健康的节点。

于 2013-03-03T09:23:05.310 回答
0

我对 CAP 的理解是,您不能始终可靠地拥有所有三个理想的属性,并且必须选择您的优先级。我同意使用所使用的术语并不是最容易理解的,但是 Eric Brewer 本人的这篇文章很好地解释了它。http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

要直接回答您的问题,如果您选择对数据进行分区,那么在某种程度上您将需要权衡一致性或可用性。如果您在 A 和 B 之间拆分数据,并且它们之间失去了连接,那么您要么阻止更新(-availibity),要么让它们独立更新(-consistency)

于 2013-03-02T23:10:15.380 回答