分散式資料系統如何實現各種型別的一致性?
阿新 • • 發佈:2019-02-08
對於分散式資料系統:
N — 資料複製的份數
W — 更新資料是需要保證寫完成的節點數
R — 讀取資料的時候需要讀取的節點數
如果W+R>N,寫的節點和讀的節點重疊,則是強一致性。例如對於典型的一主一備同步複製的關係型資料庫,N=2,W=2,R=1,則不管讀的是主庫還是備庫的資料,都是一致的。一般設定是R+W = N+1,這是保證強一致性的最小設定。
如果W+R<=N,則是弱一致性。例如對於一主一備非同步複製的關係型資料庫,N=2,W=1,R=1,則如果讀的是備庫,就可能無法讀取主庫已經更新過的資料,所以是弱一致性。
對於分散式系統,為了保證高可用性,一般設定N>=3
如果N=W,R=1,任何一個寫節點失效,都會導致寫失敗,因此可用性會降低,但是由於資料分佈的N個節點是同步寫入的,因此可以保證強一致性。例項:HBase是藉助其底層的HDFS來實現其資料冗餘備份的。HDFS採用的就是強一致性保證。在資料沒有完全同步到N個節點前,寫操作是不會返回成功的。也就是說它的W=N,而讀操作只需要讀到一個值即可,也就是說它R=1。
像Voldemort,Cassandra和Riak這些類Dynamo的系統,通常都允許使用者按需要設定N,R,W三個值,即使是設定成W+R<= N也是可以的。也就是說他允許使用者在強一致性和最終一致性之間自由選擇。而在使用者選擇了最終一致性,或者是