共識機制

共識與一致性的區別:

  • 共識(Consensus),很多時候會見到與一致性(Consistency)術語放在一起討論。嚴謹地講,兩者的含義並不完全相同。 一致性的含義比共識寬泛,在不同場景(基於事務的數據庫、分佈式系統等)下意義不同。
  • 具體到分佈式系統場景下,一致性指的是多個副本對外呈現的狀態。如順序一致性(Sequential
    Consistency)、線性一致性(Linearizability
    Consistency),描述了多節點對數據狀態的共同維護能力。而共識,則特指在分佈式系統中多個節點之間對某個事情(例如多個事務請求,先執行誰?)達成一致看法的過程。因此,達成某種共識並不意味着就保障了一致性。
  • 實踐中,要保障系統滿足不同程度的一致性,往往需要通過共識算法來達成。
  • 共識算法解決的是分佈式系統對某個提案(Proposal),大部分節點達成一致意見的過程。
  • 系統中多個節點最關鍵地是對多個事件的順序進行共識,即排序。

共識機制

所謂共識,簡單理解就是指大家都達成一致的意思。
區塊鏈系統中,每個節點必須要做的事情就是讓自己的賬本跟其他節點的賬本保持一致。
共識算法其實就是一個規則,每個節點都按照這個規則去確認各自的數據。
一、拜占庭容錯技術(Byzantine Fault Tolerance,BFT)
是一類分佈式計算領域的容錯技術。
發生故障節點被稱爲拜占庭節點,而正常的節點即爲非拜占庭節點。
拜占庭容錯系統是一個擁有n臺節點的系統,整個系統對於每一個請求,滿足以下條件:
  1)所有非拜占庭節點使用相同的輸入信息,產生同樣的結果;
  2)如果輸入的信息正確,那麼所有非拜占庭節點必須接收這個信息,並計算相應的結果。
  拜占庭系統普遍採用的假設條件包括:
  1)拜占庭節點的行爲可以是任意的,拜占庭節點之間可以共謀;
  2)節點之間的錯誤是不相關的;
  3)節點之間通過異步網絡連接,網絡中的消息可能丟失、亂序並延時到達,但大部分協議假設消息在有限的時間裏能傳達到目的地;
  4)服務器之間傳遞的信息,第三方可以嗅探到,但是不能篡改、僞造信息的內容和驗證信息的完整性。

二、實用拜占庭容錯系統(PBFT)
實用拜占庭容錯系統(PBFT)降低了拜占庭協議的運行複雜度,從指數級別降低到多項式級別(Polynomial),使拜占庭協議在分佈式系統中應用成爲可能。

PBFT要求共同維護一個狀態,所有節點採取的行動一致。
在這裏插入圖片描述
整個協議的基本過程如下:
1)客戶端發送請求,激活主節點的服務操作。
2)當主節點接收請求後,啓動三階段的協議以向各從節點廣播請求。
[2.1]序號分配階段,主節點給請求賦值一個序列號n,廣播序號分配消息和客戶端的請求消息m,並將構造PRE-PREPARE消息給各從節點;
[2.2]交互階段,從節點接收PRE-PREPARE消息,向其他服務節點廣播PREPARE消息;
[2.3]序號確認階段,各節點對視圖內的請求和次序進行驗證後,廣播COMMIT消息,執行收到的客戶端的請求並給客戶端以響應。
3)客戶端等待來自不同節點的響應,若有m+1個響應相同,則該響應即爲運算的結果。

三、Raft協議
Raft階段主要分爲兩個,首先是leader選舉過程,然後在選舉出來的leader基礎上進行正常操作,比如日誌複製、記賬等。

在Raft中,每個結點會處於下面三種狀態中的一種:
1.follower:所有結點都以follower的狀態開始。如果沒收到leader消息則會變成candidate狀態
2.candidate:會向其他結點“拉選票”,如果得到大部分的票則成爲leader。這個過程就叫做Leader選舉(Leader Election)
3.leader:所有對系統的修改都會先經過leader。每個修改都會寫一條日誌(log entry)。leader收到修改請求後的過程如下,這個過程叫做日誌複製(Log Replication):
(1)複製日誌到所有follower結點(replicate entry)
(2)大部分結點響應時才提交日誌
(3)通知所有follower結點日誌已提交
(4)所有follower也提交日誌
(5)現在整個系統處於一致的狀態

四、工作量證明(Proof of Work,PoW)
PoW就是一份確認工作端做過一定量工作的證明。PoW系統的主要特徵是計算的不對稱性。工作端需要做一定難度的工作得出一個結果,驗證方卻很容易通過結果來檢查工作端是不是做了相應的工作。
工作量證明最常用的技術原理是散列函數。由於輸入哈希h()的任意值n,會對應到一個h(n)結果,而n只要變動一個比特,就會引起雪崩效應,所以幾乎無法從h(n)反推回n,因此藉由指定查找h(n)的特徵,讓用戶進行大量的窮舉運算,就可以達成工作量證明。
工作量證明的步驟如下
1.構建區塊,把將要寫入區塊交易信息組成交易列表,通過Merkle樹算法把交易列表信息生成Merkle根哈希。
2.把Merkle根哈希、難度值等相關字段組裝成區塊頭,把區塊頭80字節數據作爲工作量證明的數據輸入。
3.不停地變更區塊頭的隨機數,即nonce的數值,變更後不斷採用SHA256運算。與目標值做對比,如果小於目標值,則解題成功,工作量證明完成。

五、股權證明(Proof of Stake ,POS)
PoS類似於財產儲存在銀行,這種模式會根據你持有數字貨幣的量和時間,分配給你相應的利息。

就是一個根據你持有貨幣的量和時間,給你發利息的一個制度。

**點點幣(Peercoin)**是首先採用權益證明的貨幣,點點幣在SHA256的哈希運算的難度方面引入了幣齡的概念,使得難度與交易輸入的幣齡成反比。

**幣齡:**例如,一個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就爲3000,這個時候,如果你發現了一個PoS區塊,你的幣齡就會被清空爲0。你每被清空365幣齡,你將會從區塊中獲得0.05個幣的利息(假定利息可理解爲年利率5%),那麼在這個案例中,利息 = 3000 * 5% / 365 = 0.41個幣。

權益證明必須採用某種方法定義任意區塊鏈中的下一合法區塊,依據賬戶結餘來選擇將導致中心化,例如單個首富成員可能會擁有長久的優勢。爲此,人們還設計了其他不同的方法來選擇下一合法區塊。

PoS機制雖然考慮到了PoW的不足,但依據權益結餘來選擇,會導致首富賬戶的權力更大,有可能支配記賬權。股份授權證明機制(Delegated Proof of Stake,DPoS)的出現正是基於解決PoW機制和PoS機制的這類不足。

六、委任權益證明(Delegated Proof of Stake,DPOS)
比特股(Bitshare)是一類採用DPoS機制的密碼貨幣,它期望通過引入一個技術民主層來減少中心化的負面影響。

比特股引入了見證人這個概念,見證人可以生成區塊,每一個持有比特股的人都可以投票選舉見證人。得到總同意票數中的前N個(N通常定義爲101)候選者可以當選爲見證人,當選見證人的個數(N)需滿足:至少一半的參與投票者相信N已經充分地去中心化。

見證人的候選名單每個維護週期(1天)更新一次。見證人然後隨機排列,每個見證人按序有2秒的權限時間生成區塊,若見證人在給定的時間片不能生成區塊,區塊生成權限交給下一個時間片對應的見證人。DPoS的這種設計使得區塊的生成更爲快速,也更加節能。

DPoS背後的理性邏輯
1.使權益所有者能夠通過投票決定記賬人
2.最大化權益所有者的紅利
3.最小化保證網絡安全的消耗
4.最大化網絡的性能
5.最小化運行網絡的成本

七、Ripple共識算法
Ripple是一種基於互聯網的開源支付協議,可以實現去中心化的貨幣兌換、支付與清算功能。
在Ripple的網絡中,交易由客戶端(應用)發起,經過追蹤節點(tracking node)或驗證節點(validating node)把交易廣播到整個網絡中。追蹤節點的主要功能是分發交易信息以及響應客戶端的賬本請求。驗證節點除包含追蹤節點的所有功能外,還能夠通過共識協議,在賬本中增加新的賬本實例數據。
  
Ripple的共識達成發生在驗證節點之間,每個驗證節點都預先配置了一份可信任節點名單,稱爲UNL(Unique Node List)。在名單上的節點可對交易達成進行投票。每隔幾秒,Ripple網絡將進行如下共識過程:
  1)每個驗證節點會不斷收到從網絡發送過來的交易,通過與本地賬本數據驗證後,不合法的交易直接丟棄,合法的交易將彙總成交易候選集(candidate set)。交易候選集裏面還包括之前共識過程無法確認而遺留下來的交易。
  2)每個驗證節點把自己的交易候選集作爲提案發送給其他驗證節點。
  3)驗證節點在收到其他節點發來的提案後,如果不是來自UNL上的節點,則忽略該提案;如果是來自UNL上的節點,就會對比提案中的交易和本地的交易候選集,如果有相同的交易,該交易就獲得一票。在一定時間內,當交易獲得超過50%的票數時,則該交易進入下一輪。沒有超過50%的交易,將留待下一次共識過程去確認。  
  4)驗證節點把超過50%票數的交易作爲提案發給其他節點,同時提高所需票數的閾值到60%,重複步驟3)、步驟4),直到閾值達到80%。
  5)驗證節點把經過80%UNL節點確認的交易正式寫入本地的賬本數據中,稱爲最後關閉賬本(Last Closed Ledger),即賬本最後(最新)的狀態。
在這裏插入圖片描述
在Ripple的共識算法中,參與投票節點的身份是事先知道的,因此,算法的效率比PoW等匿名共識算法要高效,交易的確認時間只需幾秒鐘。當然,這點也決定了該共識算法只適合於權限鏈(Permissioned chain)的場景。Ripple共識算法的拜占庭容錯(BFT)能力爲(n-1)/5,即可以容忍整個網絡中20%的節點出現拜占庭錯誤而不影響正確的共識。

發佈了83 篇原創文章 · 獲贊 25 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章