日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

一 hyperledger fabric 結(jié)構(gòu)分析是什么?hyperledger fabric的架構(gòu)設(shè)計(jì)指的什么?

先前分析程序著眼于細(xì)節(jié)分析,這樣沒有框架的概念,花了兩天時(shí)間分析整理了一下hyperledger fabric的架構(gòu)設(shè)計(jì),分析該程序沒有參照任何資料,如有錯(cuò)誤歡迎指正,共同進(jìn)步 。
筆者在詳細(xì)分析程序前有以下疑問:
1)CLI(命令行)客戶端如何發(fā)送命令給Peer節(jié)點(diǎn)
2)本Peer節(jié)點(diǎn)如何接收其他節(jié)點(diǎn)的數(shù)據(jù),接收到數(shù)據(jù)又如何處理,處理的方式和1又有什么區(qū)別
3)數(shù)據(jù)是何時(shí)又是如何被送入consensus模塊
4)consensus模塊內(nèi)部又是如何架構(gòu)的 為什么看起來helper executor pbft controller文件夾交至在一起,保存各自句柄,相互調(diào)用
5)ChainCode(鏈碼,簡稱CC)是如何接收到Peer對(duì)其的操作、訪問的
6)ChainCode是如何調(diào)用fabric API來查詢寫入數(shù)據(jù)的
7)在閱讀源碼初始化過程中,Peer節(jié)點(diǎn)會(huì)創(chuàng)建大量Server,這些Server后續(xù)過程我們是如何使用的
注:本人對(duì)于數(shù)據(jù)庫、Docker相關(guān)知識(shí)不是很了解,盡量避免關(guān)于這兩個(gè)部分的介紹以免錯(cuò)誤的引導(dǎo)讀者 。
下面會(huì)慢慢的滲透以上涉及的問題 。
Server :

一 hyperledger fabric 結(jié)構(gòu)分析是什么?hyperledger fabric的架構(gòu)設(shè)計(jì)指的什么?


每個(gè)Server作用:
AdminServer:控制該節(jié)點(diǎn)的命運(yùn),可以刪除該節(jié)點(diǎn)所在的進(jìn)程 。(Start Stop GetStatus )
EventHubServer:Peer節(jié)點(diǎn)支持客戶端對(duì)指定事件進(jìn)行監(jiān)聽,例如Rejection等 ??蛻舳诵枰茸?cè)自己關(guān)心的Events,當(dāng)事件發(fā)生時(shí)trigger 監(jiān)聽者 。
OpenChainServer:對(duì)外提供ledger的訪問接口,涉及GetBlockchainInfo GetBlockByNumber等 。
DevopsServer:負(fù)責(zé)與CLI Client對(duì)接,外部進(jìn)行CC操作的入口,Deploy invoke query 。
ChaincodeSupportServer:負(fù)責(zé)與shim/Chaincode通信,ChainCode的所有調(diào)用接收發(fā)送都要與該Server信息交互 。
PeerServer:該Server是一個(gè)Engine,Engine關(guān)聯(lián)了內(nèi)部消息響應(yīng)實(shí)現(xiàn),同時(shí)為周圍Peer節(jié)點(diǎn)創(chuàng)建Client與之通信 。
RESTServer:該Server沒有進(jìn)行分析,應(yīng)該是REST接口格式相關(guān) 。
一級(jí)模塊分類:
一 hyperledger fabric 結(jié)構(gòu)分析是什么?hyperledger fabric的架構(gòu)設(shè)計(jì)指的什么?


Client: 之前創(chuàng)建服務(wù)器與之對(duì)應(yīng)的客戶端,可以理解成其他節(jié)點(diǎn)或者CLI client等 。
Protos: 中間層,Server與Client端 API接口定義
ServerProcess:服務(wù)響應(yīng)處理函數(shù),包括各類型的HandleMessage 。
Consensus: 共識(shí)模塊,目前采用的是PBFT NOOPS
ChainCode Shim:代碼中shim和我理解的不一致,將ChainCodeSupport也應(yīng)該算到shim,該模塊的作用是連接Peer節(jié)點(diǎn)與ChainCode的媒介,用shim形容也可 。
ChainCode: 鏈碼,應(yīng)用(例如智能合約) 。
DB: 數(shù)據(jù)存儲(chǔ) 。
Library: 代碼里有一個(gè)叫做Vendor的文件夾,該文件夾里涉及的功能模塊自成一體,例如grpcServer等
API: ChainCode里面會(huì)調(diào)用Peer節(jié)點(diǎn)信息 。
Crypto: 伴隨著數(shù)據(jù)加解密 。
Ledger: 賬本操作 。
該代碼使用Handler觸發(fā)模式,在跟蹤代碼程序時(shí)要注意handler對(duì)象賦值位置,否則容易找錯(cuò)HandleMessage,這些Handler處理函數(shù)命名基本相同,容易操作混亂 。
下面分析幾個(gè)讀者應(yīng)該最關(guān)心的流程:
1)Client通過CLI執(zhí)行一條invoke命令
2)某節(jié)點(diǎn)發(fā)送給該節(jié)點(diǎn)ViewChange命令
3)ChainCode調(diào)用API putStatus
4)Consensus流程
一、 Client通過CLI執(zhí)行一條invoke命令
1)在Peer節(jié)點(diǎn)初始化的時(shí)候 創(chuàng)建DevopsServer
serverDevops := core.NewDevopsServer(peerServer)
pb.RegisterDevopsServer(grpcServer, serverDevops)
2)DevopsServer設(shè)置Service規(guī)范,例如Invoke Message,調(diào)用_Devops_Invoke_Handler函數(shù)
var _Devops_serviceDesc = grpc.ServiceDesc{
ServiceName: protos.Devops,

推薦閱讀