目標(biāo)
- 理解Hyperledger Fabric超級(jí)賬本的邏輯架構(gòu)。
- 理解Hyperledger Fabric超級(jí)賬本的實(shí)際運(yùn)行時(shí)架構(gòu)。
任務(wù)實(shí)現(xiàn)
進(jìn)步非??臁,F(xiàn)在我們結(jié)合圖形,然后根據(jù)對(duì)應(yīng)的解釋全面理解Hyperledger Fabric的架構(gòu)。
2.1.1 比較抽象的邏輯架構(gòu)
Fabric從1.X開始,在擴(kuò)展性及安全性上面有了大大的提升,且新增了諸多的新特性:
多通道:支持多通道,提高隔離安全性。
可拔插的組件:支持共識(shí)組件、權(quán)限管理組件等可拔插功能。
賬本數(shù)據(jù)可被存儲(chǔ)為多種格式。
分化了Peer節(jié)點(diǎn)的多種角色,可以根據(jù)具體情況實(shí)現(xiàn)靈活部署
Hyperledger Fabric超級(jí)賬本整體邏輯架構(gòu)如下圖所示:
Fabric四大核心組件:
Membership Services:成員管理保證了Fabric平臺(tái)訪問(wèn)的安全性。提供了成員的注冊(cè)、管理及審核功能。
-
Blockchain Services:是區(qū)塊鏈的核心部分,為區(qū)塊鏈的主體功能提供了底層支撐;包括共識(shí)管理、分布式賬本實(shí)現(xiàn)、賬本的存儲(chǔ)以及網(wǎng)絡(luò)中各節(jié)點(diǎn)之間的通信實(shí)現(xiàn)。
- BlockChain:區(qū)塊之間以Hash連接為結(jié)構(gòu)的交易日志。peer從order service接收交易區(qū)塊k,并根據(jù)背書策略和并發(fā)沖突標(biāo)記區(qū)塊上的交易是否有效,然后將該區(qū)塊追加到peer文件系統(tǒng)中的Hash Chain上。
-
Transaction:交易有對(duì)鏈碼的部署或調(diào)用兩種操作類型:
- 部署交易:部署是請(qǐng)求在peer上啟動(dòng)鏈碼容器;創(chuàng)建新的鏈碼并設(shè)置一個(gè)程序作為參數(shù)。當(dāng)一個(gè)部署交易執(zhí)行成功,表明鏈碼已被安裝到區(qū)塊鏈上。
- 調(diào)用交易:調(diào)用是從賬本中請(qǐng)求讀寫集。是在之前已部署鏈碼的情況下執(zhí)行一個(gè)操作。調(diào)用交易將使用鏈碼提供的一個(gè)函數(shù)。當(dāng)成功時(shí),鏈碼執(zhí)行特定的函數(shù)對(duì)賬本數(shù)據(jù)進(jìn)行操作(修改狀態(tài)),并返回操作結(jié)果。
-
Chaincode Services:提供了鏈碼的部署及運(yùn)行時(shí)的所需環(huán)境。
- Chaincode:是一個(gè)可以對(duì)賬本數(shù)據(jù)進(jìn)行操作的可開發(fā)的組件程;鏈碼被布署運(yùn)行在一個(gè)安全的容器中;用戶可以通過(guò)調(diào)用鏈碼中的指定函數(shù)對(duì)賬本數(shù)據(jù)進(jìn)行修改或讀取操作。
Event:為各組件之間提供異步通信提供了技術(shù)實(shí)現(xiàn)。
2.1.2 實(shí)際中的運(yùn)行時(shí)架構(gòu)
實(shí)際運(yùn)行時(shí)架構(gòu)如下圖所示:
運(yùn)行時(shí)架構(gòu)圖中各項(xiàng)解釋如下:
APP:代表一個(gè)客戶端(CLI)或SDK,作用是創(chuàng)建交易并獲取到足夠的背書之后向Orderer排序服務(wù)節(jié)點(diǎn)提交交易請(qǐng)求(Peer與Orderer節(jié)點(diǎn)提供了gRPC遠(yuǎn)程訪問(wèn)接口,供客戶端調(diào)用)。
CA:負(fù)責(zé)對(duì)網(wǎng)絡(luò)中所有的證書進(jìn)行管理(對(duì)Fabric網(wǎng)絡(luò)中的成員身份進(jìn)行管理), 提供標(biāo)準(zhǔn)的PKI服務(wù)。
MSP(Member Service Provider):為客戶端和Peer提供證書的系統(tǒng)抽象組件。
Channel:將一個(gè)大的網(wǎng)絡(luò)分割成為不同的私有"子網(wǎng)"。
-
通道的作用:通道提供一種通訊機(jī)制,將peers和orderer連接在一起,形成一個(gè)具有保密性的通訊鏈路(虛擬), 進(jìn)行數(shù)據(jù)隔離。
要加入通道的每個(gè)節(jié)點(diǎn)都必須擁有自己的通過(guò)成員服務(wù)提供商(MSP)獲得的身份標(biāo)識(shí)。
Orderer:對(duì)客戶端提交的交易請(qǐng)求進(jìn)行排序,之后生成區(qū)塊廣播給通道內(nèi)的所有peer節(jié)點(diǎn)。
Org1:代表聯(lián)盟中的某一個(gè)組織(一個(gè)聯(lián)盟中可以多個(gè)不同的組織組成)。
Peer:表示組織中的節(jié)點(diǎn);Peer節(jié)點(diǎn)以區(qū)塊的形式從Orderer排序服務(wù)節(jié)點(diǎn)接收有序狀態(tài)更新,維護(hù)狀態(tài)和賬本。在Fabtic網(wǎng)絡(luò)環(huán)境中 Peer 節(jié)點(diǎn)可以劃分為如下角色:
Endorsing peer:根據(jù)指定的策略調(diào)用智能合約,對(duì)結(jié)果進(jìn)行背書, 返回提案響應(yīng)到客戶端。
Committing peer:驗(yàn)證數(shù)據(jù)并保存至賬本中。
Anchor peer:跨組織通信。
-
Leading peer:作為組織內(nèi)所有節(jié)點(diǎn)的的代表連接到Orderer排序服務(wù)節(jié)點(diǎn), 將從排序服務(wù)節(jié)點(diǎn)接收到的批量區(qū)塊廣播給組織內(nèi)的其它節(jié)點(diǎn)。
網(wǎng)絡(luò)中只有部分節(jié)點(diǎn)為背書節(jié)點(diǎn); 網(wǎng)絡(luò)中所有Peer節(jié)點(diǎn)為賬本節(jié)點(diǎn)。
Chaincode:鏈?zhǔn)酱a,簡(jiǎn)稱鏈碼;運(yùn)行在容器中,提供相應(yīng)的API與賬本數(shù)據(jù)進(jìn)行交互。
Ledger:是由排序服務(wù)構(gòu)建的一個(gè)全部有序的交易哈希鏈塊,保存在所有的peer節(jié)點(diǎn)中。賬本提供了在系統(tǒng)運(yùn)行過(guò)程中發(fā)生的可驗(yàn)證歷史,它包含所有成功的狀態(tài)更改(有效交易)和不成功的狀態(tài)更改(無(wú)效交易)。
FAQ
-
應(yīng)用程序或客戶端到底需要連接到哪些Peer節(jié)點(diǎn)?
只需要連接到背書節(jié)點(diǎn)即可。
-
背書節(jié)點(diǎn)怎么指定?
在實(shí)例化鏈碼時(shí)由背書策略指定。