回答

8

CAP定理实际上有点误导。您可以拥有CA设计的事实是无稽之谈,因为发生分区时,您必然会遇到一致性问题(例如数据同步问题)或可用性问题(延迟问题)。这就是为什么有一个更准确的定理指出:

在分布式系统中的分区,您必须选择之间一致性可用性

仍然在实践中并不那么简单。您应该注意,一致性和可用性之间的选择不是二元的。你甚至可以有一定程度的两个。例如,关于ACID,您可以与NoSQL进行原子和持久事务处理,但会失去一定程度的隔离性和一致性以提高可用性。然后,可用性可以同化为等待时间,因为您的响应时间取决于几个因素(最近的服务器是否可用?)。

所以,回答你的问题,这通常是营销废话。你需要真正划伤表面,看看解决方案究竟在获得什么,以及是否被放弃。

如果您想要更深入的解释,您可以看看here,herehere

+0

谢谢你这个好的答案!我还有另外一个问题:如果我们选择可用性,这意味着我们更喜欢速度 - 换句话说,如果我们有通信问题(分区),节点再次联机,但它们不同步。或者,如果我们更倾向于(一致性)确切的数据 - 例如,如果我们有数百万欧元的交易等等。在这种情况下,我们将选择一致性。我对么? 这个定理是什么?它有任何名字吗? :) – grep

+1

@grep是的,你是对的,但你不会那么做,因为选择一个或另一个的选择太多。现实世界比定理更复杂:) – LMeyer

+0

再次感谢您。 使用CAP定理,我知道哪个数据库位于CP(BigData,Mongo,Hbase)之间,哪个数据库位于AP(Riak,Cassandra,Dynamo)之间。 如果我们用新定理,一致性或可用性如何选择数据库?如果我们会伤心BigData,Mongo,Hbase只有一致性并且Dynamo,Riak,Cassandra只有Availabillity,这是否正确?据我所知,这是不正确的,我可以在一定程度上让他们两个。这是真的吗? – grep

相关问题