硬核解读 | 一篇文章看透百度XuperChain系统架构

本期「百度超级链学院」邀请来资深研发工程师,为各位开发者带来超硬核解读,揭秘百度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),回复:我是开发者

相关文章
相关标签/搜索