柴震宇 鐘旭 楊碩 于七龍
(東北大學秦皇島分校 計算機與通信工程學院 河北省秦皇島市 066004)
Hyperledger Fabric[4]是當前流行的企業(yè)級開源區(qū)塊鏈開發(fā)框架,具備良好的可拓展性,支持在豐富的應用場景下提供服務。在實際生產(chǎn)環(huán)境中,為提高效率,一般會根據(jù)應用場景將Fabric節(jié)點分散部署在多臺服務器中,搭建Fabric區(qū)塊鏈網(wǎng)絡過程中的復雜的環(huán)境配置通常是開發(fā)者進行快速開發(fā)的瓶頸。針對此問題,已經(jīng)有一些實踐方案,2020年,林劍宏[5]提供了單機部署Fabric網(wǎng)絡的實踐方案,但該方案適用于初學者體驗Fabric網(wǎng)絡系統(tǒng)核心功能,不適用于多機搭建。此外,方案[6]提出了通過指定節(jié)點IP的方式多機快速部署Fabric節(jié)點,但方案無法多節(jié)點進行有效管理。2019年,鐘紹柏[7]提出利用Ubuntu、Docker、Docker Compose搭建Fabric鏈碼運行環(huán)境,并進行鏈碼調(diào)用測試,但該方案為討論Fabric多機部署與管理情況。方案[8]提出了基于Kubernetes的云化部署,該方案管理效率較高,但Kubernetes學習難度大,且運維成本高。
針對管理效率與實施成本問題,本文提出了基于Docker swarm實現(xiàn)Hyperledger Fabric的容器化部署與管理。方案具有以下特點:
(1)利用Docker容器技術(shù)部署Fabric節(jié)點,實現(xiàn)Fabric計算節(jié)點的快速部署;
(2)利用Docker Swarm管理容器工作負載與維護集群狀態(tài),保證系統(tǒng)的高可用性與容錯性,因swarm兼容Docker API,使得其學習成本低,同時架構(gòu)簡單,部署與運維成本低,適用于中小規(guī)模的集群管理。本方案配置簡單且管理效率高效,可直接應用于各類生產(chǎn)環(huán)境。
如圖1所示為基于Docker Swarm部署Fabric分布式網(wǎng)絡拓撲圖,網(wǎng)絡具有5個排序節(jié)點(Orderer)、6個組織(Org),每個組織下有2個peer節(jié)點。其中,排序節(jié)點通過廣播(broadcast)接口,接收客戶端發(fā)送的交易,并將交易進行排序;組織用于維護與管理peer節(jié)點;組織用于管理peer節(jié)點,當peer節(jié)點較多時,可通過組織統(tǒng)一管理,同時,組織還為同組織內(nèi)peer節(jié)點通信機密性提供保護;peer節(jié)點包含了賬本和鏈碼,并維護賬本和鏈碼、處理事務提案(transaction proposal)及響應(proposal response),且通過不間斷申請更新事務使賬本適中處于最新狀態(tài)。每個排序節(jié)點間可相互通信,每個組織內(nèi)部節(jié)點及組織間也可相互通信。
圖1:基于Docker Swarm部署Fabric分布式網(wǎng)絡拓撲
系統(tǒng)中主要將Hyperledger Fabric中的各個組件不屬于Docker容器中運行,并通過Docker Swarm作為容器編排工具實現(xiàn)集中管理各容器,同時構(gòu)造一個自定義的虛擬網(wǎng)絡實現(xiàn)內(nèi)部通信,通過docker-compose啟動Fabric的相關(guān)組件,對運行中的Fabric組件容器進行管理與調(diào)度。
方案中Docker Swarm內(nèi)置的跨主機容器通信方案是overlay網(wǎng)絡,overlay通過虛擬出一個子網(wǎng),讓處于不同主機的容器能透明地使用該子網(wǎng),所以跨主機的容器通信就變成了在同一個子網(wǎng)下的容器通信,邏輯上形成同一主機下的bridge網(wǎng)絡通信。構(gòu)建Hyperledger Fabric分布式網(wǎng)絡的核心在于使各個節(jié)點都處于同一個overlay網(wǎng)絡中,使其中的有關(guān)組件能夠與其他分布式節(jié)點進行通信。
2.3 兩組心率變異性和心率減速力指標分析 研究組SDNN、SDANN、RMSSD、LF、HF及心率減速力水平明顯低于對照組,差異有統(tǒng)計學意義(P<0.05),見表3。
如表1所示為圖1中網(wǎng)絡節(jié)點地址規(guī)劃,基于Fabric多機使用環(huán)境,表1中每一個主機用于構(gòu)建一個組織(Org),即每個組織對應一個IP地址,組織間可通過物理網(wǎng)絡通信,組織內(nèi)部的peer節(jié)點通過overlay網(wǎng)絡相互通信,每個peer不對應具體IP地址,peer之間通過虛擬內(nèi)網(wǎng)間有效的域名通信。
表1:網(wǎng)絡節(jié)點地址
如圖2所示為系統(tǒng)部署流程,主要內(nèi)容有:
圖2:應用部署流程
(1)安裝Docker并拉取鏡像:安裝Docker及與應用有關(guān)依賴軟件、拉取基本鏡像為前置條件,本方案中為Hyperledger Fabric官方鏡像;
(2)組建Docker Swarm集群:將各個服務主機加入相同的Docker Swarm集群中;
(3)創(chuàng)建overlay network:各個節(jié)點所需要共同加入overlay network,以實現(xiàn)節(jié)點間通信;
(4)配置Docker-compose文件:該文件定義了需要管理的服務與相關(guān)環(huán)境,本文中主要為Hyperledger Fabric中的orderer節(jié)點、peer節(jié)點與客戶端(Client)控制臺;
(5)啟動Docker節(jié)點:配置完畢后,可用上一步生成的Docker-compose的相關(guān)文件啟動Docker容器,容器內(nèi)部運行節(jié)點服務;
(6)應用部署:該流程部署相關(guān)的Hyperledger fabric分布式應用,到此為止,Hyperledger Fabric的分布式網(wǎng)絡就構(gòu)建完畢,開發(fā)者可基于此開發(fā)應用程序。
方案測試環(huán)境采用6臺虛擬機用于分布式節(jié)點部署,節(jié)點操作系統(tǒng)為Ubuntu20.04,分配1核(vCPU),2G內(nèi)存,20G硬盤。部署操作主要參考圖2中的核心流程,部署中的核心步驟如下所示:
(1)環(huán)境安裝與鏡像拉取,在每一個組織(Org)的主機中拉取docker、docker swarm鏡像,拉取成功后可驗證相關(guān)組件版本信息,如圖3所示為主機中Docker版本信息,如圖4所示為Docker compose,如圖5所示為Docker images的版本信息,為了保持系統(tǒng)安全性與可擴展性,各類基礎(chǔ)組件安裝時應選擇穩(wěn)定版本部署。
圖3:Docker版本
圖4:Docker-compose版本
圖5:Docker images信息
(2)組建Docker swarm集群。在各個主機中分別通過“docker swarm init --advertise-addr <host-1 ip address>”、“docker swarm join-token manager”、“<output from jointoken manager> --advertise-addr <host-2 ip address>”命令構(gòu)建Docker swarm,部署成功可查看部署后的集群。如圖6所示為通過“docker node ls”查看本項目中集群節(jié)點信息,其中,每個節(jié)點的“Ready”狀態(tài)代表節(jié)點狀態(tài)正常,管理狀態(tài)(MANAGER STATUS)為“Leader”表示該節(jié)點可進行集群任務調(diào)度,當Leader節(jié)點發(fā)生故障時,其它主機將重新推舉產(chǎn)生新的Leader管理集群。
圖6:Docker swarm集群
(3)創(chuàng)建overlay network。在主機中通過“docker network create --attachable --driver overlay basic-network”命令構(gòu)建overlay網(wǎng)絡,如圖7所示為構(gòu)建網(wǎng)絡完畢后通過“docker network ls”命令查看網(wǎng)絡信息,其中,DRIVER為“overlay”、SCOPE為“swarm”的網(wǎng)絡為新建的overlay network。創(chuàng)建overlay network之后,運行在多個節(jié)點(nodes)上的容器(container)可通過內(nèi)部網(wǎng)絡進行通信與訪問。
圖7:創(chuàng)建overlay network的目錄
(4)配置Docker-compose文件。如表2所示為各主機的Docker-compose文件與節(jié)點信息,compose文件是一個YAML文件,用于定義services、network和volumes等參數(shù)。本方案中有6臺主機,對應需要配置6臺主機的dockercompose文件。配置相關(guān)文件可啟動Hyperledger Fabric節(jié)點。
表2:主機Docker-compose文件
(5)啟動節(jié)點。在各主機輸入“docker-compose -f < hostn.yaml> -f <ordern.yaml> up -d”命令啟動節(jié)點,其中“-f”參數(shù)表示指定文件,“-d”參數(shù)表示后臺啟動。如圖8所示,為節(jié)點啟動成功后在Host1中通過“docker ps -a”命令查看容器運行情況,其中,STATUS為“up”表示節(jié)點正常啟動與運行。
圖8:Host 1節(jié)點啟動情況
(6)應用部署。根據(jù)Hyperledger Fabric的業(yè)務流程,首先需要完成加入通道(peer channel join)、更新錨節(jié)點(peer channel update)、安裝鏈碼(install chaincode)、審批鏈碼(approve chaincode)、提交鏈碼(commit chaincode)、初始化鏈碼(init chaincode)等步驟完成之后,才能進入業(yè)務核心流程調(diào)用鏈碼。其中,通道分為系統(tǒng)通道與應用通道,分別用于傳輸管理與交易信息;錨節(jié)點是每個組織中若干個peer節(jié)點的代表,負責與其它組織通信;安裝鏈碼即部署Fabric智能合約,鏈碼被編譯成一個獨立的應用程序,運行于隔離的Docker容器中;審批鏈碼用于允許向通道提交鏈碼,F(xiàn)abric中需要超過一般的組織審批鏈碼后才可向通道提交鏈碼;鏈碼的初始化只需要執(zhí)行一次,在任意節(jié)點上執(zhí)行即可。
如圖9所示為Fabric多機部署測試,部署完畢后,可驗證各排序節(jié)點間與組織內(nèi)部節(jié)點間網(wǎng)絡是否暢通,圖9(a)為驗證排序節(jié)點間網(wǎng)絡連接,圖9(b)為驗證組織內(nèi)部節(jié)點間網(wǎng)絡連接。
圖9
以上部署及測試結(jié)果表明,基于Docker Swarm的Hyperledger Fabric多機部署具有可行性。因Docker swarm是Docker官方社區(qū)開發(fā)的原生集群管理工具,其使用標準的docker API,使得Docker swarm學習成本低,同時架構(gòu)簡單,運維成本低,有利于快速部署與二次開發(fā)。
本文針對Fabric多機的管理效率低與實施成本高問題,研究了基于容器技術(shù)的Hyperledger Fabric的多機部署,并通過實驗的方式驗證了有關(guān)Hyperledger Fabric節(jié)點在Docker Swarm的容器編排管理的可行性。方案具有可快速部署、易于管理等特點,針對于普通規(guī)模的Fabric集群部署與管理具有一定優(yōu)勢,且可直接應用于各類生產(chǎn)環(huán)境。方案未對部署規(guī)模較大集群效率與性能進行測試,下一步將針對規(guī)模較大集群時的精細管理做出探索。