【Hyperledger第一講】:HyperLedger Fabric基礎(chǔ)介紹和架構(gòu)原理

簡單概述


Hyperledger Fabric是由IBM公司主導(dǎo)開發(fā)的一個(gè)面向企業(yè)級客戶的開源項(xiàng)目袖裕。與比特幣和以太坊這類公有鏈不同龙宏,Hyperledger Fabric網(wǎng)絡(luò)中的節(jié)點(diǎn)必須經(jīng)過授權(quán)認(rèn)證后才能加入,從而避免了POW資源開銷万矾,大幅提高了交易處理效率,滿足企業(yè)級應(yīng)用對處理性能的訴求慎框。同時(shí)良狈,為了滿足靈活多變的應(yīng)用場景,Hyperledger Fabric采用了高度模塊化的系統(tǒng)設(shè)計(jì)理念笨枯,將權(quán)限認(rèn)證模塊(MSP)薪丁、共識(shí)服務(wù)模塊(Ordering Service)、背書模塊(Endorsing peers)馅精、區(qū)塊提交模塊(committing peers)等進(jìn)行分離部署严嗜,使開發(fā)者可以根據(jù)具體的業(yè)務(wù)場景替換模塊,實(shí)現(xiàn)了模塊的插件式管理(plug-in/plug-out)洲敢。所以漫玄,Hyperledger Fabric是一個(gè)私有鏈/聯(lián)盟鏈的開發(fā)框架,而且系統(tǒng)的運(yùn)行不需要token支持压彭。

關(guān)鍵組件


  1. Ledger:賬本睦优,節(jié)點(diǎn)維護(hù)的區(qū)塊鏈和狀態(tài)數(shù)據(jù)庫

  2. World state:世界狀態(tài),經(jīng)過數(shù)次交易后最新的鍵值對

  3. Channel: 通道壮不,私有的子網(wǎng)絡(luò)汗盘,通道中的節(jié)點(diǎn)共同維護(hù)賬本,實(shí)現(xiàn)數(shù)據(jù)的隔離和保密询一。 每個(gè)channel對應(yīng)一個(gè)賬本隐孽,由加入該channel的peer維護(hù),一個(gè)peer可以加入多個(gè)channel健蕊,維護(hù)多個(gè)賬本菱阵。

  4. Network:交易處理節(jié)點(diǎn)之間的P2P網(wǎng)絡(luò),用于維持區(qū)塊鏈賬本的一致性绊诲。

  5. Org:Orginazation送粱,管理一系列成員的組織。一個(gè)channel內(nèi)可以有多個(gè)組織掂之。

  6. Chainnode:鏈碼抗俄,運(yùn)行在節(jié)點(diǎn)內(nèi)的程序脆丁,目前支持Go、Nodejs动雹、Java槽卫,運(yùn)行在隔離的容器中,提供業(yè)務(wù)邏輯接口胰蝠,對賬本進(jìn)行查詢或更新

  7. Endorse:背書階段歼培,指一個(gè)節(jié)點(diǎn)執(zhí)行了一個(gè)交易并對結(jié)果進(jìn)行簽名后返回響應(yīng)的過程(負(fù)責(zé)校驗(yàn)?zāi)硞€(gè)交易是否合法)。

  8. Ordering Service:排序服務(wù)茸塞,將交易排序后放入?yún)^(qū)塊中躲庄,并廣播給網(wǎng)絡(luò)各節(jié)點(diǎn)

  9. PKI:Public Key Infrastructure,一種遵循標(biāo)準(zhǔn)的利用公鑰加密技術(shù)為電子商務(wù)的開展提供一套安全基礎(chǔ)平臺(tái)的技術(shù)和規(guī)范

  10. MSP:Membership Service Provider钾虐,成員管理服務(wù)噪窘,基于PKI實(shí)現(xiàn),為網(wǎng)絡(luò)成員生成證書效扫,并管理身份

共識(shí)算法


在所有peers中倔监,交易信息必須按照一致的順序?qū)懭胭~本(區(qū)塊鏈的基本原則)。例如菌仁,比特幣通過POW機(jī)制浩习,由最先完成數(shù)學(xué)難題的節(jié)點(diǎn)決定本次區(qū)塊中的信息順序,并廣播給全網(wǎng)所有節(jié)點(diǎn)济丘,以此來達(dá)成賬本的共識(shí)谱秽。而Hyperledger Fabric采用了更加靈活、高效的共識(shí)算法闪盔,以適應(yīng)企業(yè)場景下弯院,對高TPS的要求。目前泪掀,Hyperledger Fabric有三種交易排序算法可以選擇听绳。

Solo:只有一個(gè)order服務(wù)節(jié)點(diǎn)負(fù)責(zé)接收交易信息并排序,這是最簡單的一種排序算法异赫,一般用在實(shí)驗(yàn)室測試環(huán)境中椅挣。Sole屬于中心化的處理方式。

Kafka:是Apache的一個(gè)開源項(xiàng)目塔拳,主要提供分布式的消息處理/分發(fā)服務(wù)鼠证,每個(gè)kafka集群由多個(gè)服務(wù)節(jié)點(diǎn)組成。Hyperledger Fabric利用kafka對交易信息進(jìn)行排序處理靠抑,提供高吞吐量九、低延時(shí)的處理能力,并且在集群內(nèi)部支持節(jié)點(diǎn)故障容錯(cuò)。

SBFT:簡單拜占庭算法荠列,相比于kafka类浪,提供更加可靠的排序算法,包括容忍節(jié)點(diǎn)故障以及一定數(shù)量的惡意節(jié)點(diǎn)肌似。目前费就,Hyperledger Fabric社區(qū)正在開發(fā)該算法。

節(jié)點(diǎn)架構(gòu)


Fabric的節(jié)點(diǎn)具有不同身份并提供不同職能川队,下面是網(wǎng)絡(luò)節(jié)點(diǎn)的示意圖力细。


網(wǎng)絡(luò)節(jié)點(diǎn)的示意圖

一、Peer節(jié)點(diǎn)

  1. 記賬節(jié)點(diǎn):所有的Peer節(jié)點(diǎn)都是記賬 (committer) 節(jié)點(diǎn)固额,負(fù)責(zé)驗(yàn)證從排序服務(wù)接收到區(qū)塊中的交易眠蚂,維護(hù)賬本的副本

  2. 背書節(jié)點(diǎn):部分Peer節(jié)點(diǎn)會(huì)執(zhí)行交易并對結(jié)果簽名背書,充當(dāng)背書 (Endorsement) 節(jié)點(diǎn)对雪。背書節(jié)點(diǎn)是動(dòng)態(tài)的角色河狐,只有在應(yīng)用
    程序向它發(fā)起背書請求的時(shí)候才是背書節(jié)點(diǎn),其他時(shí)候只是普通的記賬節(jié)點(diǎn)瑟捣,只負(fù)責(zé)驗(yàn)證交易并記賬

  3. 主節(jié)點(diǎn)(Leader Peer):代表的是與排序節(jié)點(diǎn)通信的節(jié)點(diǎn),負(fù)責(zé)從排序服務(wù)節(jié)點(diǎn)處獲取最新的區(qū)塊并在組織內(nèi)部同步

二栅干、Orderer節(jié)點(diǎn)

  1. 排序服務(wù)節(jié)點(diǎn)接收包含背書簽名的交易迈套,并進(jìn)行排序、打包生成區(qū)塊碱鳞,廣播給Peer節(jié)點(diǎn)桑李,保證同一個(gè)鏈上的節(jié)點(diǎn)接收到相同的消息,并且有相同的邏輯順序

  2. 排序服務(wù)可以支持多鏈的交易處理窿给,實(shí)現(xiàn)了多通道的數(shù)據(jù)隔離贵白,保證只有同一個(gè)鏈的peer才能訪問鏈上的數(shù)據(jù)

  3. 排序服務(wù)可選擇集中式(Solo)或分布式(Kafka)協(xié)議,其中Kafka集群可以實(shí)現(xiàn)崩潰故障容錯(cuò)(CFT)

三崩泡、CA節(jié)點(diǎn)

  1. CA節(jié)點(diǎn)是Fabric的證書頒發(fā)機(jī)構(gòu)(Certificate Authority)禁荒。

  2. CA節(jié)點(diǎn)接收客戶端的注冊申請,返回注冊密碼用于用戶登陸角撞,以便獲取身份證書呛伴。

  3. 在區(qū)塊鏈網(wǎng)絡(luò)上所有的操作都會(huì)驗(yàn)證用戶的身份。

四谒所、Client節(jié)點(diǎn)

  1. 客戶端節(jié)點(diǎn)代表最終用戶操作的實(shí)體热康,它必須連接到某一個(gè)Peer節(jié)點(diǎn)或者排序服務(wù)節(jié)點(diǎn)上與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行通信

  2. 客戶端節(jié)點(diǎn)向背書節(jié)點(diǎn)提交交易提案,收集到足夠背書后劣领,向排序服務(wù)廣播交易姐军,進(jìn)行排序,生成區(qū)塊

數(shù)據(jù)存儲(chǔ)


Fabric區(qū)塊鏈系統(tǒng)的數(shù)據(jù)存儲(chǔ)主要由一項(xiàng)文件存儲(chǔ)(區(qū)塊數(shù)據(jù))和三項(xiàng)數(shù)據(jù)庫組成,結(jié)構(gòu)如下圖奕锌。


數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)

一著觉、區(qū)塊數(shù)據(jù)

  1. 區(qū)塊(block)數(shù)據(jù)時(shí)以二進(jìn)制文件的形式存儲(chǔ)的,每個(gè)賬本數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)文件系統(tǒng)的不同目錄下

  2. 區(qū)塊數(shù)據(jù)存儲(chǔ)是通過區(qū)塊文件管理器(blockfileMgr)實(shí)現(xiàn)的歇攻,它來決定區(qū)塊存儲(chǔ)于哪個(gè)目錄下的哪個(gè)文件

  3. 區(qū)塊文件管理器創(chuàng)建的文件名以“blockifle_”為前綴固惯,6位數(shù)字位后綴,比如blockfile_000000缴守,默認(rèn)的區(qū)塊文件大小為64MB葬毫,如果當(dāng)前文件大小超過該值,則區(qū)塊寫入下一個(gè)文件中屡穗。

二贴捡、區(qū)塊索引

  1. Fabric提供多種索引方式,以方便能快速找到所需要區(qū)塊數(shù)據(jù)村砂。每次提交區(qū)塊后都會(huì)更新索引數(shù)據(jù)庫烂斋。索引方式(鍵)有:
  • 區(qū)塊編號 (Block Number)
  • 區(qū)塊哈希 (Block Hash)
  • 交易編號 (Tx ID)
  1. 索引的內(nèi)容(值)是文件位置指針(File Location Pointer),結(jié)構(gòu)如下:
  • fileSuffixNum:所在文件的編號
  • offset:文件內(nèi)的偏移量
  • bytesLength:內(nèi)容占用的字節(jié)數(shù)

三础废、狀態(tài)數(shù)據(jù)庫

  1. 狀態(tài)數(shù)據(jù)(State Database)記錄的是交易執(zhí)行的結(jié)果汛骂,最新的狀態(tài)代表了通道上所有鍵的最新值,所以又稱為“世界狀態(tài)”评腺。

  2. 交易或查詢操作調(diào)用鏈碼會(huì)根據(jù)當(dāng)前狀態(tài)數(shù)據(jù)庫來完成帘瞭。

  3. 狀態(tài)數(shù)據(jù)庫支持查詢單個(gè)鍵的數(shù)據(jù),多個(gè)鍵的數(shù)據(jù)以及一個(gè)范圍內(nèi)的數(shù)據(jù)蒿讥,如果使用的是CouchDB蝶念,還可以支持復(fù)雜的條件查詢。

四芋绸、歷史數(shù)據(jù)

歷史數(shù)據(jù)(History Database):記錄的是每個(gè)狀態(tài)數(shù)據(jù)的歷史信息媒殉,每個(gè)歷史信息以一個(gè)四元祖表示:

  • namespace: 代表不同的chaincodeID
  • writeKey:要寫入數(shù)據(jù)的鍵
  • blockNo:要寫入數(shù)據(jù)所在的區(qū)塊編號
  • tranNo:要寫入數(shù)據(jù)所在區(qū)塊內(nèi)的交易編號

交易流程


以下是Fabric的經(jīng)典交易流程,所有涉及到對賬本數(shù)據(jù)更新的操作都是基于這個(gè)交易流程來完成的摔敛。


交易流程圖
  1. 發(fā)送交易提案
    客戶端發(fā)送交易提案(Proposal)到背書節(jié)點(diǎn)廷蓉,提案中包含交易所需參數(shù)。

  2. 模擬執(zhí)行交易提案
    背書節(jié)點(diǎn)會(huì)調(diào)用鏈碼模擬執(zhí)行交易提案(Proposal)舷夺,這些執(zhí)行不會(huì)更新賬本

每個(gè)執(zhí)行都會(huì)產(chǎn)生對狀態(tài)數(shù)據(jù)讀出和寫入的數(shù)據(jù)集合苦酱,叫做讀寫集(RWsets),讀寫集是交易中記錄的主要內(nèi)容

  1. 返回提案響應(yīng)
    背書節(jié)點(diǎn)會(huì)對讀寫集進(jìn)行背書(Endorse)簽名给猾,生成提案響應(yīng)(Proposal response)并返回給應(yīng)用程序

  2. 交易排序
    應(yīng)用程序根據(jù)接收到的提案響應(yīng)生成交易疫萤,并發(fā)送給排序服務(wù)節(jié)點(diǎn)。排序服務(wù)打包一組交易到一個(gè)區(qū)塊后敢伸,分發(fā)給各記賬節(jié)點(diǎn)扯饶。

  3. 交易驗(yàn)證并提交
    每個(gè)節(jié)點(diǎn)會(huì)對區(qū)塊中的所有交易進(jìn)行驗(yàn)證,包括驗(yàn)證背書策略以及版本沖突驗(yàn)證(防止雙花),驗(yàn)證不通過的交易會(huì)被標(biāo)記會(huì)無效(Invalid)

賬本更新:節(jié)點(diǎn)將讀寫集更新到狀態(tài)數(shù)據(jù)庫 尾序,將區(qū)塊提交到區(qū)塊鏈上

  1. 通知交易結(jié)果給客戶端
    各記賬節(jié)點(diǎn)通知應(yīng)用程序交易的成功與否钓丰,交易完成。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末每币,一起剝皮案震驚了整個(gè)濱河市携丁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兰怠,老刑警劉巖梦鉴,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揭保,居然都是意外死亡肥橙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門秸侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來存筏,“玉大人,你說我怎么就攤上這事味榛⊥旨幔” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵搏色,是天一觀的道長藕溅。 經(jīng)常有香客問我,道長继榆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任汁掠,我火速辦了婚禮略吨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘考阱。我一直安慰自己翠忠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布乞榨。 她就那樣靜靜地躺著秽之,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吃既。 梳的紋絲不亂的頭發(fā)上考榨,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音鹦倚,去河邊找鬼河质。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掀鹅。 我是一名探鬼主播散休,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乐尊!你這毒婦竟也來了戚丸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扔嵌,失蹤者是張志新(化名)和其女友劉穎限府,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體对人,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谣殊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牺弄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姻几。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖势告,靈堂內(nèi)的尸體忽然破棺而出蛇捌,到底是詐尸還是另有隱情,我是刑警寧澤咱台,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布络拌,位于F島的核電站,受9級特大地震影響回溺,放射性物質(zhì)發(fā)生泄漏春贸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一遗遵、第九天 我趴在偏房一處隱蔽的房頂上張望萍恕。 院中可真熱鬧,春花似錦车要、人聲如沸允粤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽类垫。三九已至,卻和暖如春琅坡,著一層夾襖步出監(jiān)牢的瞬間悉患,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工脑蠕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留购撼,地道東北人跪削。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像迂求,于是被迫代替她去往敵國和親碾盐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容