百度自主研發(fā)的區(qū)塊鏈系統(tǒng)XuperChain介紹
背景
百度XuperChain在2019年5月底正式宣布開源。在開源后很快獲得了開發(fā)者、區(qū)塊鏈媒體的廣泛關注。XuperChain是百度自主研發(fā)的區(qū)塊鏈系統(tǒng),在開源到Github后仍然在活躍地升級代碼,先后發(fā)布了V3.1、V3.2兩個版本。其中有10%的代碼是由外部開發(fā)者貢獻的。
當前,國內(nèi)外的區(qū)塊鏈系統(tǒng)多如過江之卿。對于區(qū)塊鏈開發(fā)者而言,如何選擇一個區(qū)塊鏈系統(tǒng)持續(xù)地深耕是一個難題。在項目選型過程中有很多問題要考慮,例如,功能是否完備,性能是否滿足業(yè)務壓力,開發(fā)過程中遇到問題能否獲得有效的支持?百度超級鏈目前已經(jīng)通過工信部電子一所的標準測試,在功能、安全、性能三方面都遠超過同類產(chǎn)品。超級鏈也建立了活躍的開發(fā)者微信群,越來越多的開發(fā)者正在學習超級鏈,用超級鏈落地自己的項目。
本文將闡述百度超級鏈的架構體系,對其獨特的關鍵技術進行簡要的分析,讀者將大體了解到超級鏈為什么能實現(xiàn)高性能,架構上如何做到的可插拔等等。后續(xù)我們還會推出系列文章,對各個知識點進行抽絲剝繭的講解。
系統(tǒng)架構
一般而言,區(qū)塊鏈系統(tǒng)都是有三大件:分布式賬本、合約引擎、共識處理器。
分布式賬本解決的是數(shù)據(jù)的存儲問題,例如數(shù)據(jù)怎么持久化到存儲介質,數(shù)據(jù)怎么組織,數(shù)據(jù)的校驗、更新、查詢等。
合約引擎解決的是計算問題,能夠將數(shù)據(jù)和合約字節(jié)碼從賬本加載到虛擬機,進行運算之后,將產(chǎn)生的數(shù)據(jù)變更再寫入到賬本。
共識處理器解決的是一致性問題,因為區(qū)塊鏈是個P2P的網(wǎng)絡集群,傳輸有延遲、不穩(wěn)定、節(jié)點作惡等因素。最終需要通過共識處理器保障:集群中的所有節(jié)點的存儲的數(shù)據(jù)是一致的,計算結果也是一致的。
在超級鏈的架構設計中,這三大件都具備可插拔能力。
在合約引擎中,通過抽象的虛擬機接口設計,使得可以集成各種豐富的虛擬機,例如:XVM、Wavm、SolidityVM(未開源)等等。
在分布式賬本中,我們設計了高并發(fā)的事務管理模型XuperModel, 并且通過抽象的Key-Value接口設計,使得可以能集成各種底層存儲引擎,例如:Leveldb、Baddger、Rocksdb, 只要實現(xiàn)了Put、Get、Iterator等接口,就可以將第三方的存儲引擎集成進來。
在共識處理器中,通過抽象的Consensus接口設計,使得可以集成各種豐富的共識算法。超級鏈已經(jīng)開源的主要是TDPos和Pow兩種共識算法。開發(fā)者完全可以根據(jù)自己的需要開發(fā)自己的共識算法集成進來。
高性能關鍵技術
超級鏈的性能優(yōu)化主要是從兩個方面著手,一個是立體網(wǎng)絡、一個是鏈內(nèi)并行。
立體網(wǎng)絡,簡單來說是通過一條Root鏈派生出N個平行鏈,這N個平行鏈是按照業(yè)務來劃分,使得交易充分地并行。某些必要情況下要通過Root鏈的哈希錨定實現(xiàn)跨鏈。另外,還有可回歸側鏈技術,動態(tài)地fork生成側鏈,完成一段時間的計算運行后,釋放側鏈。立體網(wǎng)絡技術暫時沒有開源。
鏈內(nèi)并行,指的是單鏈情況下的性能優(yōu)化技術。提高單鏈的性能主要從兩個方面:加快出塊速度和穩(wěn)定性、交易驗證充分并行。
一方面,超級鏈采用了TDPOS共識,優(yōu)化了出塊時間片調(diào)度機制,能夠穩(wěn)定快速出塊。另一方面,超級鏈采用獨有的XuperModel模型,使得交易的驗證充分地并行化。這種模型是從經(jīng)典的UTXO模型發(fā)展而來的,將智能合約的執(zhí)行分為兩個不同的階段:預執(zhí)行階段和提交階段,并通過類似于MVCC的機制避免整體加鎖,不同于一般的讀寫集機制,超級鏈中交易的讀集引用不需要綁定區(qū)塊高度,未確認交易的輸出也可被引用,進一步提升了性能測試的整體吞吐。
此外,在工程實現(xiàn)方面也做了大量的優(yōu)化。比如底層KV存儲支持多盤存儲避免IO瓶頸,通過內(nèi)存Cache降低訪盤開銷,通過線程避讓機制保障準時出塊等等。
社區(qū)建設
超級鏈的代碼開源在https://github.com/xuperchain,目前每周的開發(fā)進展都會同步給社區(qū)。我們也歡迎大家提交代碼,在Github上給出了Issue和 Pull Request的發(fā)起模板。到目前為止,外部開發(fā)者提交的Commit數(shù)量占到了10%。我們的社區(qū)建設目標是逐步提升這個比例,使超級鏈真正成為一個開放共建的生態(tài)。
為了方便大家反饋問題、及時地解答疑惑,我們也建立了微信群(見文末),群中有值班的工程師會7*24小時為開發(fā)者服務。
后續(xù)計劃
后續(xù),超級鏈會進一步提升性能、易用性,努力提高在區(qū)塊鏈開發(fā)者中的影響力。另外,大家也知道XuperChain只是超級鏈“Xuper”家族產(chǎn)品中的一員,我們后續(xù)還會開源超級鏈在邊緣計算、大數(shù)據(jù)、多方安全計算等方面的集成化解決方案,敬請關注。