區塊鏈碼農飆車 | FISCO BCOS的性能優化方案最全解密

FISCO BCOS是完全開源的聯盟區塊鏈底層技術平臺,由金融區塊鏈合作聯盟(深圳)(簡稱金鍊盟)成立開源工作組通力打造。開源工作組成員包括博彥科技、華爲、深證通、神州數碼、四方精創、騰訊、微衆銀行、亦筆科技和越秀金科等金鍊盟成員機構。

代碼倉庫:https://github.com/FISCO-BCOS

 

區塊鏈的速度困境是“貴”在信任,“慢”得其所,說到底,根因還是在其“用計算換信任”的設計思路上。業內普遍讚譽區塊鏈是信任的機器,爲了實現信任,區塊鏈不得不做很多複雜而繁瑣的操作,同步、驗籤、執行、共識等,都是區塊鏈中必不可少的環節。

這就像行車時的“交規”,時刻在告訴我們開發者,爲了安全,請按規定速度行駛!然而,社區裏大家還是有着共同的心聲:真的太慢了!

那麼,能不能對這臺信任的機器來一次裝備升級,讓它既安全又快速呢?經過團隊深入的探索和實踐,我們打通了多條邁向極速時代的路子。回看整個過程,恰如打造了一臺性能卓越的汽車:

高功率發動機☞基於DAG的交易並行執行引擎

燃料輸送裝置☞分佈式存儲

前排與後座☞共識與同步的流程優化

傳動裝置☞全方位並行處理

氫燃料☞預編譯合約

監控儀表☞全面的性能分析工具

專屬的方向盤☞可並行合約開發框架

 

高功率發動機:基於DAG的交易並行執行引擎
——極盡所能讓交易並行執行

 

傳統的交易執行引擎,採用串行的方式執行交易,交易只能被一條條依次執行。一個區塊中無論有多少交易,都需要一條條依次執行完。這就好比一個低功率的發動機,縱使給它裝上巨無霸油箱,仍然無法輸出強大的動力。

1個氣缸不夠,改成4個氣缸,8個氣缸,行不行?

FISCO BCOS實現了一種交易並行執行引擎(PTE),能夠讓一個區塊內的多個交易同時被執行。若機器有4個核,最大限度能支持4筆交易同時執行,如果有8個核,則能支持8筆交易同時執行。

當然,在“交規”管控下,並行執行的正確性需要得到保證,也就是說,並行執行的結果和串行執行的結果需要一致。爲了保證並行執行的一致性,FISCO BCOS的交易並行執行引擎(PTE)引入了DAG(有向無環圖)這個數據結構。

執行引擎在執行區塊中的交易之前,會根據交易相互間的互斥關係,自動構建交易間的依賴關係。這種依賴關係是一種DAG,在引擎執行時,會根據DAG讓可並行的交易並行執行。這樣一來,交易執行的一致性得以保證,交易執行的吞吐量也得到數量級的提升。

 

燃料輸送裝置:分佈式存儲

——爲引擎提供足夠的燃料

 

傳統的區塊鏈存儲模式,是一棵參天的MPT樹。區塊鏈上所有的數據,都匯聚到這棵樹上來。對數據的每一次寫或讀,都是一次從樹枝到樹根(或者從樹根到樹枝)的漫長旅行。隨着鏈上的數據越來越多,樹也越來越高,樹枝到樹根的路程會變得越來越長。

更麻煩的是,雖然樹枝有很多個,但是樹根只有一個。對海量鏈上數據的寫或讀,就像千軍萬馬搶過獨木橋一樣悲壯,慘烈程度可想而知。所以傳統的區塊鏈,選擇了一個個來,一個數據一個數據地讀,一條交易一條交易地執行。形象地說,就是用一根輸油管爲引擎輸送燃料。

這樣肯定不行!我們需要多個輸油管爲引擎輸送燃料!

這一次,FISCO BCOS不是粗暴地爲引擎接上多個輸油管(MPT樹),因爲用輸油管輸油(用MPT存數據)實在是太慢了。我們乾脆拋棄輸油管,直接把引擎泡進油箱裏!這樣的比喻也許欠妥當,但理解了FISCO BCOS的執行引擎和存儲設計,相信你會和我有一樣的感慨。

我們拋棄MPT樹,採用“表”的方式組織數據。執行引擎讀寫數據,無需再對MPT樹進行樹根到樹枝的遍歷,直接在“表”上讀寫。這樣一來,每一條數據的讀寫,都不依賴於一個全局的操作,可以分開獨立進行。這就爲交易並行執行引擎(PTE)提供了併發數據讀寫的基礎,類似於泡在油箱裏的發動機,汽油直接流入氣缸,誰也不共用誰的輸油管。

分佈式存儲詳細解析請點擊:分佈式存儲架構設計

 

前排與後座:共識與同步的流程優化

——不搞平均主義,先富帶動後富

 

在區塊鏈節點中,同步模塊和共識模塊,是一對形影不離的雙胞胎,有時相互幫助,有時也爲爭奪資源大打出手。在以往的設計中,同步模塊和共識模塊並沒有優先級的區分。好比坐車,誰坐前排,誰坐後排,沒個規定,導致這對雙胞胎經常在爭奪先後順序上浪費大量的時間。

一切從實際出發,先富帶動後富!

共識模塊負責主導整個區塊鏈出塊的節奏,應讓共識模塊先行。而同步模塊,理應扮演好配合的角色,輔佐共識模塊更快出塊。基於此思想,FISCO BCOS對共識與同步的流程進行了優化:

第一,將同步模塊中交易驗籤的操作,從P2P的回調線程中剝離出來,讓共識模塊能夠更加順暢地收到共識消息,以便更快進行共識。

第二,對交易驗籤進行去重,並對交易的二進制進行緩存。一筆交易只進行一次驗籤和解碼,爲共識模塊中區塊的執行騰出更多的CPU資源。

第三,優化同步流程,在交易同步之前,儘可能地讓同步模塊跑在共識模塊之前,從而使得同步模塊優先把交易寫入交易池中,優先進行解碼和驗籤,讓共識模塊拿到交易時,免去解碼和驗籤的過程,更快進入區塊打包階段。

總而言之,言而總之。一切的目的,都是爲共識的流程服務,讓其更快更順暢地打包、執行、共識、出塊。

 

傳動裝置:全方位並行處理

——讓功率有效地輸出

 

若不搭配合適的傳動裝置,再高功率的引擎也無法將功率有效輸出。簽名驗證、編解碼、數據落盤,是區塊鏈中除開交易以外,其他耗時佔用較高的部分。在以往的設計中,簽名驗證、編解碼、數據落盤,都是串行執行的。就算交易被並行執行,這臺信任機器的性能,也受制於這三個環節的性能。

這三個環節的性能問題一日不絕,性能永無擡頭之日!那就給高功率發動機配上一個高性能傳動裝置,釋放出它的威力來。

FISCO BCOS引入了並行容器,讓數據的讀寫天然支持併發訪問。在此基礎上,對於交易的驗籤,直接讓交易的驗籤並行執行,交易與交易間的驗籤流程互不影響;對於編解碼,改造了RLP的編碼格式,使原來只能按順序讀寫的RLP格式支持並行的編解碼;對於區塊落盤,對狀態的改變進行並行編碼。

不僅如此,FISCO BCOS在可並行之處都進行了並行處理,讓系統CPU資源得到最大化利用。交易不僅在進入合約引擎時能並行執行,在諸如簽名驗證、編解碼、數據落盤等環節中也都是被並行處理的。強大的發動機,配合上高性能的傳動裝置,果然效果顯著啊!

 

氫燃料:預編譯合約
——高效率的輕量級合約框架

 

衆所周知,區塊鏈上跑的是智能合約,智能合約用solidity語言編寫。solidity合約部署到鏈上,燒掉Gas,得到結果。但是,有沒有想過換一種燃料,一種成本更低卻又讓車跑得更快的燃料?

且看FISCO BCOS自研的“氫燃料”——預編譯合約!

FISCO BCOS爲機構提供了一種高性能、定製化、輕量級合約框架。機構可按照自身業務需求,將自己實現的預編譯合約內置於FISCO BCOS節點中。

預編譯合約用C++編寫,其性能高於solidity引擎,而且啓動速度更快、指令更精簡、內存使用更少。正如“氫燃料”一般,成本更低,熱值更高,讓汽車跑得更快!當然,提取“氫燃料”需要下一點小功夫,預編譯合約的實現相對複雜,門檻比較高。

瞭解預編譯合約請點擊:預編譯合約架構設計

 

監控儀表:多維度性能分析工具

——給人全局在握的踏實感

 

FISCO BCOS在開發過程中使用了大量的性能分析工具,就像汽車上安裝了諸多指數清晰的監控儀表。

我們採用了主流的性能分析工具,如perf,systemtap,對程序的熱點、鎖、內存等進行了分析,還根據區塊鏈的程序流程特點,開發了定製化的性能分析工具,以便在共識,區塊驗證、存儲模塊和流程中更好地評估數據。

工具能夠對程序中各個階段的時間佔比、時間變化進行分析。有了可靠的量化工具,開發者在做每一處優化時,都能做到心中有數。

 

專屬的方向盤:可並行合約開發框架
——給開發者流暢的操作體驗

 

一切準備就緒,上車!

坐上駕駛位,你手中掌控的,將是FISCO BCOS爲你提供的專屬方向盤——可並行合約開發框架!如何合理操作這臺機器,全靠這個方向盤。

“手握”並行合約開發框架,在開發並行合約時,合約開發者無需關心具體的底層邏輯,而是將更多注意力集中在自己的合約邏輯上。當合約部署成功後,並行合約會被底層代碼自動識別,自動並行地執行!

現在,終於開上了車。沒過癮?沒關係,接下來的幾篇,請接好,是真正的硬核乾貨!我們將在下一篇文章中,系統介紹FISCO BCOS中基於DAG模型的並行交易執行器(PTE),敬請期待~


 

我們鼓勵機構成員、開發者等社區夥伴參與開源共建事業,有你在一起,會更了不起。多樣參與方式:

1 進入微信社羣,隨時隨地與圈內最活躍、最頂尖的團隊暢聊技術話題(進羣請添加小助手微信,微信ID:fiscobcosfan);

2 訂閱我們的公衆號:“FISCO BCOS開源社區”,我們爲你準備了開發資料庫、最新FISCO BCOS動態、活動、大賽等信息;

3 來Meetup與開發團隊面對面交流,FISCO BCOS正在全國舉辦巡迴Meetup,深圳、北京、上海、成都……歡迎您公衆號在菜單欄【找活動】中找到附近的Meetup,前往結識技術大咖,暢聊硬核技術;

4 參與代碼貢獻,您可以在Github提交Issue進行問題交流,歡迎向FISCO BCOS提交Pull Request,包括但不限於文檔修改、修復發現的bug、提交新的功能特性。

代碼貢獻指引:

https://github.com/FISCO-BCOS/FISCO-BCOS/blob/master/docs/CONTRIBUTING_CN.md

 

本文首發於公衆號【FISCO BCOS開源社區】,如轉載請註明出處,原創不易,謝謝珍惜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章