一致性演算法中的節點下限

2021-06-04 06:05:29 字數 1598 閱讀 6438

在眾多的分布式一致性演算法中,經常需要通過節點的數量滿足某種規則來保證演算法的正確性,比如paxos演算法,依賴乙個」多數派「 節點的工作的正確性。這類演算法的共同目標是容許盡量多的節點失敗但又不影響演算法的正確性」。

這類問題本質上都抽象為數學上集合之間的邏輯關係,下面我們便從集合的性質入手討論,為此先引入兩個問題:

假設n為一非空結合,n為集合的元素數,m1,m2,...,mm為n的m個子集,其元素數分別為n1,n2,...,nm,則:

為此,我們先從m的兩個子集a、b(元素數分別為a、b)開始,假如a、b有交集則必須a+b>n,若a+b=n,則恰好將n劃分為兩個完全劃分(不相交的子集),因此大於n一定能保證相交。此時:a+b-n即為交集的最小個數,原因是不妨設(a-i)+b=n,為n的兩個完全劃分,則為i即為a與b重合的元素,i=a+b-n。

三個集合有交集的條件是什麼?假如i=a∩b,則第三個集合只要與i有交集即可,這就把三個集合的問題轉化為2個集合,因為兩個集合的最小交集為a+b-n,因此,c的元素個數c必須滿足c+(a+b-n)>n即a+b+c>2n才能保證有交集。同理,a+b+c-2n為交集最小個數

通過:

推測:

不妨令t個集合時上述條件成立:

則對t+1個集合必有:

當t+1個集合與前面t個集合有交集時,必有

n1+n2+...+nt-t*n+nt+1-n>n,整理即得所證結論。特別當m個集合元素數相同時,比如都為a,則相交條件為:ma>(m-1)n=>a>(1-1/m)n,只要m稍微大點,a與n會非常接近。

在paxos演算法中能保證演算法正確執行的節點數為quorum,qc、qf 分別為classic paxos與fast paxos的quorum

在classic paxos演算法中,只要兩個子集有交集即可,也即m=2,則a>n/2  <=> |qc| ≥[n/2]+1 

在fast paxos演算法中,引入了三個集合:

要求:

即三個集合有交集。但在fast paxos中描述問題的形式稍微有點改變:

f是classic round允許的最大失敗數,e是fast round允許的最大失敗數,e<=f,上面等價於:

如果e取上限e=f,則n>3f<=>ff≤⌈n/3⌉ -1,因此:(qc、qf 分別為classic round與fast round的quorum)

|qc| = |qf | ≥ n − ⌈n/3⌉ + 1 ≥ ⌊2n/3⌋ + 1-----------(1)

如果f取得上限n>2f <=> f≤⌈n/2⌉ -1,根據n>2e+f <=> n >2e+⌈n/2⌉ -1 <=> 2e ≤n-⌈n/2⌉ <=> e≤⌈n/4⌉,因此:

|qc| ≥n-⌈n/2⌉+1 = ⌈n/2⌉+1

|qf |≥n-⌈n/4⌉≥⌈3n/4⌉-----------(2)

上述(1)、(2)都為可行性結果,統稱為保證一致性演算法的節點下限。但在實際中因為(1)保證|qc| = |qf |,程式設計更簡單、清晰,使用的會更多一些。

根據這個結論,會得出classic paxos與fast paxos所需的最小節點數:

即在允許乙個節點失敗的情況下,classic paxos至少需要3個節點,而fast paxos則需要4個。

很明顯,通過集合工具能極大地簡化一致性演算法的共性問題的研究。

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

一致性雜湊演算法 虛擬節點

一致性雜湊演算法 虛擬節點 一致性雜湊演算法是分布式系統中常用的演算法。比如,乙個分布式的儲存系統,要將資料儲存到具體的節點上,如果採用普通的hash方法,將資料對映到具體的節點上,如key n,key是資料的key,n是機器節點數,如果有乙個機器加入或退出這個集群,則所有的資料對映都無效了,如果是...

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...