死磕hyperledger fabric源碼|Order節(jié)點概述

死磕hyperledger fabric源碼|Order節(jié)點概述

文章及代碼:https://github.com/blockchainGuide/

分支:v1.1.0

bcc633a6c26528720cf16ed170f6a141

前言及源碼目錄

Orderer排序節(jié)點這塊內(nèi)容主要包括了節(jié)點啟動流程涯保、Broadcast廣播交易服務(wù)堡牡、Orderer共識排序服務(wù)以及Deliver區(qū)塊分發(fā)服務(wù)朵诫。其相關(guān)源碼目錄文件如下:

/orderer

|-common

? |-blockcutter:交易切割打包模塊 ??????

? |-bootstrap:引導(dǎo)啟動模塊,生成創(chuàng)世塊 ??????

? |-broadcast:交易廣播服務(wù)模塊 ??????

? |-localconfig:本地配置模塊

? |-metadata:獲取元數(shù)據(jù)模塊

? |-msgprocessor:消息處理器模塊

? |-multichannel:多管道注冊管理器模塊

? |-performance:性能測量模塊

? |-server:Order排序服務(wù)器模塊 ??????

|-consensus

? |-kafka:kafka共識組件模塊 ??????

? |-solo:solo共識組件模塊

? |-consensus.go:定義共識組件相關(guān)接口

|-main.go:orderer主程序

/common

|-deliver:定義Deliver服務(wù)器及處理器接口 ??????

/core

|-deliverservice

? |-blocksprovider:區(qū)塊提供者模塊 ??????

? |-client.go:提供broadcastClient客戶端 ??????

? |-deliveryClient:Deliver服務(wù)客戶端 ??????

? |-requester.go:請求區(qū)塊數(shù)據(jù) ??????

/protos

|-orderer:protobuf消息定義模塊

主要功能

Orderer排序節(jié)點在Hyperledger Fabric系統(tǒng)架構(gòu)中處于核心角色地位誉券,管理著系統(tǒng)通道與所有應(yīng)用通道,負(fù)責(zé)通道創(chuàng)建诞丽、通道配置更新等操作鹉勒,并處理客戶端提交的交易消息請求磅轻,對交易進(jìn)行排序并按規(guī)則打包成新區(qū)塊珍逸,提交賬本并維護(hù)通道賬本數(shù)據(jù),為全網(wǎng)節(jié)點提供Broadcast交易廣播服務(wù)聋溜、Orderer共識排序服務(wù)谆膳、Deliver區(qū)塊分發(fā)服務(wù)等。通常撮躁,Hyperledger Fabric啟動時需要先啟動Orderer排序節(jié)點漱病,創(chuàng)建系統(tǒng)通道提供正常服務(wù)后,再啟動其他角色的Peer節(jié)點進(jìn)入正常工作狀態(tài)。其服務(wù)模塊關(guān)系與架構(gòu)示如圖:

image-20210126163847049

Orderer節(jié)點啟動后基于創(chuàng)世區(qū)塊初始化系統(tǒng)通道杨帽,創(chuàng)建Orderer排序服務(wù)器漓穿,封裝了Broadcast服務(wù)處理句柄、Deliver服務(wù)處理句柄與多通道注冊管理器對象注盈,并提供Broadcast()交易廣播服務(wù)接口與 Deliver()區(qū)塊分發(fā)服務(wù)接口晃危。

其中,Orderer排序服務(wù)器基于Broadcast()接口接收交易廣播服務(wù)請求当凡,調(diào)用Broadcast服務(wù)處理句柄的Handle()方法進(jìn)行處理山害,建立消息處理循環(huán),接收與處理客戶端提交的普通交易消息沿量、配置交易消息等請求消息,經(jīng)過濾后發(fā)送至通道綁定的共識組件鏈對象(Solo類型冤荆、Kafka類型等)進(jìn)行排序朴则。接著,再將排序后的交易添加到本地待處理的緩存交易消息列表钓简,并按照交易出塊規(guī)則構(gòu)造新區(qū)塊乌妒,提交到Orderer節(jié)點指定通道賬本的區(qū)塊數(shù)據(jù)文件中,同時負(fù)責(zé)創(chuàng)建新的應(yīng)用通道外邓、更新通道配置等通道管理工作撤蚊。目前,Orderer排序服務(wù)器負(fù)責(zé)接收與處理兩類交易消息损话,具體如下侦啸。

  • 配置交易消息(ConfigMsg):通道頭部類型是CONFIG_UPDATE的通道配置交易消息,含有最新的通道配置信息丧枪,經(jīng)過通道消息處理器過濾后光涂,轉(zhuǎn)換為通道頭部類型為 ORDERER_TRANSACTIONCONFIG的配置交易消息(Envelope類型),分別用于創(chuàng)建新的應(yīng)用通道或更新通道配置拧烦,同時忘闻,將通道配置交易消息單獨打包成新區(qū)塊,并提交到系統(tǒng)通道賬本與應(yīng)用通道賬本恋博。

  • 普通交易消息(NormalMsg):通道頭部類型是ENDORSER_TRANSACTION等的標(biāo)準(zhǔn)交易消息(經(jīng)過Endorser背書的交易消息或其他非配置交易消息)齐佳,含有改變世界狀態(tài)的模擬執(zhí)行結(jié)果讀寫集,經(jīng)過Endorser節(jié)點簽名背書后打包發(fā)送到Orderer節(jié)點請求處

    理债沮,經(jīng)過通道消息處理器過濾后炼吴,將合法交易提交到共識組件鏈對象進(jìn)行排序,再按照交易出塊規(guī)則(出塊時間周期秦士、打包最大交易數(shù)量缺厉、區(qū)塊字節(jié)數(shù)限制等)生成新區(qū)塊,并提交到通道賬本。

同時提针,Orderer排序服務(wù)器提供Deliver()區(qū)塊分發(fā)服務(wù)接口命爬,將接收的服務(wù)請求交由Deliver服務(wù)處理句柄的Handle()方法處理,建立消息處理循環(huán)辐脖,負(fù)責(zé)接收與處理客戶端提交的區(qū)塊請求消息饲宛,封裝了指定區(qū)塊請求范圍的區(qū)塊搜索信息(SeekInfo類型)。接著嗜价,Deliver服務(wù)處理句柄循環(huán)從本地賬本獲取區(qū)塊數(shù)據(jù)艇抠,依次發(fā)送給請求節(jié)點(如Leader主節(jié)點)。如果賬本中還未生成指定區(qū)塊久锥,則Deliver服務(wù)處理句柄默認(rèn)一直阻塞等待家淤,直到該區(qū)塊創(chuàng)建完成并提交賬本后再回復(fù)給請求節(jié)點。

另外瑟由,Orderer排序服務(wù)器還提供了多通道注冊管理器Registrar對象絮重,負(fù)責(zé)管理系統(tǒng)通道與所有應(yīng)用通道,封裝了所有通道的鏈支持對象字典歹苦、共識組件字典青伤、區(qū)塊賬本工廠對象等組件,維護(hù)所有通道上的通道配置殴瘦、區(qū)塊賬本對象狠角、共識組件等核心資源,創(chuàng)建通道上的共識組件鏈對象提供Orderer共識排序服務(wù)蚪腋,負(fù)責(zé)對交易消息排序丰歌,切割打包構(gòu)造新區(qū)塊并提交賬本,同時負(fù)責(zé)創(chuàng)建新的應(yīng)用通道與更新通道配置辣吃,其相當(dāng)于Orderer節(jié)點上的“資源管理器”动遭。

實際上,Orderer排序服務(wù)器上的通道共識組件鏈對象利用Golang通道(Solo共識組件)或Kafka集群(Kafka共識組件)作為共識排序后端神得,對經(jīng)過通道消息處理器過濾的合法交易消息進(jìn)行排序厘惦,對交易順序等達(dá)成一致性觀點。同時哩簿,在新通道創(chuàng)建時或啟動恢復(fù)現(xiàn)有通道時宵蕉,啟動通道綁定的鏈支持對象以及共識組件鏈對象,構(gòu)建交易消息處理循環(huán)节榜,接收共識組件已經(jīng)完成排序的交易消息羡玛,并添加到本地待處理的緩存交易消息列表中,包括配置交易消息宗苍、普通交易消息等稼稿,采用相互獨立的消息處理流程分別處理 薄榛。

注意,目前Orderer節(jié)點賬本只包括區(qū)塊數(shù)據(jù)文件與區(qū)塊索引數(shù)據(jù)庫让歼,負(fù)責(zé)保存區(qū)塊數(shù)據(jù)即公有數(shù)據(jù)(包含公共數(shù)據(jù)與隱私數(shù)據(jù)哈希值)敞恋,不存在狀態(tài)數(shù)據(jù)庫、歷史數(shù)據(jù)庫谋右、隱私數(shù)據(jù)庫等硬猫。不同于Peer節(jié)點,Orderer節(jié)點在提交區(qū)塊到本地賬本前不需要驗證交易背書策略與執(zhí)行MVCC檢查改执,也不保存任何隱私數(shù)據(jù)(明文)啸蜜,只負(fù)責(zé)存儲所有通道賬本上的區(qū)塊數(shù)據(jù)。

參考

https://github.com/blockchainGuide/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辈挂,一起剝皮案震驚了整個濱河市衬横,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌终蒂,老刑警劉巖冕香,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異后豫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)突那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門挫酿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愕难,你說我怎么就攤上這事早龟。” “怎么了猫缭?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵葱弟,是天一觀的道長。 經(jīng)常有香客問我猜丹,道長芝加,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任射窒,我火速辦了婚禮藏杖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脉顿。我一直安慰自己蝌麸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布艾疟。 她就那樣靜靜地躺著来吩,像睡著了一般敢辩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弟疆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天戚长,我揣著相機(jī)與錄音,去河邊找鬼兽间。 笑死历葛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘀略。 我是一名探鬼主播恤溶,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帜羊!你這毒婦竟也來了咒程?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤讼育,失蹤者是張志新(化名)和其女友劉穎帐姻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奶段,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡饥瓷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痹籍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呢铆。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹲缠,靈堂內(nèi)的尸體忽然破棺而出棺克,到底是詐尸還是另有隱情,我是刑警寧澤线定,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布娜谊,位于F島的核電站,受9級特大地震影響斤讥,放射性物質(zhì)發(fā)生泄漏纱皆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一周偎、第九天 我趴在偏房一處隱蔽的房頂上張望抹剩。 院中可真熱鬧,春花似錦蓉坎、人聲如沸澳眷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钳踊。三九已至衷敌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓瞪,已是汗流浹背缴罗。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留祭埂,地道東北人面氓。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蛆橡,于是被迫代替她去往敵國和親舌界。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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