1. 程式人生 > >分散式資料系統如何實現各種型別的一致性?

分散式資料系統如何實現各種型別的一致性?

對於分散式資料系統:

N — 資料複製的份數

W — 更新資料是需要保證寫完成的節點數

R — 讀取資料的時候需要讀取的節點數

如果W+R>N,寫的節點和讀的節點重疊,則是強一致性。例如對於典型的一主一備同步複製的關係型資料庫,N=2,W=2,R=1,則不管讀的是主庫還是備庫的資料,都是一致的。一般設定是RW = N+1,這是保證強一致性的最小設定。

如果W+R<=N,則是弱一致性。例如對於一主一備非同步複製的關係型資料庫,N=2,W=1,R=1,則如果讀的是備庫,就可能無法讀取主庫已經更新過的資料,所以是弱一致性。

對於分散式系統,為了保證高可用性,一般設定N>=3

。不同的N,W,R組合,是在可用性和一致性之間取一個平衡,以適應不同的應用場景。

如果N=W,R=1,任何一個寫節點失效,都會導致寫失敗,因此可用性會降低,但是由於資料分佈的N個節點是同步寫入的,因此可以保證強一致性。例項:HBase是藉助其底層的HDFS來實現其資料冗餘備份的。HDFS採用的就是強一致性保證。在資料沒有完全同步到N個節點前,寫操作是不會返回成功的。也就是說它的WN,而讀操作只需要讀到一個值即可,也就是說它R1

VoldemortCassandraRiak這些類Dynamo的系統,通常都允許使用者按需要設定NRW三個值,即使是設定成WR<= N也是可以的。也就是說他允許使用者在強一致性和最終一致性之間自由選擇。而在使用者選擇了最終一致性,或者是

W<N的強一致性時,則總會出現一段“各個節點資料不同步導致系統處理不一致的時間”。為了提供最終一致性的支援,這些系統會提供一些工具來使資料更新被最終同步到所有相關節點。