讀懂共識算法|區塊鏈系統中如何高效地達成共識
在區塊鏈五大特征中,去中心化始終是激辯的話題。www.emoneybtc.com狹義來講,區塊鏈是一種分布式賬本,這意味著在區塊鏈這一分布式系統中,是通過各個節點來識別、傳播和記載信息。 如何在分布式系統中高效地達成共識是分布式計算領域的重要研究問題。
拜占庭將軍問題1982年,Leslie Lamport提出一個故事模型:擁有巨大財富的拜占庭帝國被鄰國垂涎已久,然而想要拿下拜占庭,周圍鄰邦必須同時進攻。然而彼此相距甚遠,中間如果有叛徒必定無法完成進攻。 這就相當於一個由非信任或半信任的鄰國構成的分布式網絡,在這一環境中,各鄰邦如何達成正確的共識? 這樣就可以理解,區塊鏈所在的無效區塊或問題區塊環境(拜占庭),其中多達三分之一的參與者可能是具有優勢或控制網絡的攻擊者。如何確保各個節點得到一致的執行結果?共識算法 共識算法解決的是對某個提案 (Proposal),大家達成一致意見的過程。 提案的含義在分布式系統中十分寬泛,如多個事件發生的順序, 某個鍵對應的值, 誰是領導等。可以認為任何需要達成一致的信息都是一個提案。實踐中,一致性的結果往往還需要客戶端的特殊支持,典型地通過訪問足夠多個服務節點 (背書節點) 來驗證確保獲取共識後結果。 實際上,如果分布式系統中各個節點都能保證以十分強大的性能 (瞬間響應,高吞吐) 無故障的運行,則實現共識過程並不復雜,簡單通過多播過程投票即可。可惜的是,現實中這樣 “完美” 的系統並不存在,如響應請求往往存在時延,網絡會發生中斷,節點會發生故障,甚至存在惡意節點故意要破壞系統。一般地,把故障 (不響應) 的情況稱為 “非拜占庭錯誤”,惡意響應的情況稱為 “拜占庭錯誤” (對應節點為拜占庭節點)。 針對非拜占庭錯誤的情況,一般包括 Paxos、Raft算法及其變種。對於要能容忍拜占庭錯誤的情況,一般包括PBFT系列、PoW系列算法等。從概率角度,PBFT系列算法是確定的,一旦達成共識就不可逆轉; 而PoW系列算法則是不確定的,隨著時間推移,被推翻的概率越來越小。
PBFT算法 實用拜占庭容錯算法(Practical Byzantine Fault Tolerance Algorithm,PBFT),是首個實用的在異步分布式網絡中實現拜占庭容錯的共識算法。 分布式網絡的異步是指不對節點的相對處理速度與消息遞送時間延遲做任何設定。所謂拜占庭容錯,是指在一個若干服務器的系統中,存在非拜占庭錯誤,即系統中存在少量拜占庭出錯節點,仍然能形成共識,則稱該系統是拜占庭容錯的。 PBFT采用三階段的協議,分別是預准備、准備、確認。預准備和准備階段保證發送請求的順序執行;確認階段保證確認請求的順序。 是保證所有正常節點按照相同的順序執行所有有效的客戶請求。
分布式一致性算法 傳統靜態拓撲主從模型分布式一致性算法存在嚴重負載不均及單點性能瓶頸效應,且崩潰節點大於集群規模的 50% 時算法無法正常工作。針對上述問題,永旗鏈 (VBC) 提出基於動態拓撲及有限表決思想的分布式一致性算法 (YAC – Yet Another Consensus), 這種算法伴隨模塊化架構以及簡易實現。 算法動態生成參與一致性表決的成員子集及Leader節點並時分遷移,形成統計負載均衡;去除要求全體多數派成員參與表決的強約束,使算法具備更高的失效容忍性;並通過日志鏈機制重新建立算法安全性約束,同時證明了算法的正確性。 分布式計算技術的發展平衡了13益膨脹的應用計算性能需求與單機性能瓶頸之間的矛盾,一致性問題是保證分布式系統正確性與可靠性的核心問題。
傳統分布式一致性算法,無論幕於 P2P 模型還是主從模型,都存在必須要求半數以上節點存活並參加一致性表決的強約束,也稱法定集約束。這是由於從集合論的角度,不可能存在兩個多數派成員集合同時投票贊成兩個不同議案,因此從數學角度確保一致性算法的正確性,這顯著制約了算法的失效容忍性上限。
YAC算法YAC 分布式系統針對上述傳統主流分布式算法中存在的問題提出了改良方法。YAC 算法不采用固定Leader節點,而采用特定的策略動態生成決策成員集合,該集合在集群成員節點中隨時域動態遷移,形成統計負載均衡,作為臨時負載中心的Leader角色也采用共識機制隨上述集合的產生動態生成。YAC 算法放棄采用傳統分布式一致性算法中關於半數以上成員節點組成法定集參加表決的幄約束,而在特定時間片內由映射的角色成員集合參與一致性表決。 該算法允許實現輕量級客戶端,而不需要維護交易的完整歷史。每個客戶端都與一個用戶相連,該用戶持有區塊鏈系統中注冊的公鑰。首先,客戶端發送交易至排序服務,然後為交易排序和發出提議區塊(一組將被節點驗證的交易)。最後,排序服務與所有節點共享提議區塊。
在收到排序服務的提議區塊後,節點會對已驗證的提議區塊進行計算。當節點對區塊哈希值進行投票時,它會生成當前回合的節點順序。該順序是節點的排列,用於在網絡中傳播選票。該順序由一個取區塊哈希值及初始節點列表為參數的函數生成。排序函數應為純函數,並返回分布一致的列表。 在這一過程中,客戶端的角色是生成交易並將其發送給節點,網絡中的每個客戶端都將自己的交易傳播到排序服務。排序服務收集所有交易,對其進行排序並生成提議區塊。節點負責對提議區塊中的交易達成一致,並在區塊中存儲已達成一致的交易。為驗證提議區塊,它需維護完整的交易歷史。 YAC 與已知的驗證節點集合共同合作,主要受傳統 PBFT 算法的影響,但在其基礎上有顯著的提高。傳統的基於領導者的算法有一個明顯的弱點: 領導者暴露在 DoS 攻擊之下,可以審查交易或投票。YAC 算法不需要選舉領導者,每個節點都可以收集協作信息。 為確保算法安全性,即中間不含寫操作的情形下,向集群任意 點發起的任意讀請求序列讀取到的狀態值序列都一致,YAC 定義了下列安全性約束: 約束 1:如果一個節點支持一個決議,那麼本時間片內不再支持任何其他決議。
約束 2:表決團是原子的,當且僅當半數以上的成員支持一項決議,該決議才獲得通過。
約束 3:一個時間片內僅執行一次表決,如果一個時間片內,節點未表決通過或被通知通過一個表決成功的議案,那麼節點生成一個空的 Log Entry 鏈接到本地 Log Chain 副本中。
約束 4:如果同一時問片內,Log Chain的對應Log Entry在集群中同時存在空和非空版本,那麼非空Log Entry對應正確的主分支版本。
- 有ETH?那你更需要這篇以太坊原理介紹了……
持有ETH的你,是否了解以太坊的原理呢?區塊鏈的本質上是一個去中心化的數據庫。它使用密碼學的相關方法產生數據塊,每一個數據塊中包含了一次比
- 計算和存儲的痛點分析
在當前的區塊鏈技術方案中,始終無法突破單機的存儲和計算瓶頸,甚至連單機的 多核計算和多盤存儲都不能很好的利用。整體性能和擴展性存在一定局限
- 制造業如何植入區塊鏈
提起區塊鏈,您首先會想到什麼?是以比特幣為代表的虛擬貨幣,還是跨境支付中的點對點交易?作為一種數字技術,率先在金融領域落地的區塊鏈,已延伸
- 從技術發展來看區塊鏈
從技術發展的角度介紹一下區塊鏈,現在行業裡分成區塊鏈1.0、區塊鏈2.0、區塊鏈3.0。 所謂區塊鏈1.0,最典型的代表就是20
- Robert Herjavec預測比特幣價格短期內將超過2萬美元
鲨魚坦克(Shark Tank)的Robert Herjavec在接受華爾街日報采訪時表示,比特幣是“長期的”,數字貨幣肯定會受到監管,而
- 外匯投資的7大技巧
假定投資者嚴格的遵守買賣交易原則,深信各位必然都可以在外匯市場上獲利。理由在於金融市場屬於極富紀律性的專業領域,市場的理論及信息分析可
- 外匯新手必須了解的交易策略
作為一個新手,就一定要了解一些外匯交易策略,這樣你在實際的操作過程中就不會像個無頭蒼蠅一樣亂撞,而是有條不紊的進行了交易。這樣你不但不
- 如何利用形勢做單盈利?
現貨黃金投資中如何利用形勢做單盈利?下面小編來為大家詳細介紹。縮量下跌:假作真時真亦假,走勢圖形完全可被主力
- 快手1萬粉絲能賺多少?
最佳答案:
快手1萬粉絲能賺多少,需要看你自己怎麼用方法和“手段”來實現粉絲變現了。一般直接發視頻是
- 2018京東plus會員有必要開通嗎?
最佳答案:
京東plus會員的話,如果平時在京東買東西比較多,那麼開通還是有必要的,雖然要198/年