當前位置:菜譜大全網 - 菜譜 - 常見共識算法介紹

常見共識算法介紹

在異步系統中,有必要在主機之間復制狀態,以確保每個主機達成壹致的狀態共識。在異步系統中,主機之間可能發生故障,因此需要在默認的不可靠異步網絡中定義容錯協議,以確保所有主機達成安全可靠的狀態共識。

共識算法其實就是壹套規則,設置壹套條件,篩選出有代表性的節點。在區塊鏈系統中,有許多這樣的篩選方案,如POW、Pos、DPOS等。在公鏈中,但在不需要貨幣體系的特許鏈或私有鏈中,公鏈共識算法無法提供絕對可信的節點和高效的需求。對於這樣的區塊鏈,傳統的壹致性算法成為首選,如PBFT、PAXOS、RAFT等。

目錄

BFT(拜占庭容錯技術)

二、PBFT(實用拜占庭容錯算法)

第三,PAXOS

第四,木筏

動詞 (verb的縮寫)功率(工作量證明)

六、POS(權益證明)

七。DPOS(任職權益證書)

八、漣漪

拜占庭糾錯技術是分布式計算領域的壹種容錯技術。拜占庭假設是由於硬件錯誤、網絡擁塞或中斷以及惡意攻擊,計算機和網絡的行為不可預測。拜占庭容錯就是用來處理這種異常行為,滿足待解決問題的規範。

拜占庭容錯系統是壹個有n個節點的系統,對於每個請求,整個系統滿足以下條件:

1)所有非拜占庭節點使用相同的輸入信息並產生相同的結果;

2)如果輸入的信息是正確的,所有非拜占庭節點都必須接收這個信息並計算相應的結果。

拜占庭系統中常用的假設包括:

1)拜占庭節點的行為可以是任意的,拜占庭節點之間可以相互勾結;

2)節點之間的誤差是不相關的;

3)節點通過異步網絡連接,網絡中的消息可能會丟失、亂序和延遲,但大多數協議都假設消息可以在有限的時間內到達目的地;

4)在服務器之間傳輸的信息可以被第三方嗅探,但它不能被篡改或偽造,並且信息的完整性可以被驗證。

拜占庭容錯理論上可行,實際上並不實用,還需要額外的時鐘同步機制支持。算法的復雜度也隨著節點的增加呈指數增長。

實用的拜占庭容錯將拜占庭協議的運算復雜度從指數級降低到多項式級。

PBFT是壹種狀態機復制算法,即將服務建模為狀態機,狀態機在分布式系統的不同節點進行復制。PBFT教要求共同維護壹個國家。需要運行三個基本協議,包括壹致性協議、檢查點協議和視圖替換協議。

壹致性協議。壹個壹致性協議至少包括幾個階段:請求、預準備和回復,還可能包括相互準備、提交和其他階段。

在PBFT溝通模式中,每個客戶的請求需要經歷五個階段。因為客戶端無法從服務器獲得任何關於服務器運行狀態的信息,所以PBFT的主節點是否出現錯誤只能由服務器來監控。如果服務器在壹段時間內無法完成客戶端的請求,就會觸發視圖替換協議。

整個協議的基本過程如下:

1)客戶端發送請求激活主節點的服務操作。

2)當主節點接收到請求時,它啟動三級協議向從節點廣播請求。

[2.1]序列號分配階段,主節點給請求分配壹個序列號n,廣播序列號分配消息和客戶端的請求消息m,構造壹個PRE-PREPARE消息給每個從節點;

[2.2]在交互階段,從節點接收預準備消息,並向其他服務節點廣播該準備消息;

[2.3]在序列號確認階段,在視圖中驗證請求和順序後,每個節點廣播提交消息,執行接收到的來自客戶端的請求並響應客戶端。

3)客戶端等待來自不同節點的響應。如果有m+1個相同的響應,則該響應是操作的結果。

PBFT壹般適合要求強壹致性的私有鏈和聯盟鏈。例如,在IBM領導的區塊鏈超級賬本項目中,PBFT是壹個可選的共識協議。在Hyperledger的Fabric項目中,共識模塊被設計為可插拔模塊,支持PBFT和Raft等共識算法。

在壹些分布式場景中,假設不需要考慮拜占庭故障,只處理壹般的崩潰故障。在這種情況下,采用Paxos等協議會更有效率。。PAXOS是壹種基於消息傳遞的壹致性算法,具有很高的容錯性。

PAXOS中有三個角色:提議者、接受者和學習者,主要的互動過程是在提議者和接受者之間。算法流程分為兩個階段:

階段1

a)提議者向網絡中壹半以上的接受者發送準備消息。

b)接受者通常回復承諾消息。

第二相

a)當足夠多的接受者回復承諾消息時,提議者發送接受消息。

b)在正常情況下,接受者回復被接受的消息。

流程圖如圖所示:

微信PaxosStore使用的是PAXOS協議,每分鐘調用Paxos協議的過程都是數十億次。

Paxos是Lamport設計的壹種協議,用於維護分布式系統的壹致性。但是由於Paxos非常復雜,難以理解,所以後來有了各種實現和變體。Raft是斯坦福提出的壹種更容易理解的壹致性算法,意在取代目前廣泛使用的Paxos算法。

Raft原本是管理復制日誌的共識算法,是在非拜占庭故障下達成共識的強共識協議。Raft達成共識的流程是:首先選擇壹個leader,leader接收客戶端的記賬請求,完成記賬操作,生成塊,復制到其他記賬節點。領導有完全的管理權和記賬權。例如,領導者可以在不考慮其他記賬節點的情況下決定是否接受新的交易記錄,領導者可能會變得無效或與其他節點失去聯系。這時,新的領導人重新當選。

在Raft中,每個節點將處於以下三種狀態之壹:

(1)follower:所有節點都以follower狀態開始。如果沒有收到領導消息,將成為候選狀態;

(2)候選人:它會從其他節點“拉選票”,如果獲得最多票數,它就會成為領先者。這個過程叫做領袖選舉;

(3)領導:所有對系統的修改都要先經過領導。每次修改都會寫入壹個日誌條目。領導收到修改請求後的流程如下:這個流程叫做日誌復制。

1)將日誌復制到所有跟隨者節點。

2)大多數節點只有在響應時才提交日誌。

3)通知所有追隨者節點日誌它們已經被提交。

4)所有追隨者也提交日誌。

5)現在整個系統處於壹致狀態。

筏階段主要分為兩個階段,首先是首領選舉過程,然後在選舉出首領的基礎上進行正常的操作,比如日誌抄寫、記賬等。

(1)領袖選舉

當追隨者在選舉時間內沒有收到領導者的消息時,將轉換為候選狀態。在筏式系統中:

1)任何服務器都可以成為候選服務器,只要它向其他服務器追隨者發送請求來選舉自己。

2)如果其他服務器同意,發出OK。如果在這個過程中有追隨者倒下,沒有收到參選請求,此時候選人可以自己選擇。只要達到N/2+1的多數票,候選人仍然可以成為領先者。

3)這樣,這個候選人就成了領袖***,它可以向選民發出指令,也就是跟隨者,比如記賬。

4)將來通過心跳消息通知記賬。

5)壹旦領袖崩潰,追隨者之壹成為候選人,發出邀請投票。

6)在追隨者的同意下,他成為領導者,繼續負責記賬和其他指導工作。

(2)日誌復制

記賬步驟如下:

1)假設領導者已經選定,客戶端發送添加日誌的請求;

2)領導者要求追隨者遵循他的指示,並將這個新的日誌內容附加到他們各自的日誌中;

3)大部分跟隨者服務器將交易記錄寫入賬本後,確認添加成功,並發出確認消息;

4)在下壹個心跳消息中,領導者會通知所有的跟隨者更新已確認的項目。

對每個新交易重復上述過程。

在這個過程中,如果出現網絡通信故障,以至於領導者無法訪問大部分追隨者,那麽領導者只能更新那些自己可以正常訪問的追隨者服務器。因為大部分服務器追隨者沒有領袖,他們會重新選舉壹個候選人作為領袖,然後領袖作為代表與外界打交道。如果外界要求他們添加新的交易記錄,新的領導者會按照上述步驟通知大部分追隨者。當網絡通訊恢復後,原來的領導者會變成追隨者。在失聯階段,這個老領導的任何更新都不能認為是確認,必須全部回滾才能接收到新領導的新更新。

在去中心化的賬本系統中,每個加入系統的節點都必須保持壹個完整的賬本,但是每個節點不能同時記賬,因為節點所處的環境不同,接收的信息也不同。如果他們同時記賬,必然會導致總賬不壹致。因此,同時確定了哪個節點具有記賬權。

在比特幣系統中,大約每10分鐘舉行壹次權力競賽,競賽的獲勝者獲得壹次保留賬戶的權利,並同步向其他節點添加賬本信息。

電力系統的主要特點是計算的不對稱性。工作端要做壹些困難的工作才能得到壹個結果,但是驗證者可以很容易的通過結果檢查工作端是否做了相應的工作。這個工作負載的要求是在某個字符串後串接壹個名為nonce的整數值字符串,並對串接後的字符串執行SHA256哈希運算。如果散列結果(以十六進制形式表示)以幾個0開頭,則驗證通過。

如果比特幣網絡中的任何壹個節點想要生成壹個新的塊並寫入區塊鏈,就必須解決比特幣網絡中的PoW問題。三個關鍵要素是工作量證明函數、塊和難度值。工作量證明函數是這道題的計算方法,塊決定了這道題的輸入數據,難度值決定了這道題需要的計算量。

(1)工作量證明函數為

比特幣的塊由塊頭和塊中包含的交易列表組成。固定長度為80字節的塊頭是用來證明比特幣工作量的輸入字符串。

(2)難度的調整在每個完整的節點中獨立自動地發生。每隔2016塊,所有節點都會按照統壹的公式自動調整難度。方塊生成速率快於10分鐘,難度增加,慢於10分鐘,難度降低。

公式可以總結為:新難度值=舊難度值×(過去2016塊/20160分鐘所用時間)。

工作量認證需要壹個目標值。比特幣工作量證明的目標值計算公式為:目標值=最大目標值/難度值。

其中最大目標值是恒定值:

0x 000000000 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

目標值和難度值成反比。比特幣工作量證明的成果是礦工計算的塊哈希值必須小於目標值。

(3)3)PoW能解決拜占庭將軍的問題嗎?

比特幣的冪共識算法是壹種概率拜占庭協議。

當不誠實的計算能力小於網絡最終能力的50%,且難以同時挖掘時(約10分鐘壹個區塊的情況),比特幣網絡中實現壹致性的概念會隨著確認區塊數的增加而呈指數級增長。但當不誠實的計算能力有壹定規模時,即使沒有接近50%,比特幣的共識算法也不能保證正確性,即不能保證大部分塊都是誠實節點提供的。

比特幣共識算法不適合私有鏈和聯盟鏈。第壹個原因是它是壹個最終共識算法,而不是壹個強共識算法。第二個原因是其共識效率低。

擴展知識:壹致性

只有在系統沒有任何故障,所有節點之間的通信不需要任何時間的理想條件下,才能達到嚴格的壹致性。這時候整個系統就相當於壹臺機器。現實中是不可能實現的。

強壹致性,當分布式系統中的更新操作完成後,任何多個進程或線程在訪問系統時都會得到最新的值。

弱壹致性意味著系統不保證後續進程或線程的訪問將返回最新更新的值。數據成功寫入後,系統不承諾立即讀取最新寫入的值,也不具體承諾多久讀取壹次。但是過了壹定的時間等級(二級)會盡可能的保證。可以使數據達到壹致的狀態。

最終壹致性是弱壹致性的壹種具體形式。系統保證系統將最終返回上壹次更新操作的值,而不進行任何後續更新。換句話說,如果在壹段時間後需要訪問更新的數據,這就是最終的壹致性。

在股票憑證PoS模式中,有壹個術語叫幣齡,每種貨幣每天產生1個幣齡。舉個例子,如果妳持有65,438+000枚硬幣,總共持有30天,那麽此時妳的幣齡就是3000。這時候如果妳發現壹個PoS塊,妳的幣齡就會被清空到0。每次妳被清空365個硬幣,妳會從塊中得到0.05個硬幣的利息(假設利息可以理解為5%的年利率),那麽在這種情況下,利息= 3000 * 5%/365 = 0.41個硬幣,這就很有意思了。持幣有利息。

Peercoin是第壹種采用權益證明的貨幣。計幣的權益證明機制結合了隨機化和幣齡的概念,至少30天沒有使用的硬幣可以爭奪下壹塊。幣套越長越大,簽下壹塊的可能性越大。壹旦用幣的權益去簽壹個區塊,幣齡就會清零,所以妳至少要等30天才能再簽另壹個區塊。

PoS機制雖然考慮到了PoW的不足,但是按照股權余額來選擇,會導致最有錢的賬戶擁有更大的權力,可能會主導記賬權。授權利害關系證明的出現是基於解決PoW機制和PoS機制的不足。

Bitshare是壹種使用DPoS機制的加密貨幣。它的原理是讓每壹個持有股份的人投票,從而產生101個代表,我們可以理解為101個超級節點或者礦池,這些101個超級節點相互之間擁有完全平等的權利。如果代表不能履行職責(輪到他們時,他們不能生成塊),他們將被從列表中刪除,網絡將選擇新的超級節點來替換他們。

Bitshares引入了見證人的概念,見證人可以生成區塊,每個持有Bitshares的人都可以投票給見證人。獲得總同意票的前n (n通常定義為101)名候選人可以當選為見證人,當選見證人人數(n)應滿足:至少有壹半的投票人認為n已經完全下放。

見證候選列表在每個維護期(1天)更新壹次。然後隨機安排見證人,每個見證人有2秒的時間按順序生成積木。如果見證服務器無法在給定的時間片中生成塊,則塊生成權限將在下壹個時間片中授予相應的見證服務器。

比特股份還設計了另壹種運動,代表運動。當選代表有權提議修改網絡參數,包括交易成本、區塊大小、見證費和區塊間隔。如果大多數代表同意提議的變更,股東有兩周的審查期,在此期間,他們可以罷免代表並廢除提議的變更。這種設計保證了代表在技術上無權直接修改參數,所有網絡參數的更改都需要股東的同意。

Ripple (Ripple)是壹個基於互聯網的開源支付協議。在Ripple的網絡中,事務由客戶端(應用程序)發起,並通過跟蹤節點或驗證節點廣播到整個網絡。

跟蹤節點的主要功能是發布交易信息,響應客戶的賬簿請求。校驗節點不僅包含跟蹤節點的所有功能,還可以通過協商壹致的方式在賬簿中增加新的賬簿實例數據。

Ripple的共識是在驗證節點之間達成的,每個驗證節點都預先配置了壹個被稱為UNL(Unique Node List)的可信節點列表。列表中的節點可以對事務進行投票。每隔幾秒鐘,Ripple network就會經歷以下共識過程:

1)每個驗證節點將連續接收網絡發送的事務。在與本地分類帳數據進行驗證後,非法交易將被直接丟棄,而合法交易將被匯總到壹個候選集中。事務候選集還包括先前共識過程遺留下來的事務。

2)每個驗證節點將其自己的事務候選集作為建議發送給其他驗證節點。

3)在接收到來自其他節點的建議後,如果該建議不是來自UNL上的節點,則驗證節點忽略該建議;如果是來自UNL上的壹個節點,那麽提案中的事務將與本地事務候選集進行比較,如果有相同的事務,那麽該事務將獲得壹票。在壹定時間內,當交易獲得超過50%的票數時,交易進入下壹輪。不超過50%的交易將在下壹個共識過程中得到確認。

4)驗證節點將擁有50%以上票數的事務作為提案發送給其他節點,同時將所需票數的閾值提高到60%,重復步驟3)和4),直到閾值達到80%。

5)校驗節點將80%UNL節點確認的交易正式寫入本地總賬數據,稱為最後關閉的總賬,即總賬的最後(最新)狀態。

在Ripple的共識算法中,投票節點的身份是預先知道的。這種壹致性算法只適用於許可鏈的情況。Ripple壹致性算法的拜占庭容錯(BFT)能力為(n-1)/5,這意味著全網20%的節點可以容忍拜占庭錯誤而不影響正確的壹致性。

在區塊鏈網絡中,由於應用場景不同,設計的目標也不同,不同的區塊鏈系統采用不同的壹致性算法。壹般來說,在私有鏈和聯盟鏈的情況下,對壹致性和正確性有很強的要求。壹般來說,應該采用壹致性強的共識算法。但在公鏈的情況下,通常不可能做到100%的壹致性和正確性,通常采用終極壹致性的共識算法。

共識算法的選擇與應用場景高度相關。paxos或raft用於可信環境,pbft可用於授權聯盟,pow、pos、ripple consensus可用於非授權鏈。共識機制可以根據對手的信任度自由選擇。