FISCO BCOS快速建鏈實現之路

買賣虛擬貨幣
跟很多開發者一樣,團隊剛開始搭鏈時,也經歷過迷之困惑的階段:安裝哪個版本,怎麼編譯這麼久還容易出錯?配幾個節點,都用什麼IP埠?證書從哪裡來,放到哪裡去?怎麼驗證我的鏈確實搭起來了?...相信從FISCO BCOS1.X版本上手的工程師們,內心都有一座小火山,面對超長的文件、超多的操作步驟……每次版本部署,耗費大量時間,工程師頭上都快能攤熟一枚雞蛋。而資料表明,一個軟體如果15分鐘還使用不起來,使用者就會流失。為了澆滅大家心中的小火山,一起愉快地玩耍區塊鏈,FISCO BCOS的易用性最佳化勢在必行。團隊的第一個目標是讓開發者在5分鐘內搭起開發測試鏈,這就需要一個《哈利•波特》裡召喚術一樣的命令,我們把它稱為build_chain。本文將聊聊build_chain指令碼的誕生記,以及當前指令碼能夠提供的幫助。build_chain指令碼的誕生首先是去掉編譯步驟,原始碼編譯不但需要安裝下載依賴,還需要配置開發環境,即便這兩步一切順利,編譯過程中還可能因為記憶體不足而失敗,更何況下載依賴經常受到網速影響導致下載失敗。於是我們提供了預編譯的二進位制釋出包,讓使用者跳過冗長的編譯階段。
馬上我們又發現了新的問題,即使針對不同平臺都提供二進位制釋出包,使用者的環境是千變萬化的,預編譯程式所依賴的動態庫的安裝又成了問題。於是我們想到了提供靜態編譯的二進位制釋出包,相容多種Linux64位作業系統,不依賴任何其他庫,省時又省力。為了實現靜態編譯,我們不惜重新實現部分功能,以去掉對不提供.a的外部庫的依賴。接下來我們嘗試減少部署步驟,減輕對使用者的壓力。配置項太多太靈活,我們最佳化配置,所有配置都提供合適的預設值,刪除不需要靈活定製的配置項。json格式的配置檔案閱讀不夠直觀,手工修改容易因為格式問題導致錯誤,我們替換為更清晰的ini檔案。系統合約手動部署太麻煩,我們藉助預編譯合約實現內建系統合約來管理鏈上配置。
手工搭建和工具指令碼搭建的節點目錄結構不統一,我們整理文件,統一工具建立的目錄結構,提供輔助指令碼。經過上述這些最佳化,我們認為可以有更輕量級的部署方式,可以嘗試透過一個指令碼來完成部署過程中的所有事情。相比於大而全的部署工具,指令碼更輕更快;而相比於手工部署的繁瑣,指令碼能夠更簡單。這樣,build_chain指令碼就誕生了。build_chain指令碼提供的幫助這個指令碼能夠完成環境檢查、引數解析、FISCO BCOS二進位制釋出包下載、公私鑰證書生成、配置檔案生成和工具指令碼生成等功能,支援MacOS、Linux 64bit、docker模式和國密版本搭建。然而實際使用後,我們發現在家裡的網路條件下,指令碼下載二進位制釋出包需要很長時間,導致5分鐘內無法完成搭起一條FISCO BCOS的鏈。
為了能達成5分鐘建鏈的目標,我們又新增了CDN支援,在哪怕網路條件不是很好的情況下,也可以順暢地在5分鐘內完成建鏈。心中的小火山熄滅了。具體而言,build_chain指令碼能夠提供的幫助包括以下幾個:環境檢查build_chain指令碼需要使用OpenSSL來生成節點所需要使用到的相關證書檔案,而FISCO BCOS 2.0要求使用OpenSSL 1.0.2以上版本。只有找到符合要求的程式版本,指令碼才能繼續執行。需要注意的是,MacOS自帶的是LibreSSL,所以需要使用者使用brew install OpenSSL安裝OpenSSL。解析引數
build_chain指令碼支援很多自定義引數,例如-p指定節點使用的埠範圍、-f搭建指定配置的網路、-g搭建國密版本、-v指定FISCO BCOS程式版本號、-o指定輸出路徑等,詳情可參考以下連結:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/build_chain.html#id4

獲取FISCO BCOS可執行程式

FISCO BCOS提供標準版和國密版本的預編譯可執行程式,可以在大部分x64的Linux機器上執行。另外,為方便開發人員除錯,同時提供了MacOS版本的可執行程式。

· build_chain指令碼會根據作業系統和是否國密下載對應的可執行程式。
· 當從GitHub下載可執行程式較慢時,會自動切換到CDN下載。如下圖可以看到fisco-bcos.tar.gz只有7.72M。
· 當不使用-v選項指定版本時,指令碼會自動拉去GitHub上FISCO BCOS釋出的最新版本,使用-v選項時,則下載指定版本的可執行程式。

對除官方明確的Ubuntu 16.04+和CentOS 7.2+以外的平臺,上生產時建議使用原始碼編譯獲得的可執行程式,然後透過-b選項和-f選項搭建區塊鏈網路。

生成私鑰證書

FISCO BCOS支援證書鏈,預設使用三級證書鏈結構,使用自籤CA證書作為鏈的根證書,使用CA簽發的機構證書用於區分機構,然後使用機構私鑰簽發節點所使用的證書。

節點的conf目錄下會有ca.crt、node.key、node.crt三個檔案,節點使用這三個檔案建立雙向SSL連結,使用node.key在共識過程中為區塊簽名。

如果是國密版本,則指令碼會下載TaSSL工具,生成國密版本的證書檔案。

生成配置檔案和工具指令碼

build_chain指令碼中內建了FISCO BCOS節點所需要使用的配置檔案模板,根據使用者指定的引數修改,生成節點所使用的配置檔案。

關於配置檔案的介紹請參考:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/configuration.html

同時,為方便使用者啟動和停止節點,節點目錄下還會生成start.sh和stop.sh,節點目錄結構說明請參考:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/build_chain.html#id5

總  結

下面來總結一下,FISCO BCOS團隊提升部署速度、實現快速建鏈的幾個要訣:

1.提供靜態編譯的二進位制釋出包,相容多種作業系統,讓使用者跳過冗長的編譯階段。
2.簡化配置,極大限度採用能保證最大成功率的預設引數,最小化使用者需要關注的資訊,使用者只需關注少量網路配置。
3.標準化目錄結構,無論是用一鍵搭鏈、企業級搭鏈、手工搭鏈...生成的目標都是一樣的,降低了差異化帶來的複雜度。
4.巧用指令碼,build chain指令碼可自動串起從準備環境到啟動所有鏈節點一系列常規操作步驟,自動處理各種可能的小異常,讓整個過程顯得行雲流水。
5.最佳化依賴庫地址、網路速度等,極大減少使用者的等待消耗,談笑間,鏈已經搭好。

對於想透過手工搭建進一步學習的同學和生產環境使用,建議使用我們提供的企業級部署工具generator。

在效能和易用性方面,做再多努力都是值得的,我們會繼續努力最佳化,非常歡迎各位社羣的參與者提最佳化建議和bug。

參考連結

企業級部署工具generator
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/enterprise_tools/index.html

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;