Marklogic 如何做到一致性和可用性?

How Marklogic can have consistency and availability?

CAP 定理对我来说似乎合乎逻辑。我的理解是:

如果我在分布式系统上有一致性,我必须等待所有 交易。 ACID 的成本是复制所有数据的时间 网络。

但是Marklogic怎么能两者兼得呢。 ACID 和分布式系统没有延迟?
那么是否可以在同一个数据库上同时拥有 BASE 和 ACID 属性?
那么CAP定理错了吗?

CAP 定理没有错,只是过时了。这是作者的更新:CAP Twelve Years Later: How the "Rules" Have Changed.

MarkLogic 通过 MVCC 支持 ACID 属性。如果愿意,您可以将其配置为使用 BASE 属性来代替。据我了解,关键是针对您的生产要求进行设计和优化。 MarkLogic 拥有大量可用的复制功能,并且随着我们的客户解决部署全球分布式集群的实际问题,我们不断地添加到该产品组合中。

你读过Inside MarkLogic Server了吗?该白皮书很好地解释了 MarkLogic 如何解决其中的许多挑战。

CAP 定理中的可用性是关于分区两侧的主机,而不是关于整个系统。

在 CAP 定理中,如果 所有 网络分区任一侧的主机可以继续接受读取和更新事务,那么您就是 "Available"。我们的大多数客户不关心 所有主机 是否在网络分区时仍然可用。他们关心整个数据库 在网络分区期间保持可用。因此,如果集群已经复制或共享数据,以便分区两侧都有足够的数据继续为查询提供服务,并且足够聪明,知道分区的哪一侧应该保持可用,哪一侧应该优雅地退出,那么数据库 可以在网络分区时保持可用,即使所有主机都不可用。这就是 MarkLogic 在集群中所做的。

在集群之间,MarkLogic 有很多选项可以让您接近绝对一致的程度。我们使用异步复制在集群之间移动数据,因此如果集群之间存在网络分区,则这些集群之间的数据可能不一致。您可以控制滞后限制的时间长度,以便对其进行调整,如果您需要集群之间的绝对一致性,我们也有办法实现。

底线是:

  • 客户最关心的是他们的数据库或数据服务保持可用,而不是任何特定主机保持可用,因此我们关注 系统 的可用性并且可以在不违反 CAP 的情况下提供可用性定理
  • 可以调整多集群 MarkLogic 部署,以便在面对网络分区时为您提供一致性和可用性的适当平衡。

希望对您有所帮助。