【问题标题】:Understanding the "P" in "CAP" with DDBMSes用 DDBMS 理解“CAP”中的“P”
【发布时间】:2013-03-02 19:46:44
【问题描述】:

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

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

但由于某种原因,我对 CAP 的分区部分感到窒息,它的意义在于,尤其是对于 DDBMS。

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

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

【问题讨论】:

  • CAP 是关于分布式系统的定理。根据定义,单节点数据库不是分布式系统。
  • 感谢@APC (+1) - 我不知道 CAP 仅限于分布式系统。然而,这只会压制我的第二个不那么重要的辅助问题。这里的主要问题是:P真正保证什么?

标签: database distributed-computing database-partitioning cap


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多