- 區(qū)塊鏈底層設(shè)計(jì)Java實(shí)戰(zhàn)
- 牛冬編著
- 1780字
- 2019-07-25 11:59:21
2.3 Hyperledger架構(gòu)
超級(jí)賬本(Hyperledger)是Linux基金會(huì)于2015年發(fā)起的推進(jìn)區(qū)塊鏈數(shù)字技術(shù)和交易驗(yàn)證的開源項(xiàng)目,該項(xiàng)目的目標(biāo)是推進(jìn)區(qū)塊鏈及分布式記賬系統(tǒng)的跨行業(yè)發(fā)展與協(xié)作。
目前該項(xiàng)目最著名的子項(xiàng)目是Fabric,由IBM主導(dǎo)開發(fā)。按官方網(wǎng)站描述,Hyperledger Fabric是分布式記賬解決方案的平臺(tái),以模塊化體系結(jié)構(gòu)為基礎(chǔ),提供高度的彈性、靈活性和可擴(kuò)展性。它旨在支持不同組件的可插拔實(shí)現(xiàn),并適應(yīng)整個(gè)經(jīng)濟(jì)生態(tài)系統(tǒng)中存在的復(fù)雜性。
Hyperledger Fabric提供了一種獨(dú)特的彈性和可擴(kuò)展的體系結(jié)構(gòu),使其不同于其他區(qū)塊鏈解決方案。我們必須在經(jīng)過充分審查的開源架構(gòu)之上對(duì)區(qū)塊鏈企業(yè)的未來進(jìn)行規(guī)劃。超級(jí)賬本是企業(yè)級(jí)應(yīng)用快速構(gòu)建的起點(diǎn)。
目前,Hyperledger Fabric經(jīng)歷了兩大版本架構(gòu)的迭代,分別是0.6版和1.0版。其中,0.6版的架構(gòu)相對(duì)簡單,Peer節(jié)點(diǎn)集眾多功能于一身,模塊化和可拓展性較差。1.0版對(duì)0.6版的Peer節(jié)點(diǎn)功能進(jìn)行了模塊化分解。目前最新的1.1版本處于Alpha階段。
在1.0版中,Peer節(jié)點(diǎn)可分為peers節(jié)點(diǎn)和orderers節(jié)點(diǎn)。peers節(jié)點(diǎn)用于維護(hù)狀態(tài)(State)和賬本(Ledger), orderers節(jié)點(diǎn)負(fù)責(zé)對(duì)賬本中的各條交易達(dá)成共識(shí)。
系統(tǒng)中還引入了認(rèn)證節(jié)點(diǎn)(Endorsing Peers),認(rèn)證節(jié)點(diǎn)是一類特殊的peers節(jié)點(diǎn),負(fù)責(zé)同時(shí)執(zhí)行鏈碼(Chaincode)和交易的認(rèn)證(Endorsing Transactions)。
Hyperledger Fabric的分層架構(gòu)設(shè)計(jì)如圖2-3所示。

圖2-3 Hyperledger Fabric的分層架構(gòu)設(shè)計(jì)
Hyperledger Fabric可以分為7層,分別是存儲(chǔ)層、數(shù)據(jù)層、通道層、網(wǎng)絡(luò)層、共識(shí)層、合約層、應(yīng)用層。
其中存儲(chǔ)層主要對(duì)賬本和交易狀態(tài)進(jìn)行存儲(chǔ)。賬本狀態(tài)存儲(chǔ)在數(shù)據(jù)庫中,存儲(chǔ)的內(nèi)容是所有交易過程中出現(xiàn)的鍵值對(duì)信息。比如,在交易處理過程中,調(diào)用鏈碼執(zhí)行交易可以改變狀態(tài)數(shù)據(jù)。狀態(tài)存儲(chǔ)的數(shù)據(jù)庫可以使用LevelDB或者CouchDB。LevelDB是系統(tǒng)默認(rèn)的內(nèi)置的數(shù)據(jù)庫,CouchDB是可選的第三方數(shù)據(jù)庫。區(qū)塊鏈的賬本則在文件系統(tǒng)中保存。
數(shù)據(jù)層主要由交易(Transaction)、狀態(tài)(State)和賬本(Ledger)三部分組成。
其中,交易有兩種類型:
· 部署交易:以程序作為參數(shù)來創(chuàng)建新的交易。部署交易成功執(zhí)行后,鏈碼就被安裝到區(qū)塊鏈上。
· 調(diào)用交易:在上一步部署好的鏈碼上執(zhí)行操作。鏈碼執(zhí)行特定的函數(shù),這個(gè)函數(shù)可能會(huì)修改狀態(tài)數(shù)據(jù),并返回結(jié)果。
狀態(tài)對(duì)應(yīng)了交易數(shù)據(jù)的變化。在Hyperledger Fabric中,區(qū)塊鏈的狀態(tài)是版本化的,用key/value store(KVS)表示。其中key是名字,value是任意的文本內(nèi)容,版本號(hào)標(biāo)識(shí)這條記錄的版本。這些數(shù)據(jù)內(nèi)容由鏈碼通過PUT和GET操作來管理。如存儲(chǔ)層的描述,狀態(tài)是持久化存儲(chǔ)到數(shù)據(jù)庫的,對(duì)狀態(tài)的更新是被文件系統(tǒng)記錄的。
賬本提供了所有成功狀態(tài)數(shù)據(jù)的改變及不成功的嘗試改變的歷史。
賬本是由Ordering Service構(gòu)建的一個(gè)完全有序的交易塊組成的區(qū)塊哈希鏈(Hash Chain)。
賬本既可以存儲(chǔ)在所有的peers節(jié)點(diǎn)上,又可以選擇存儲(chǔ)在幾個(gè)orderers節(jié)點(diǎn)上。
此外,賬本允許重做所有交易的歷史記錄,并且重建狀態(tài)數(shù)據(jù)。
通道層指的是通道(Channel),通道是一種Hyperledger Fabric數(shù)據(jù)隔離機(jī)制,用于保證交易信息只有交易參與方可見。每個(gè)通道都是一個(gè)獨(dú)立的區(qū)塊鏈,因此多個(gè)用戶可以共用同一個(gè)區(qū)塊鏈系統(tǒng),而不用擔(dān)心信息泄漏問題。
網(wǎng)絡(luò)層用于給區(qū)塊鏈網(wǎng)絡(luò)中各個(gè)通信節(jié)點(diǎn)提供P2P網(wǎng)絡(luò)支持,是保障區(qū)塊鏈賬本一致性的基礎(chǔ)服務(wù)之一。
在Hyperledger Fabric中,Node是區(qū)塊鏈的通信實(shí)體。Node僅僅是一個(gè)邏輯上的功能,多個(gè)不同類型的Node可以運(yùn)行在同一個(gè)物理服務(wù)器中。Node有三種類型,分別是客戶端、peers節(jié)點(diǎn)和Ordering Service。
其中,客戶端用于把用戶的交易請(qǐng)求發(fā)送到區(qū)塊鏈網(wǎng)絡(luò)中。
peers節(jié)點(diǎn)負(fù)責(zé)維護(hù)區(qū)塊鏈賬本,peers節(jié)點(diǎn)可以分為endoring peers和committing peers兩種。endoring peers為交易作認(rèn)證,認(rèn)證的邏輯包含驗(yàn)證交易的有效性,并對(duì)交易進(jìn)行簽名;committing peers接收打包好的區(qū)塊,并寫入?yún)^(qū)塊鏈中。與Node類似,peers節(jié)點(diǎn)也是邏輯概念,endoring peers和committing peers可以同時(shí)部署在一臺(tái)物理機(jī)上。
Ordering Service會(huì)接收交易信息,并將其排序后打包成區(qū)塊,然后,寫入?yún)^(qū)塊鏈中,最后將結(jié)果返回給committing peers。
共識(shí)層基于Kafka、SBTF等共識(shí)算法實(shí)現(xiàn)。Hyperledger Fabric利用Kafka對(duì)交易信息進(jìn)行排序處理,提供高吞吐、低延時(shí)的處理能力,并且在集群內(nèi)部支持節(jié)點(diǎn)故障容錯(cuò)。相比于Kafka, SBFT(簡單拜占庭算法)能提供更加可靠的排序算法,包括容忍節(jié)點(diǎn)故障以及一定數(shù)量的惡意節(jié)點(diǎn)。
合約層是Hyperledger Fabric的智能合約層Blockchain, Blockchain默認(rèn)由Go語言實(shí)現(xiàn)。Blockchain運(yùn)行的程序叫作鏈碼,持有狀態(tài)和賬本數(shù)據(jù),并負(fù)責(zé)執(zhí)行交易。在Hyperledger Fabric中,只有被認(rèn)可的交易才能被提交。而交易是對(duì)鏈碼上的操作的調(diào)用,因此鏈碼是核心內(nèi)容。同時(shí)還有一類稱之為系統(tǒng)鏈碼的特殊鏈碼,用于管理函數(shù)和參數(shù)。
應(yīng)用層是Hyperledger Fabric的各個(gè)應(yīng)用程序。
此外,既然是聯(lián)盟鏈,在Hyperledger Fabric中還有一個(gè)模塊專門用于對(duì)聯(lián)盟內(nèi)的成員進(jìn)行管理,即Membership Service Provider(MSP), MSP用于管理成員認(rèn)證信息,為客戶端和peers節(jié)點(diǎn)提供成員授權(quán)服務(wù)。
- HornetQ Messaging Developer’s Guide
- Spring 5.0 Microservices(Second Edition)
- Learning Apex Programming
- 算法基礎(chǔ):打開程序設(shè)計(jì)之門
- C/C++常用算法手冊(cè)(第3版)
- INSTANT CakePHP Starter
- 薛定宇教授大講堂(卷Ⅳ):MATLAB最優(yōu)化計(jì)算
- Python 3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)
- Node.js全程實(shí)例
- NGINX Cookbook
- 微服務(wù)架構(gòu)深度解析:原理、實(shí)踐與進(jìn)階
- App Inventor創(chuàng)意趣味編程進(jìn)階
- 零基礎(chǔ)學(xué)C語言程序設(shè)計(jì)
- Scala Functional Programming Patterns
- Java程序設(shè)計(jì)教程