回答

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

相關問題