0 導(dǎo)言
? ? ??在上一講《Hyperledger Fabric的邏輯架構(gòu)是什么樣的惫搏?》中具温,我們介紹了Fabric的邏輯架構(gòu),就是整個(gè)的技術(shù)組成部分筐赔。從應(yīng)用程序端來(lái)看铣猩,包括了SDK、API茴丰、事件达皿,通過(guò)SDK、API贿肩、事件來(lái)對(duì)底層區(qū)塊鏈進(jìn)行操作:包括身份管理峦椰、賬本管理、交易管理汰规、智能合約的部署和調(diào)用汤功,從底層區(qū)塊鏈這一端來(lái)看,對(duì)外提供了以下服務(wù):成員管理服務(wù)溜哮、共識(shí)服務(wù)滔金、鏈碼服務(wù)、安全和密碼服務(wù)茂嗓。fabric通過(guò)將各個(gè)部分分離成不同的模塊餐茵,做到可插拔性、靈活擴(kuò)展性述吸。
? ? ??通過(guò)上一講我們對(duì)fabric的邏輯架構(gòu)有了一個(gè)整體的認(rèn)識(shí)钟病。接下來(lái)我們來(lái)看看fabric節(jié)點(diǎn)間的網(wǎng)絡(luò)架構(gòu)是什么樣的?我們先來(lái)上一張圖:
? ? ??從圖中可以看出fabric包含以下節(jié)點(diǎn):客戶端節(jié)點(diǎn)刚梭、CA節(jié)點(diǎn)肠阱、Peer節(jié)點(diǎn)、Orderer節(jié)點(diǎn)朴读。我們下面來(lái)詳細(xì)介紹一下這些節(jié)點(diǎn)屹徘。
1 客戶端節(jié)點(diǎn)
? ? ??客戶端或應(yīng)用程序代表由最終用戶操作的實(shí)體,它必須連接到某一個(gè)Peer節(jié)點(diǎn)或者排序服務(wù)節(jié)點(diǎn)上與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行通信衅金≡胍粒客戶端向背書(shū)節(jié)點(diǎn)(Endorser Peer)提交交易提案(Proposal)簿煌,當(dāng)收集到足夠背書(shū)后,向排序服務(wù)節(jié)點(diǎn)廣播交易鉴吹,進(jìn)行排序姨伟,生成區(qū)塊。
2 CA節(jié)點(diǎn)
? ? ??CA節(jié)點(diǎn)是fabric的證書(shū)頒發(fā)節(jié)點(diǎn)(Certificate Authority)豆励,由服務(wù)器(fabric-ca-server)和客戶端(fabric-ca-client)組成夺荒。
? ? ??CA節(jié)點(diǎn)接收客戶端的注冊(cè)申請(qǐng),返回注冊(cè)密碼用于登錄良蒸,以便獲取身份證書(shū)技扼。在區(qū)塊鏈網(wǎng)絡(luò)上所有的操作都會(huì)驗(yàn)證用戶的身份。
? ? ??CA節(jié)點(diǎn)是可選的嫩痰,也可以用其他成熟的第三方CA頒發(fā)證書(shū)剿吻。
3 Peer節(jié)點(diǎn)
? ? ??從上圖中可以看出每個(gè)組織可以擁有一到多個(gè)Peer節(jié)點(diǎn)。每個(gè)Peer節(jié)點(diǎn)可以擔(dān)任如下多種角色:
- Endorser Peer(背書(shū)結(jié)點(diǎn))
- Leader Peer(主節(jié)點(diǎn))
- Committer Peer(記賬節(jié)點(diǎn))
- Anchor Peer(錨節(jié)點(diǎn))
注:每個(gè)Peer節(jié)點(diǎn)必定是一個(gè)記賬節(jié)點(diǎn)串纺,除記賬節(jié)點(diǎn)外丽旅,它也可以擔(dān)任其它一到多種角色,即某個(gè)節(jié)點(diǎn)可以同時(shí)是記賬節(jié)點(diǎn)和背書(shū)節(jié)點(diǎn)纺棺,也可以同時(shí)是記賬節(jié)點(diǎn)榄笙、背書(shū)節(jié)點(diǎn)、主節(jié)點(diǎn)五辽,錨節(jié)點(diǎn)办斑。
3.1 Endorser Peer(背書(shū)結(jié)點(diǎn))
? ? ??部分節(jié)點(diǎn)會(huì)執(zhí)行交易并對(duì)結(jié)果進(jìn)行簽名背書(shū),充當(dāng)背書(shū)節(jié)點(diǎn)的角色 杆逗。
? ? ??所謂背書(shū)(Endorsement)乡翅,就是指特定peer執(zhí)行交易并向生成交易提案( proposal )的客戶端應(yīng)用程序返回YES/NO響應(yīng)的過(guò)程。
? ? ??背書(shū)節(jié)點(diǎn)是動(dòng)態(tài)的角色罪郊,是與具體鏈碼綁定的蠕蚜。每個(gè)鏈碼在實(shí)例化的時(shí)候都會(huì)設(shè)置背書(shū)策略(Endorsement policy),指定哪些節(jié)點(diǎn)對(duì)交易背書(shū)才有效悔橄。
? ? ??也只有在應(yīng)用程序向節(jié)點(diǎn)發(fā)起交易背書(shū)請(qǐng)求時(shí)才成為背書(shū)節(jié)點(diǎn)靶累,其他時(shí)候是普通的記賬節(jié)點(diǎn),只負(fù)責(zé)驗(yàn)證交易并記賬癣疟。
3.2 Leader Peer(主節(jié)點(diǎn))
? ? ??從圖中可以看出挣柬,主節(jié)點(diǎn)負(fù)責(zé)和Orderer排序服務(wù)節(jié)點(diǎn)通信,從排序服務(wù)節(jié)點(diǎn)處獲取最新的區(qū)塊并在組織內(nèi)部同步睛挚⌒盎祝可以強(qiáng)制設(shè)置,也可以選舉產(chǎn)生扎狱。
3.3 Committer Peer(記賬節(jié)點(diǎn))
? ? ??負(fù)責(zé)驗(yàn)證從排序服務(wù)節(jié)點(diǎn)接收的區(qū)塊里的交易侧到,然后將塊提交(寫(xiě)入/追加)到其通道賬本的副本勃教。記賬節(jié)點(diǎn)還將每個(gè)塊中的每個(gè)交易標(biāo)記為有效或無(wú)效。
3.4 Anchor Peer(錨節(jié)點(diǎn))
? ? ??在一個(gè)通道( channel )上可以被所有其他peer發(fā)現(xiàn)的peer匠抗,通道上的每個(gè)成員都有一個(gè)Anchor Peer(或多個(gè)Anchor peer 來(lái)防止單點(diǎn)故障)故源,允許屬于不同成員的peer發(fā)現(xiàn)通道上的所有現(xiàn)有peer。
4 Orderer(排序服務(wù)節(jié)點(diǎn))
? ? ?排序服務(wù)節(jié)點(diǎn)接收包含背書(shū)簽名的交易汞贸,對(duì)未打包的交易進(jìn)行排序生成區(qū)塊绳军,廣播給Peer節(jié)點(diǎn)。
? ? ?排序服務(wù)提供的是原子廣播著蛙,保證同一個(gè)鏈上的節(jié)點(diǎn)為接收到機(jī)同的消息删铃,并且有相同的邏輯順序耳贬。
? ? ?排序服務(wù)獨(dú)立于peer進(jìn)程存在并且以先來(lái)先服務(wù)的方式對(duì)網(wǎng)絡(luò)上的所有信道進(jìn)行排序交易踏堡。排序服務(wù)旨在支持超出現(xiàn)有的SOLO和Kafka品種的可插拔實(shí)現(xiàn)。排序服務(wù)是整個(gè)網(wǎng)絡(luò)的公共綁定; 它包含綁定到每個(gè)成員的加密身份材料咒劲。
5 總結(jié)
? ? ?Fabric系統(tǒng)是通過(guò)組織來(lái)劃分的顷蟆,每個(gè)組織內(nèi)都包含承擔(dān)不同功能的Peer 節(jié)點(diǎn),每個(gè)Peer節(jié)點(diǎn)又可以擔(dān)任多種角色腐魂。所有的組織共用一個(gè)統(tǒng)一的Orderer集群帐偎。因此在設(shè)計(jì)基于Hyperledger Fabric的系統(tǒng)時(shí)需要考慮組織之間的業(yè)務(wù)關(guān)系,以及內(nèi)部每個(gè)模塊之間的聯(lián)系蛔屹,以此來(lái)進(jìn)行統(tǒng)一的規(guī)劃削樊。
6 參考資料
1.https://hyperledger-fabric.readthedocs.io/en/release-1.2/index.html
2.《深度探索區(qū)塊鏈:Hyperledger技術(shù)與應(yīng)用》作者:張?jiān)鲵E,董寧兔毒,朱軒彤漫贞,陳劍雄 著 出版社:機(jī)械工業(yè)出版社
3.《區(qū)塊鏈開(kāi)發(fā)實(shí)戰(zhàn):Hyperledger Fabric關(guān)鍵技術(shù)與案例分析》作者:馮翔,劉濤育叁,吳壽鶴迅脐,周廣益 著 出版社:機(jī)械工業(yè)出版社
? ? ??注意:本篇文章大部分內(nèi)容 來(lái)自《深度探索區(qū)塊鏈:Hyperledger技術(shù)與應(yīng)用》(作者:張?jiān)鲵E,董寧豪嗽,朱軒彤谴蔑,陳劍雄 著 出版社:機(jī)械工業(yè)出版社)這本書(shū)