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





