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