1

CAP 缩写的理解如下:

  • 一致:每次读取都会获得最近的写入
  • A vailable:每个节点都可用
  • Partion Tolerant:当节点之间的网络连接断开时,系统可以继续维护 A 和 C 承诺

假设我的理解或多或少处于正轨,那么有些事情困扰着我。

AFAIK,可用性是通过以下任何技术实现的:

  • 负载均衡
  • 复制到灾难恢复系统

因此,如果我有一个我已经知道是 CP 的系统,为什么我不能通过应用这些技术之一使其也可用来“使其成为完整的 CAP ”?我确定我在这里遗漏了一些重要的东西,只是不确定是什么。

4

1 回答 1

3

这是分区容差,你错了。

只要没有发生任何分区,系统就可以保持一致且可用。有 CA 系统说,我们不关心分区。您可以让它们在带有服务器硬件的机架内运行,并且极不可能进行分区。问题是,如果发生分区怎么办?

系统可以选择

  • 继续提供服务,希望另一台服务器停机而不是提供相同的服务并提供不同的数据 - 选择可用性(AP)
  • 停止提供服务,因为它无法再保证一致性,因为它不知道另一台服务器是否已关闭或实际上已启动并运行,只是这两者之间的通信中断 - 选择一致性(CP)

CAP 定理的想法是,您不能同时提供可用性一致性,一旦发生分区,您可以追求可用性并希望最好,或者安全地进行并且不可用但一致。

这里有 2 个很棒的帖子,应该说清楚:

  • You Can't Sacrifice Partition Tolerance展示了这样一个想法,即每个真正的分布式系统现在都需要处理分区,因此 CA 系统将在第一次出现分区时立即中断
  • 十二年后的 CAP:“规则”的变化方式稍微更新了一些,并显示了 CAP 定理更加灵活,开发人员可以在其中选择应用程序在分区期间的行为方式,并且可以牺牲一点一致性来获得一些可用性,...

因此,要最终回答您的问题,如果您采用 CP 系统并更频繁地复制它,您可能会遇到系统节点之间发送的消息开销以保持一致,或者 - 如果大部分节点发生故障或者网络分区发生时没有任何部分具有明显的多数,它将无法继续运行,因为它不再能够保证一致性。但是,是的,这些界限现在变得越来越模糊,我认为我提供的参考资料会让您更好地理解。

于 2015-06-21T22:38:56.580 回答