FABIRC高性能排序服務集群實戰


Hyperledger Fabric是由IBM公司主導開發的一個面向企業級客戶的開源項目。Hyperledger Fabric自誕生之日起就獲得了全球眾多企業的關注,它的出現讓企業級區塊鏈應用的落地成為可能。

企業級的區塊鏈一般都是圍繞業務場景展開,區塊鏈網絡中要求所有參與方具有身份對等的架構,並建立共識協議。與比特幣和以太坊這類公鏈不同,Hyperledger Fabric網絡中的節點必須經過授權認證后才能加入整個網絡。授權認證機制將區塊鏈網絡中的各節點透明可控化,有助於企業進行有效控制。

同時為了滿足靈活多變的應用場景,Hyperledger Fabric采用了模塊化的系統設計理念,它將權限認證模塊(MSP)、共識服務模塊(Ordering Service)、背書模塊(Endorsing peers)、區塊提交模塊(committing peers)等進行分離,使開發者可以根據具體的業務場景需要,使用各自模塊,實現了模塊的可插拔設計。在我看來,Hyperledger Fabric更適合作為一個聯盟鏈的開發框架。

*Hyperledger Fabric先后經歷兩個大版本(0.6和1.x),本文討論的都是1.x系列的架構。

1. fabric簡介

fabric的交易流程圖:

                       

交易流程步驟如下:

1)        客戶端構造交易提案發送給背書節點

2)        背書節點模擬執行交易,並進行背書

3)        客戶端收集背書節點的模擬交易結果

4)        客戶端把合法的包含簽名背書的交易發送到排序節點

5)        排序節點對交易進行排序打包並生成區塊

6)        排序節點將區塊廣播給各個組織的主節點

7)        各個組織的主節點將交易保存到區塊鏈賬本里

8)        主節點同步區塊給組織內的其他節點

9)        其他節點將區塊保存到賬本

為了更加深入了解了整個交易的流程,在此通過手動搭建基於kafka集群的多排序節點的fabric環境進行演示說明。

搭建完成之后架構圖如下:

 

注:搭建流程引自:https://www.cnblogs.com/neomeister/articles/9625762.html

 

由上圖可見orderer節點為整個區塊鏈網絡中所有合法交易進行全局排序,並將排序后的交易組合生成區塊結構。在目前的設計中,所有合法的交易信息都會從Orderer節點經過,因此Orderer節點在網絡中必須處於可靠、可信的地位。那怎樣才能保證orderer節點的高可用呢?

2. 高性能排序服務搭建

上面我們在搭建的fabric集群架構的時候,為了實現高可用我們創建了3個orderer節點,但是每次將合法交易發送給排序節點的時候必須指定其中的一個orderer節點進行交易的提交,如上面例子中對智能合約的操作:

peer chaincode invoke -o orderer0.neotest.com:7050 -C neotest1channel -n neotest1cc -c '{"Args":["invoke","a","b","1"]}'

如果指定的orderer節點down機了,本來交易提案驗證成功的該筆交易就會提交失敗。為了避免這個問題,我們參考了現有的分布式系統的架構的設計理念,引入了nginx做代理,在交易流程第四步,客戶端client與orderer集群中間新增了一台nginx做負載均衡,這樣我們提交交易的時候只需要往nginx發送交易,並且只要有一台orderer節點運轉正常,交易的提交就不會失敗。

因區塊鏈底層都是通過gRPC協議進行通信,我們需要使用1.13.10以上版本的nginx才能支持gRPC負載,我們試着搭建一下:

1)        從nginx官網上獲取版本號不低於1.13.10的源碼包,本文使用的版本為1.14.0。

2)        將nginx源碼包拷貝到centos中,並進行解壓,得到nginx的源碼;

3)        進入nginx源碼目錄中,執行如下的configure命令:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module

安裝nginx的時候我們需要添加http_ssl_module和http_v2_module模塊方法(讓web服務器支持SSL和http2)

4)        make

5)        make install

6)        運行以下命令看nginx是否安裝成功

進入nginx安裝目錄,運行./sbin/nginx -v

如顯示:

nginx version: nginx/1.14.0

則表示nginx安裝成功

7)        編輯nginx.conf文件,搭建負載均衡服務器

http {

server {

listen 8080 http2;

access_log logs/access.log main;

upstream grpcServers{

server orderer0.neotest.com:7050;

server orderer1.neotest.com:7051;

server orderer2.neotest.com:7052;

}

#攔截客戶端發送給排序服務器的請求

location /orderer.AtomicBroadcast { 

grpc_pass grpc://grpcServers;

}

}

}

8)        啟動nginx

完成以上步驟,架構就調整成了下圖:

 

至此,高可用的orderer集群負載已經搭建完成,客戶端僅需往nginx機器的8080端口提交交易

peer chaincode invoke -o nginx服務器IP:端口 -C neotest1channel -n neotest1cc -c '{"Args":["invoke","a","b","1"]}'

nginx服務器會將提交的交易請求自動負載到某個orderer節點進行交易打包,提高了系統的性能和可用性以及容災容錯能力。

3.      小結

上面是本人在搭建fabric集群過程中的一點小小的探索。目前區塊鏈還處於技術早期發展階段,國內的區塊鏈在底層協議、應用和標准等方面都不夠成熟,區塊鏈技術和商業仍需不斷完善。但是區塊鏈技術是一場技術的革新,我相信它會推動人類社會各個領域創新與多元化,讓我們拭目以待吧。

 

本文僅代表個人觀點

 


免責聲明!

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



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