为什么CP系统也不能成为CAP?

时间:2015-06-21 18:06:59

标签: distributed-computing cap-theorem

我的理解的CAP首字母缩写词如下:

  • C onsistent:每次读取都会获得最新的写入
  • A 可用:每个节点都可用
  • P artion Tolerant:当节点之间的网络连接断开时,系统可以继续支持A和C承诺

假设我的理解或多或少走上正轨,那么有些事情会让我烦恼。

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

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

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

1 个答案:

答案 0 :(得分:3)

分区容差,你错了。

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

系统可以选择

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

CAP定理的概念是,您不能同时提供可用性 AND 一致性,一旦分区发生,您可以寻求可用性并希望获得最佳效果,或者保证安全并且不可用,但一致。

这里有两篇很棒的帖子,应该说清楚:

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