4 2 共識演算法

2021-09-16 19:37:14 字數 1829 閱讀 3739

共識 (consensus)在很多時候會與一致性 (consistency)術語放在一起討論。嚴謹地講,兩者的含義並不完全相同。

一致性往往指分布式系統中多個副本對外呈現的資料的狀態。如前面提到的順序一致性、線性一致性,描述了多個節點對資料狀 態的維護能力。而共識則描述了分布式系統中多個節點之間,彼此對某個狀態達成一致結果的過程。因此,一致性描述的是結果狀態,共識則是一種手段。達成某種 共識並不意味著就保障了一致性。

實踐中,要保障系統滿足不同程度的一致性,核心過程往往需要通過共識演算法來達成。

共識演算法解決的是對某個提案(proposal)大家達成一致意見的過程。提案的含義在分布式系統中十分寬泛,如多個事 件發生的順序、某個鍵對應的值、誰是領導……等等。可以認為任何可以達成一致的資訊都是乙個提案。對於分布式系統來講,各個節點通常都是相同的確定性狀態 機模型(又稱為狀態機複製問題,state-machine replication),從相同初始狀態開始接收相同順序的指令,則可以保證相同的結果狀態。因此,系統中多個節點最關鍵的是對多個事件的順序進行共 識,即排序。

4.2.1 問題與挑戰

實際上,如果分布式系統中各個單節點都能保證以十分「理想」的效能(瞬間響應、超高吞吐)無故障地執行,節點之間通訊瞬時送達,則實現共識過程並不十分複雜,簡單地通過廣播進行瞬時投票和應答即可。

可惜的是,現實中這樣的「理想」系統並不存在。不同節點之間通訊存在延遲(光速物理限制,通訊處理延遲),並且任意環節 都可能存在故障(系統規模越大,發生故障可能性越高)。如通訊網路會發生中斷、節點會發生故障、甚至存在惡意節點故意要偽造訊息,破壞系統的正常工作流 程。

一般地,把出現故障(crash或fail-stop,即不響應)但不會偽造資訊的情況稱為「非拜占庭錯誤」(non- byzantine fault)或「故障錯誤」(crash fault);偽造資訊惡意響應的情況稱為「拜占庭錯誤」(byzantine fault),對應節點為拜占庭節點。

4.2.2 常見演算法

根據解決的是非拜占庭的普通錯誤情況還是拜占庭錯誤情況,共識演算法可以分為crash fault tolerance(cft)類演算法和byzantine fault tolerance(bft)類演算法。

針對常見的非拜占庭錯誤的情況,已經存在一些經典的解決演算法,包括paxos、raft及其變種等。這類容錯演算法往往效能比較好,處理較快,容忍不超過一半的故障節點。

對於要能容忍拜占庭錯誤的情況,一般包括pbft(practical byzantine fault tolerance)為代表的確定性系列演算法、pow為代表的概率演算法等。對於確定性演算法,一旦達成對某個結果的共識就不可逆轉,即共識是最終結果;而對 於概率類演算法,共識結果則是臨時的,隨著時間推移或某種強化,共識結果被推翻的概率越來越小,成為事實上的最終結果。拜占庭類容錯演算法往往效能較差,容忍 不超過1/3的故障節點。

此外,xft(cross fault tolerance)等最近提出的改進演算法可以提供類似cft的處理響應速度,並能在大多數節點正常工作時提供bft保障。

注意  實踐中,一致性的結果往往還需要客戶端的額外支援,典型情況如通過訪問足夠多個服務節點來比對驗證,確保獲取共識後的正確結果。

4.2.3 理論界限

科學家們證明,即便在網路通訊可靠情況下,可擴充套件的分布式系統的共識問題,其通用解法的理論下限是——沒有下限(無解) 。

這個結論稱為「flp不可能原理」。該原理極其重要,可以看做是分布式領域裡的「測不准原理」。

提示  不僅在分布式系統領域,實際上在很多領域都存在類似「測不准原理」的約束。

'); (window.slotbydup = window.slotbydup || ).push(); })();

'); (window.slotbydup = window.slotbydup || ).push(); })();

共識演算法(POW,POS,DPOS,PBFT)

位元幣在block的生成過程中使用了pow機制,乙個符合要求的block hash由n個前導零構成,零的個數取決於網路的難度值。要得到合理的block hash需要經過大量嘗試計算,計算時間取決於機器的雜湊運算速度。當某個節點提供出乙個合理的block hash值,說明該節點確實經過了大量的嘗試計算...

共識演算法 POW POS

pow pos 在區塊鏈系統中,共識演算法是區塊鏈保持資料安全 不可篡改 透明性等特色的關鍵技術。共識機制是區塊鏈的靈魂,是區塊鏈建立信任的基礎。乙個區塊鏈專案選擇使用何種共識機制,決定了這個專案是否能建立起完善的激勵機制,從而起到鼓勵更多節點參與到專案中,進而增加系統的去中心化程度。工作量證明機制...

共識演算法 BFT

bft byzantine fault tolerance 稱為拜占庭容錯。拜占庭容錯技術是一類分布式計算領域的容錯技術。拜占庭假設是對現實世界的模型化,由於硬體錯誤 網路擁塞或中斷以及遭到惡意攻擊等原因,計算機和網路可能出現不可預料的行為。拜占庭容錯技術被設計用來處理這些異常行為,並滿足所要解決的...