本期「百度超級鏈學院」邀請來資深研發工程師,爲各位開發者帶來超硬核解讀,揭祕百度XuperChain系統架構究竟是怎樣的!git
百度XuperChain在2019年5月底正式宣佈開源。在開源後很快得到了開發者、區塊鏈媒體的普遍關注。XuperChain是百度自主研發的區塊鏈系統,在開源到Github後仍然在活躍地升級代碼,前後發佈了V3.一、V3.2兩個版本。其中有10%的代碼是由外部開發者貢獻的。github
當前,國內外的區塊鏈系統多如過江之卿。對於區塊鏈開發者而言,如何選擇一個區塊鏈系統持續地深耕是一個難題。在項目選型過程當中有不少問題要考慮,例如,功能是否完備,性能是否知足業務壓力,開發過程當中遇到問題可否得到有效的支持?百度超級鏈目前已經經過工信部電子一所的標準測試,在功能、安全、性能三方面都遠超過同類產品。超級鏈也創建了活躍的開發者微信羣,愈來愈多的開發者正在學習超級鏈,用超級鏈落地本身的項目。算法
本文將闡述百度超級鏈的架構體系,對其獨特的關鍵技術進行簡要的分析,讀者將大致瞭解到超級鏈爲何能實現高性能,架構上如何作到的可插拔等等。後續咱們還會推出系列文章,對各個知識點進行抽絲剝繭的講解。安全
系統架構通常而言,區塊鏈系統都是有三大件:分佈式帳本、合約引擎、共識處理器。性能優化
分佈式帳本解決的是數據的存儲問題,例如數據怎麼持久化到存儲介質,數據怎麼組織,數據的校驗、更新、查詢等。合約引擎解決的是計算問題,可以將數據和合約字節碼從帳本加載到虛擬機,進行運算以後,將產生的數據變動再寫入到帳本。微信
共識處理器解決的是一致性問題,由於區塊鏈是個P2P的網絡集羣,傳輸有延遲、不穩定、節點做惡等因素。最終須要經過共識處理器保障:集羣中的全部節點的存儲的數據是一致的,計算結果也是一致的。網絡
圖1. 簡化的超級鏈架構示意圖架構
在超級鏈的架構設計中,這三大件都具有可插拔能力。在合約引擎中,經過抽象的虛擬機接口設計,使得能夠集成各類豐富的虛擬機,例如:XVM、Wavm、SolidityVM(未開源)等等。併發
在分佈式帳本中,咱們設計了高併發的事務管理模型XuperModel, 而且經過抽象的Key-Value接口設計,使得能夠能集成各類底層存儲引擎,例如:Leveldb、Baddger、Rocksdb, 只要實現了Put、Get、Iterator等接口,就能夠將第三方的存儲引擎集成進來。分佈式
在共識處理器中,經過抽象的Consensus接口設計,使得能夠集成各類豐富的共識算法。超級鏈已經開源的主要是TDPos和Pow兩種共識算法。開發者徹底能夠根據本身的須要開發本身的共識算法集成進來。
圖2. 百度超級鏈架構圖
超級鏈的性能優化主要是從兩個方面着手,一個是立體網絡、一個是鏈內並行。
立體網絡,簡單來講是經過一條Root鏈派生出N個平行鏈,這N個平行鏈是按照業務來劃分,使得交易充分地並行。某些必要狀況下要經過Root鏈的哈希錨定實現跨鏈。另外,還有可迴歸側鏈技術,動態地fork生成側鏈,完成一段時間的計算運行後,釋放側鏈。立體網絡技術暫時沒有開源。
鏈內並行,指的是單鏈狀況下的性能優化技術。提升單鏈的性能主要從兩個方面:加快出塊速度和穩定性、交易驗證充分並行。
一方面,超級鏈採用了TDPOS共識,優化了出塊時間片調度機制,可以穩定快速出塊。另外一方面,超級鏈採用獨有的XuperModel模型,使得交易的驗證充分地並行化。這種模型是從經典的UTXO模型發展而來的,將智能合約的執行分爲兩個不一樣的階段:預執行階段和提交階段,並經過相似於MVCC的機制避免總體加鎖,不一樣於通常的讀寫集機制,超級鏈中交易的讀集引用不須要綁定區塊高度,未確認交易的輸出也可被引用,進一步提高了性能測試的總體吞吐。
此外,在工程實現方面也作了大量的優化。好比底層KV存儲支持多盤存儲避免IO瓶頸,經過內存Cache下降訪盤開銷,經過線程避讓機制保障準時出塊等等。
超級鏈的代碼開源在https://github.com/xuperchain,目前每週的開發進展都會同步給社區。咱們也歡迎你們提交代碼,在Github上給出了Issue和 Pull Request的發起模板。到目前爲止,外部開發者提交的Commit數量佔到了10%。咱們的社區建設目標是逐步提高這個比例,使超級鏈真正成爲一個開放共建的生態。
爲了方便你們反饋問題、及時地解答疑惑,咱們也創建了微信羣(見文末),羣中有值班的工程師會7*24小時爲開發者服務。
後續,超級鏈會進一步提高性能、易用性,努力提升在區塊鏈開發者中的影響力。另外,你們也知道XuperChain只是超級鏈「Xuper」家族產品中的一員,咱們後續還會開源超級鏈在邊緣計算、大數據、多方安全計算等方面的集成化解決方案,敬請關注。
若是你是區塊鏈開發者、技術發燒友,歡迎加入超級鏈開發者社羣。加羣方式:添加百度超級鏈小助手微信(image-baidu),回覆:我是開發者