Gossip協議


Gossip數據傳播協議:

  1. Fabric通過工作負載划分事務執行(背書和提交)對等事務排序節點,優化區塊鏈網絡性能、安全性和可伸縮性。這種網絡操作的解耦需要一個安全、可靠和可伸縮的數據傳播協議,以確保數據的完整性和一致性。因此Fabric實現了gossip數據傳播協議。
  2. 對等節點利用gossip可伸縮的方式廣播賬本和通道數據gossip消息是連續,通道上的每個對等點都不斷地從多個對等點接收當前一致的賬本數據。每條gossip消息都簽名過的,因此發送虛假消息拜占庭式參與者可以很容易地識別,並防止將消息分發給不必要的的目標。受延遲、網絡分區或其他導致丟失的原因影響的對等最終將通過與擁有這些丟失塊的對等點聯系,同步到當前賬本狀態
  3. 基於gossip的數據傳播協議在Fabric網絡上執行以下三個主要功能:

通過不斷識別可用的成員對等管理點發現通道成員資格並最終檢測脫機/離線的對等

在通道上跨(所有)點分發賬本數據。任何具有與通道其余部分不同步數據的對等點都可以識別缺失的塊,並通過復制正確的數據來同步自身

通過使用點對點狀態傳輸更新賬本數據,使新連接的加快同步速度。

 


 

  基於gossip的廣播由對等點操作——這些對等點接收來自通道上其他對等點的消息,然后將這些消息轉發到通道上隨機選擇的多個對等節點,其中這個數字是一個可配置的常量。對等點還可以使用pull(拉取)機制,而不是等待消息的傳遞。這種循環不斷重復,其結果是通道成員、賬本和狀態信息不斷保持最新和同步。為了傳播新塊通道上的leader點從排序服務拉取數據,並向其組織中的對等節點發起gossip傳播。

* 領導leader選舉

  該機制用於為每個組織選舉一個?對等,該對等節點將保持與排序服務的連接,並在其組織的對等點之間開始分發新到達塊。領導選舉為系統提供了有效利用排序服務帶寬的能力。

領導人選舉有兩種模式

靜態:系統管理員手動的將一個節點配置為一個組織中的leader

動態:對等點執行leader選舉程序,選擇組織中的一個對等點成leader

 

* 靜態領導人選舉:靜態選舉允許手動的將組織中的一個或多個節點定義為leader。但是請注意,太多節點連接到排序服務的話會造成低效率地使用帶寬。要啟用靜態領導選舉模式,請在core.yaml中配置以下參數:

或者,這些參數也可以使用環境變量來配置和覆蓋:

以下配置將使peer處於待命模式,即peer不會試圖成為領導者:

  將CORE_PEER_GOSSIP_USELEADERELECTION和CORE_PEER_GOSSIP_ORGLEADER設置為true是不明確的,將導致錯誤。在靜態配置中,組織管理員負責在發生故障或崩潰時提供leader節點的高可用性

 

* 動態領導人選舉:動態領導選舉允許組織中的對等節點選擇一個leader節點,該對等點將連接到排序服務並拉取新的區塊。這個leader是為一個組織中的節點獨立選出來的。一個動態選出的leader會向其他節點發送心跳信息,作為其活躍的證據。如果一個或多個節點在規定的時間內沒有收到心跳的更新,他們將選舉一個新的leader。在網絡分區的最壞情況下,組織將有多個活躍的leader來確保彈性和可用性,以允許組織的對等節點繼續取得發展。網絡分區修復后,其中一個領導者將放棄其領導地位。在沒有網絡分區的穩定狀態下,將只有一個活動的leader連接到排序服務。

以下配置控制領導者發送心跳消息的頻率:

為了啟用動態領導選舉,需要在core.yaml中配置以下參數:

或者,這些參數可以通過環境變量配置和覆蓋:


 

* 錨節點:錨節點被gossip協議用來確保不同組織的節點能夠感知到彼此。當提交了包含對錨節點更新的配置時,對等節點將與錨節點接觸,並向它們學習錨節點所知道的所有對等節點一旦每個組織中(至少)一個對等點與錨點聯系,錨節點就會了解通道中的每個對等。由於gossip通信是持續的,而且peers總是要求被告知他們不知道的peer的存在,所以可以為一個通道建立一個共同的成員視圖

  例如,假設通道中有三個組織—A、B、C—和一個為組織C定義的peer0.orgc。當peer1.orgA聯系peer0.orgC時,peer1.orgA將告訴peer0.orgC關於peer0.orgA的信息。之后,當peer1.orgB聯系peer0.orgC時,peer0.orgC會告訴peer1.orgB關於peer0.orgA的信息。此時起,A和B組織將開始直接交換成員信息,而不再需要peer0.orgC的任何協助。

  由於跨組織通信依賴於gossip才能正常工作,因此必須在通道配置中定義至少一個錨節點。為了高可用性和冗余,強烈建議每個組織提供自己的錨節點集。(錨節點不需要與領導節點相同!)


 

外部和內部端點

  為了使gossip能夠有效地工作,對等節點需要能夠獲得自己組織中的對等節點以及其他組織中的對等節點的端點信息。當一個節點被引導/啟動?時,它會使用它的core.yaml中的peer.gossip.bootstrap來廣播自己,並交換成員信息,在自己的組織中構建所有可用對等節點的視圖。

  節點core.yaml中的peer.gossip.bootstrap屬性用於引導組織內的gossip。如果你正在使用gossip,你通常會配置組織中的所有對等節點來指向一組初始引導節點(你可以指定一個以空格分隔的對等節點列表)。內部端點通常由對等節點本身自動計算,或者直接通過core.yaml中的core.peer.address顯式傳遞。如果需要覆蓋這個值,可以將CORE_PEER_GOSSIP_ENDPOINT作為環境變量導出。

  建立跨組織通信同樣需要引導信息。最初的跨組織引導信息是通過上面描述的“錨節點”設置提供的。如果你想讓組織里的其他節點被其他組織所知,你就得設置節點的core.yaml中的peer.gossip.externalendpoint。如果不設置此值,則不會將該節點的端點信息廣播給其他組織中的對等節點。要設置這些屬性,請發出以下命令:

gossip消息:

  在線的對等節點通過不斷廣播“alive/活着”消息來表明它們的可用性,每個消息都包含公鑰基礎設施(PKI) ID和消息發送方的簽名。對等節點通過收集這些消息來維持通道成員關系;如果沒有節點接收到來自某個特定節點的活動消息,則最終將從通道成員中清除“死掉的”對等。由於活動消息是經過加密簽名的,惡意節點永遠不能模擬其他對等節點,因為它們缺少根證書頒發機構(CA)授權的簽名密鑰

  除了自動轉發接收到的消息外,狀態協調過程還同步每個通道上對等節點的世界狀態。每個節點不斷地從通道上的其他對等節點拉取區塊,以便在發現差異時修復自己的狀態。由於不需要固定連接來維護基於gossip的數據分發,因此該過程可靠地為共享賬本提供了數據一致性和完整性,包括對節點崩潰的容忍性。

  由於通道之間是隔離的,一個通道上的對等節點不能在其他通道上發送消息或共享信息。盡管對等節點都可以屬於多個通道,但是通過應用基於對等節點通道訂閱的消息路由策略分區消息傳遞可以防止區塊傳播到不在通道中的對等

 

點對點消息的安全性由對等節點的TLS層處理,不需要簽名。對等節點通過由CA分配的證書進行身份驗證。雖然也使用TLS certs,但是在gossip層中身份驗證使用的是對等節點證書。賬本區塊由排序服務簽名,然后在通道上交付給領導節點。

份驗證由對等節點的成員服務提供者管理。當對等節點第一次連接到通道時,TLS會話成員身份綁定,這本質上是根據網絡和通道中的成員身份對連接的每個對等節點進行身份驗證。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM