Data-Stash数据仓库功能介绍

功能介绍

  • Data-Stash可为区块链底层平台提供节点数据扩容、备份、裁剪和高效同步的能力,具有断点续传、可信验证、易于使用等优点。用户可基于Binlog协议同步区块链底层节点全量数据,进而实现全量数据备份、冷热数据分离、节点快速同步,适合节点有海量数据等运维场景。

  • 节点通过数据裁剪实现冷热数据分离,链上仅保留热数据,冷数据则通过全量备份获取,以此节省节点空间。冷热数据分离后,交易的验证、执行仅依赖于链上热数据,从而提升交易执行性能。

  • 对于新节点加入网络后数据的同步,只需要从全量备份拉取数据,实现数据高效同步,其间不占用区块链网络带宽,免去冗长的同步过程,减少节点数据同步的等待时间,使得节点可以快速加入区块链网络并正常工作。

特性

节点账本全量备份
Data-Stash通过解析节点生成的Binlog,可以在节点外生成链上数据的全量备份。随后,节点运维人员可对链上数据进行裁剪,达到节省空间、提升性能的效果。对于裁剪后缺失的冷数据,节点会通过amdb从全量备份读取。节点还可以通过fisco-sync工具,将数据重新导回到节点,恢复完整的节点,而不必从区块链网络拉取数据。

多维度账本校验
据仓库组件在读取某节点日志后,会进行多重校验,以防出现节点账本信息被损害、被篡改、共识系统异常等情况。
校验是多维度的,整体可分为对比校验和区块链校验。对比校验是指Data-Stash会拉取多个节点的账本进行对比,确认账本内容一致后才可以入库;区块链校验是指验证区块链本身,包括哈希检查、签名检查、状态根检查等。

备份数据可信存储
Data-Stash每处理完一个区块,都会为此时的全量备份生成一个哈希值作为检查点。该检查点会为存储增信,适用于全量备份库之间的校验等场景。
例如,不同机构生成了各自的全量备份,现在想比对各自备份数据是否一致,各机构只需要提取出最新区块高度的检查点进行比对,如一致,则表示备份内容完全相同。

断点续传
在实际运行中,FISCO BCOS会生成许多Binlog,这些Binlog无论是体积、数目,都具有相当规模,如果每一次运行都重复下载、解析,会造成性能浪费。为此,我们设计了断点续传机制,组件会持续记录解析的进度,每次运行时都会从上一次断点处运行,而不会重新开始。

易于使用
Data-Stash以jar包的形式提供服务,用户可通过jar包或bash脚本运行。开发者只需要做最少化配置,默认情况下,只需要配置nginx地址、全量数据库地址,程序即可运行。
此外,Data-Stash还允许用户进行更高级的配置设置,例如修改批插入次数、轮询间隔等。

架构

1)下载服务Fetcher Server
下载服务会持续轮询nginx端口,下载最新Binlog日志到本地目录中。

2)解析服务Binlog Parser
解析服务持续读取Binlog日志,并对Binlog中的区块信息进行解析。

3)校验服务Binlog verifier
校验服务用于保证数据的可信性。校验服务会从其他节点拉取Binlog进行对比,保证内容的一致性,并对数据本身进行校验,例如对于区块哈希校验、区块签名校验、交易根校验等。

4)存储服务Data Storage
存储服务按照Binlog的变动,会将其内容应用到数据库中,该数据库会包含系统表、合约表等,结构上与节点保持一致,数据量上则包含节点运行至今的所有区块链数据。表结构可分为如下几类:

  • 系统表_sys_包含区块链信息,例如区块数据(sys_hash_2_block)、共识状态(sys_consensus)、cns(sys_cns)等
  • 合约表c_或cp_记录合约信息,包括nonce值、合约代码、代码哈希等
  • 用户表_u_调用CRUD合约创建的表

5)检查点服务Checkpoint Handler
每一个区块数据的入库存储,都会生成一个检查点数据,该检查点包含了前置所有区块数据的哈希,用于额外对存储进行增信。

posted @ 2022-07-17 11:01  java学习小白  阅读(191)  评论(0编辑  收藏  举报