分布式系統之Quorum (NRW)算法


基於Quorum投票的冗余控制算法

Quorom 機制,是一種分布式系統中常用的,用來保證數據冗余和最終一致性的投票算法,其主要數學思想來源於鴿巢原理

在有冗余數據的分布式存儲系統當中,冗余數據對象會在不同的機器之間存放多份拷貝。但是同一時刻一個數據對象的多份拷貝只能用於讀或者用於寫。

該算法可以保證同一份數據對象的多份拷貝不會被超過兩個訪問對象讀寫。

算法來源於[Gifford, 1979][3][1]。 分布式系統中的每一份數據拷貝對象都被賦予一票。每一個操作必須要獲得最小的讀票數(Vr)或者最小的寫票數(Vw)才能讀或者寫。如果一個系統有V票(意味着一個數據對象有V份冗余拷貝),那么這最小讀寫票必須滿足:

  1. Vr + Vw > V
  2. Vw > V/2

第一條規則保證了一個數據不會被同時讀寫。當一個寫操作請求過來的時候,它必須要獲得Vw個冗余拷貝的許可。而剩下的數量是V-Vw 不夠Vr,因此不能再有讀請求過來了。同理,當讀請求已經獲得了Vr個冗余拷貝的許可時,寫請求就無法獲得許可了。

第二條規則保證了數據的串行化修改。一份數據的冗余拷貝不可能同時被兩個寫請求修改。

算法的好處

在分布式系統中,冗余數據是保證可靠性的手段,因此冗余數據的一致性維護就非常重要。一般而言,一個寫操作必須要對所有的冗余數據都更新完成了,才能稱為成功結束。比如一份數據在5台設備上有冗余,因為不知道讀數據會落在哪一台設備上,那么一次寫操作,必須5台設備都更新完成,寫操作才能返回。

對於寫操作比較頻繁的系統,這個操作的瓶頸非常大。Quorum算法可以讓寫操作只要寫完3台就返回。剩下的由系統內部緩慢同步完成。而讀操作,則需要也至少讀3台,才能保證至少可以讀到一個最新的數據。

Quorum的讀寫最小票數可以用來做為系統在讀、寫性能方面的一個可調節參數。寫票數Vw越大,則讀票數Vr越小,這時候系統寫的開銷就大。反之則寫的開銷就小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM