quorum,原指為了處理事務、擁有做出決定的權力而必須出席的眾議員或參議員的數量(一般指半數以上)。
nrw演算法是基於quorum機制的是一種cp(consistency&partion tolerance)演算法。用於在資料一致性和可靠性之間達到一種平衡。為了保證系統的正常執行,能夠提供可靠的服務,分布式系統中對於資料的儲存採用多份資料副本,但是這種解決方案在資料讀寫的過程中會造成資料的不一致性。我們知道要解決資料一致性問題,就是資料的處理方式採用read only write all原則,即在分布式環境中,所有節點更新完畢後,讀操作才能進行,保證資料的強一致性。這種雖然保證了資料的在某一刻的強一致性,但是極其影響系統的效能。在乙個讀操作非常頻繁的分布式環境中,寫操作的耗時,直接阻塞了讀的操作。導致讀和寫的負載不均衡。
基於 quorum機制的 nrw演算法就是在讀和寫的負載上達到一定平衡的同時,保證資料的強一致性。機制的主要思想**於鴿巢原理。即當資料備份存在n份時,k份資料已經更新,那麼只要獲取n−
k+1 個資料副本,至少有乙個資料是更新了的。獲取其中版本最高的那份資料,即最新的。這樣,我們就不必等待所有資料副本全部更新後才去讀取資料。把寫操作的部分工作轉移到了讀操作中,使得讀寫能夠在一定程度上達到負載均衡。
一般我們都會對程式進行優化,即如何實現最小資料備份的情況下,保證資料一致性和讀寫的均衡?
假設需要備份
n 個資料副本,讀操作用
r,寫操作用
w ,操作副本用
v表示。根據鴿巢原理,要保證操作能獲得最新資料。則有以下制約條件。
1.vr+vw>n即讀操作副本量+寫操作副本量必須大於資料副本量。這就即保證必定有乙個副本是操作之後的值,同時保證了資料副本要麼處於w寫操作中,要麼處於r讀操作中。這裡的讀寫狀態是針對外部來講的,分布式環境對外部來說,同一時刻只存在一種操作(容斥定理),相當於讀寫鎖,但比加鎖(一種悲觀的策略)的方式更加高效。對於分布式環境內部,讀和寫操作只是部分節點的操作。同時限定了最小讀副本數量和最小寫副本數量。該策略中,只需要保證r+
w>
n ,就可以保證強一致性。 如果r+
w≤n ,這時讀取和寫入操作是不重疊的,系統只能保證最終一致性,而副本達到一致的時間則依賴於系統非同步更新的實現方式,不一致性的時間段也就等於從更新開始到所有的節點都非同步完成更新之間的時間。
2.vw>n/2保證了資料的序列化修改。乙份資料的冗餘拷貝不可能同時被兩個寫請求修改。如vw
2 的時候,就可能存在一部分資料被乙個寫操作修改,另一部分資料被另乙個寫操作修改。
如圖所示,在分布式環境a、
b、c、
d、e 中,根據規則一,那麼讀寫副本量應該至少為6,而現在副本只有5份,則至少有乙份
c 即在讀的資料副本中,也在寫的資料副本中,才能保證獲取到當前時刻最新的資料。規則二,如果vw
2,就像如圖所示的a、
b 寫操作和e、
d 寫操作一樣,那麼這時候整個分布式環境中就存在三種資料,造成資料的不一致性。
=5, 如果r=
1 , 那麼
w 必須是
5. 所以就是寫入所有的節點是全部節點,那麼讀取任何乙個節點就可以最新的資料。 有點就是像讀寫鎖了。 如果r
=5, 那麼
w 只要是
1就可以了。 那麼寫的效率就非常高。 讀取的效率比較低。 如果w
=n/2
+1, r=
n/2 , 讀寫之間為達到某個平衡。 是不錯的策略。兼顧了效能和可用性,dynamo系統的預設設定就是這種。
r/w的配置的關係決定了哪種操作的開銷。
Quorum機制與NRW演算法
quorum,原指為了處理事務 擁有做出決定的權力而必須出席的眾議員或參議員的數量 一般指半數以上 nrw演算法是基於quorum機制的是一種cp consistency partion tolerance 演算法。用於在資料一致性和可靠性之間達到一種平衡。為了保證系統的正常執行,能夠提供可靠的服務...
分布式系統Quorum機制
write all read one write all read one 簡稱 waro 是一種最簡單的副本控制規則,顧名思義即在更新時寫所有的副本,只有在所有的副本上更新成功,才認為更新成功,從而保證所有的副本一致,這樣在讀取資料時可以讀任一副本上的資料。缺點 讀服務的可用性較高,但更新服務的可...
基於以太坊的聯盟鏈?Quorum機制初探(下)
在2017年11月30日,quorum 推出了 2.0 的 release 版本。這一版最大的改動就是剔除了 quorumchain的共識方式,只支援 raft based consensus。相比較以太坊的pow,raft based 提供了更快更高效的區塊生成方式。相比 quorumchain,...