天天看點

Fabric區塊傳播的gossip過程

Hyperledger Fabric是一個分布式區塊鍊網絡,每個節點都存有共享賬本的一個副本,該副本儲存了所有交易的确定性曆史記錄。當新的交易發生時,這些交易必須擴散到整個Hyperledger Fabric網絡中,以便使賬本的所有副本保持一緻。本文将介紹Gossip協定機制的原理并說明Hyperledger Fabric如何使用Gossip機制來保證所有peer節點的資料同步。

Hyperledger Fabric相關開發教程:

從大的層面講,在Hyperledger Fabric中整個交易處理流程如下:

  • 新交易被送出給排序節點
  • 排序節點建立新的區塊,其中包含了新産生的交易
  • 排序節點分發區塊給所有的對等節點

最後一步,分發,就是gossip協定發揮作用的環節。即使在一個僅包含少量成員機構的Hyperledger Fabric網絡中,也可能會包含大量的對等節點。例如,一個重度使用IoT裝置的Hyperledger Fabric網絡可能就需要很多Peer節點來将這些IoT裝置接入區塊鍊網絡。更進一步講,大範圍網絡中的peer節點連接配接可能是間歇性的,有些peer節點不是總會被排序節點通路到。另外也沒必要要求排序節點将新區塊

分發給每個peer節點,而且這一要求在有些情況下也是不可能滿足的。

Fabric區塊傳播的gossip過程
Gossip:閑聊; 八卦; 小道消息;

實際上在Hyperledger Fabric的排序節點分發區塊時,它隻會把新區塊分發給每個機構中的主導peer節點,然後經過gossip過程,這些peer節點自己完成新區塊在彼此之間的擴散:

  • 某個peer節點有一個需要散播給其他peer節點的消息。例如,主導的peer節點

    有一個新的區塊。

  • 該peer節點将消息發送給(随機選擇的)預定數量的其他peer節點
  • 收到消息的peer節點再将消息發送給(随機選擇的)預定數量的其他peer節點
  • 如此不斷反複,直到每個peer節點都收到消息。

上面的過程被稱為廣播,這一過程被應用于Fabric的gossip系統來向全體peer成員分發各種類型的消息。

1、網絡成員gossip流程

Gossip協定的一個核心元件,就是每個peer都會轉發消息給網絡中一組随機選擇的節點。這隐含了每個peer節點都了解網絡中有哪些peer節點是以才可以進行随機選擇。

在Fabric中,每個peer節點都會周期性的廣播消息來表示自身的存活并且已經接入網絡。每個peer節點都會維護一個清單來記錄網絡上的所有peer節點 - 哪些peer是存活的,哪些peer是死翹翹的。

  • 當Peer A收到來自Peer B的alive消息,它就會将Peer B标注為alive。對于Peer A來說,Peer B就是網絡中的一個成員
  • 如果過了一段時間,Peer SA不在收到來自Peer B的alive消息,它就會 将Peer B标注為dead。對于Peer A來說,Peer B就不再是網絡中的一員了。

假設Peer B并沒有真的死翹翹,Peer A 會周期性地嘗試連接配接标記為dead的Peer節點以檢查其是否還存活。例如,有可能是因為網絡問題或其他Peer節點的故障導緻了Peer B的alive消息無法到達Peer A,是以當Peer A直接聯系Peer B時,它就可以确定Peer B的真實狀态。

上面描述的過程僅當在peer節點有一組可供發送alive消息的peer節點清單時才可以正常工作。是以每個peer節點在啟動引導時都有一個啟動引導節點集來提供初始的peer節點清單。

每個peer節點會簽名其發送的alive消息,這意味着一個壞家夥不能僞造消息來愚弄其他網絡成員。這個壞家夥能做的也就是不轉發alive消息。隻要其他peer節點繼續轉發alive消息,這就不是什麼大問題。

2、資料擴散gossip流程

正如前面所描述的,在Hyperledger Fabric網絡中資料擴散的基本原理很簡單。每個peer節點隻需将新的資料轉發給一組随機選擇的peer節點,最終就可以完成新資料在整個網絡中的擴散。這一過程被稱為廣播,以一種基于推送的資訊傳遞方案。

然而,如果一個peer節點從網絡斷開并在稍後重連,它可能就會錯過廣播過程。為了跟上網絡中其他成員的資料進度,這個節點需要一種基于拉取的機制來請求

其缺失的資料。在Hyperledger Fabric中,peer節點間會周期性地交換網絡成員資料和賬本資料,這是的peer節點可以保持更新狀态,即使其錯過某個廣播過程。

3、Hyperledger Fabric中的Gossip應用小結

Hyperledger Fabric在peer節點之間使用Gossip作為一種可伸縮的容錯機制來保證所有peer節點上的賬本副本保持同步。使用gossip有效降低了排序節點的壓力,因為排序節點隻需要将區塊分發給每個機構中的主導節點,同時這也讓peer節點即使在斷線重連的情況下也能跟得上整個網絡的狀态更新。

原文連結:

Hyperledger Fabric Gossip原了解析 - 彙智網