Quorum機制與NRW演算法

2021-09-02 02:36:30 字數 3694 閱讀 2384

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

1、假設n=5, 如果r=1, 那麼w必須是5. 所以就是寫入所有的節點是全部節點,那麼讀取任何乙個節點就可以最新的資料。 有點就是像讀寫鎖了。 

2、如果r=5, 那麼w只要是1就可以了。 那麼寫的效率就非常高。 讀取的效率比較低。 

3、如果w=n/2+1, r=n/2, 讀寫之間為達到某個平衡。 是不錯的策略。兼顧了效能和可用性,dynamo系統的預設設定就是這種。 

r/w的配置的關係決定了哪種操作的開銷。

quorum機制是分布式場景中常用的,用來保證資料安全,並且在分布式環境中實現最終一致性的投票演算法。這種演算法的主要原理**於鴿巢原理

n: 複製的節點數,即乙份資料被儲存的份數。

r: 成功讀操作的最小節點數,即每次讀取成功需要的份數。

w: 成功寫操作的最小節點數,即每次寫成功需要的份數。

write to all copies with latest version n, 

wait synchronously for w success read from all copies, 

wait for first r responses, 

pick the highest version number

條件:w + r > n    保證一定能讀取到最新的資料

w + r > n    保證一定能讀取到最新的資料

w + r > n    保證一定能讀取到最新的資料

結論:這三個因素決定了可用性,一致性和分割槽容錯性。

只需w + r > n,就可以保證強一致性。

在保證了強一致性的情況下:並且n一經固定,那麼

如果w = 1, r = n

在分布式環境中,寫乙份,那麼如果要讀取到最新資料,就必須要讀取所有節點,然後取最新版本的值了。

對寫操作要求高效能高可用。但是讀麻煩

r = 1, w = n, read only write all

在分布式環境中,所有節點都同步完畢,才能讀取,所以只要讀取任意乙個節點就可以讀取到最新資料

對讀操作要求高效能高可用,比如類似cache之類業務。

w = q, r = q where q = n/2 + 1

可以簡單理解為寫超過一半節點,那麼讀也超過一半節點,取得讀寫效能平衡

一般應用適用,讀寫效能之間取得平衡。如n=3,w=2,r=2

這就是著名的鴿巢原理:

即當資料備份存在n份時,k份資料已經更新,那麼只要獲取n−k+1個資料副本,至少有乙個資料是更新了的。獲取其中版本最高的那份資料,即最新的。

目的就只有乙個:就是為了在讀寫操作效能都不錯的情況下取得資料一致性

為什麼從抽屜原理說起?一來大家對這個比較熟悉,二來它與quorum機制有異曲同工的地方。回顧抽屜原理,2個抽屜每個抽屜最多容納2個蘋果,現在有3個蘋果無論怎麼放,其中的乙個抽屜裡面會有2個蘋果。那麼我們把抽屜原理變變型,2個抽屜乙個放了2個紅蘋果,另乙個放了2個青蘋果,我們取出3個蘋果,無論怎麼取至少有1個是紅蘋果,這個理解起來也很簡單。我們把紅蘋果看成更新了的有效資料,青蘋果看成未更新的無效資料。便可以看出來,不需要更新全部資料(並非全部是紅蘋果)我們就可以得到有效資料,當然我們需要讀取多個副本完成(取出多個蘋果)。這就是quorum機制的原型,其實質是將write all 的負載均衡到 read only 上。

例1:同年出生的400人中至少有2個人的生日相同。

例2:幼兒園買來了不少白兔、熊貓、長頸鹿塑料玩具,每個小朋友任意選擇兩件,那麼不管怎樣挑選,在任意七個小朋友中總有兩個彼此選的玩具都相同,試說明道理.

例3:從2、4、6、…、30這15個偶數中,任取9個數,證明其中一定有兩個數之和是34。

例4:從1、2、3、4、…、19、20這20個自然數中,至少任選幾個數,就可以保證其中一定包括兩個數,它們的差是12。

例5:從1到20這20個數中,任取11個數,必有兩個數,其中乙個數是另乙個數的倍數。

例6:某校校慶,來了n位校友,彼此認識的握手問候.請你證明無論什麼情況,在這n個校友中至少有兩人握手的次數一樣多。

例7:15個網球分成數量不同的4堆,數量最多的一堆至少有多少個球?

例8:證明:任取8個自然數,必有兩個數的差是7的倍數。

例9:對於任意的五個自然數,證明其中必有3個數的和能被3整除.

例9:對於任意的11個整數,證明其中一定有6個數,它們的和能被6整除.

例10:任意給定7個不同的自然數,求證其中必有兩個整數,其和或差是10的倍數.

例11:九條直線中的每一條直線都將正方形分成面積比為2:3的梯形,證明:這九條直線中至少有三條經過同一點.

例12:飼養員給10只猴子分蘋果,其中至少要有乙隻猴子得到7個蘋果,飼養員至少要拿來多少個蘋果?

例13:從13個自然數中,一定可以找到兩個數,它們的差是12的倍數。

例14:乙個班有40名同學,現在有課外書125本。把這些書分給同學,是否有人會得到4本或4本以上課外書?

例15:42只鴿子飛進5個籠子裡,可以保證在鴿子最多的籠子中至少有幾隻鴿子?

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,...