群组架构
考虑到真实的业务场景需求,FISCO BCOS引入多群组架构,支持区块链节点启动多个群组,群组间交易处理、数据存储、区块共识相互隔离,保障区块链系统隐私性的同时,降低了系统的运维复杂度。
注解
举个例子:
机构A、B、C所有节点构成一个区块链网络,运行业务1;一段时间后,机构A、B启动业务2,且不希望该业务相关数据、交易处理被机构C感知,有何解?
- 1.3系列FISCO BCOS系统 :机构A和机构B重新搭一条链运行业务2;运维管理员需要运维两条链,维护两套端口
- FISCO BCOS 2.0+ :机构A和机构B新建一个群组运行业务2;运维管理员仅需维护一条链
显然在达到相同隐私保护需求基础上,FISCO BCOS 2.0+具有更好的扩展性、可运维性和灵活性。
多群组架构中,群组间共享网络,通过网络准入和账本白名单实现各账本间网络消息隔离。
群组间数据隔离,每个群组独立运行各自的共识算法,不同群组可使用不同的共识算法。每个账本模块自底向上主要包括核心层、接口层和调度层三层,这三层相互协作,FISCO BCOS可保证单个群组独立健壮地运行。
核心层
核心层负责将群组的区块数据、区块信息、系统表以及区块执行结果写入底层数据库。
存储分为世界状态(State)和分布式存储(AMDB)两部分,世界状态包括MPTState和StorageState,负责存储交易执行的状态信息,StorageState性能高于MPTState,但不存储区块历史信息;AMDB则向外暴露简单的查询(select)、提交(commit)和更新(update)接口,负责操作合约表、系统表和用户表,具有可插拔特性,后端可支持多种数据库类型,目前支持RocksDB数据库和MySQLstorage。
接口层
接口层包括交易池(TxPool)、区块链(BlockChain)和区块执行器(BlockVerifier)三个模块。
- 交易池(TxPool): 与网络层以及调度层交互,负责缓存客户端或者其他节点广播的交易,调度层(主要是同步和共识模块)从交易池中取出交易进行广播或者区块打包;
- 区块链(BlockChain): 与核心层和调度层交互,是调度层访问底层存储的唯一入口,调度层(同步、共识模块)可通过区块链接口查询块高、获取指定区块、提交区块;
- 区块执行器(BlockVerifier): 与调度层交互,负责执行从调度层传入的区块,并将区块执行结果返回给调度层。
调度层
调度层包括共识模块(Consensus)和同步模块(Sync)。
- 共识模块:包括Sealer线程和Engine线程,分别负责打包交易、执行共识流程。Sealer线程从交易池(TxPool)取交易,并打包成新区块;Engine线程执行共识流程,共识过程会执行区块,共识成功后,将区块以及区块执行结果提交到区块链(BlockChain),区块链统一将这些信息写入底层存储,并触发交易池删除上链区块中包含的所有交易、将交易执行结果以回调的形式通知客户端,目前FISCO BCOS主要支持PBFT和Raft共识算法;
- 同步模块:负责广播交易和获取最新区块, 考虑到共识过程中,leader负责打包区块,而leader随时有可能切换,因此必须保证客户端的交易尽可能发送到每个区块链节点,节点收到新交易后,同步模块将这些新交易广播给所有其他节点;考虑到区块链网络中机器性能不一致或者新节点加入都会导致部分节点区块高度落后于其他节点,同步模块提供了区块同步功能,该模块向其他节点发送自己节点的最新块高,其他节点发现块高落后于其他节点后,会主动下载最新区块。