数据导出组件Data-Export:数据分析处理“加速器”

共 5365字,需浏览 11分钟

 ·

2021-01-26 18:41


数据治理通用组件WeBankBlockchain-Data当前的3个子组件——数据仓库组件Data-Stash、数据导出组件Data-Export、数据对账组件Data-Reconcile,相互独立、可插拔、可灵活组装。


其中, 数据仓库组件Data-Stash通过为节点在外部生成全量数据备份,实现海量数据高效治理,关键特性和使用方式参见数据仓库组件Data-Stash:助力区块链节点“轻装上阵”


本文将介绍数据导出组件Data-Export,欢迎大家积极体验,并将使用诉求或优化建议反馈给我们。


  认识Data-Export


区块链业务应用中,对链上数据进行分析处理是常见需求,如统计、报表、监管、审计等,这些需求往往给现有区块链网络带来一些挑战:
  • 当前区块链针对链上数据进行复杂查询或分析,存在效率低、兼容性差的问题。
  • 链上计算资源非常宝贵,如果在链上对数据执行复杂的分析处理,会造成链上资源的浪费。
  • 链上智能合约各不相同,每个区块链项目都要开发能够导出基于自身合约业务数据的应用,重复“造轮子”。


Data-Export为上述难题提供解决方案,通过提供一种通用化、智能化、标准化的数据导出解决方案,降低区块链数据开发门槛,提升研发效率。


使用者几乎无需编码,只进行简单配置,即可把结构化的数据导出到关系型数据库或ElasticSearch等数据存储中,以便后续业务分析和处理。同时支持多活部署、数据分库分表、导出数据可视化、应用监控等功能,适应各类复杂业务场景,满足业务开发中各项需求,提升使用体验。


Data-Export作为区块链数据治理的关键组件,已整合到区块链中间件平台WeBASE数据导出子系统。Data-Export也可以独立与区块链底层集成,灵活地支持业务需求,以适应更多的使用场景、打造更多的功能。


Data-Export支持区块链底层平台FISCO BCOS v2.6.0及以上版本,已在数十个基于FISCO BCOS研发的生产系统中稳定、安全运行。



  Data-Export关键特性一览


作为数据治理工具,Data-Export可为区块链底层平台提供数据导出能力,支持多活部署、数据分库分表、导出数据可视化、应用监控等功能,具备支持金融级高并发、高可用、海量数据导出的能力。


1)支持自动分析、导出智能合约数据


Data-Export支持导出区块链基础数据、基于智能合约自动分析的详情数据。基础数据包含当前块高、交易总量等。如配置了FISO BCOS上运行的合约,则可导出区块链上合约的业务数据,包括event、构造函数、合约地址、执行函数的信息等。


开发者可基于已导出的区块链基础数据,以及智能合约部署合约账户、事件和函数等数据,进行二次开发、定制复杂查询和数据分析的逻辑,快速实现业务需求。


2)灵活的存储和导出策略


链上存在海量数据时,将数据导出到单个数据库或单个业务表会给运维带来巨大压力,造成数据库性能衰减;如数据量过大,通常需对数据进行分片,将同一表内的数据拆分到多个或同个数据库的多张表中,即分库分表。


为此,Data-Export支持可配置的多数据源存储、读写分离和分库分表。Data-Export也支持ElasticSearch,方便海量数据的存储、查询、检索。


数据导出策略方面,Data-Export提供灵活可配置的区块、交易、事件、账户等数据导出功能,可过滤不需要的事件、函数以及其中的具体字段。如某个合约事件信息无需导出,则可通过配置来过滤该事件信息。


3)支持多活部署


在大数据、高可用的场景中,单节点部署的数据导出服务通常无法满足业务需要,且一旦单机服务宕机,则无法获取最新数据。多节点部署方案,可将导出任务独立分片到多节点执行,即便个别节点宕机时也能保证任务正常执行,同时还能提升数据导出的效率。


Data-Export支持灵活的分布式部署和任务调度,保证数据导出的高效率和高可用,具备分布式任务协调服务、横向扩展、灵活伸缩的能力。


4)丰富的API及可视化能力


在数据查询上,Data-Export支持丰富的Restful API数据查询接口,方便用户对链上导出数据完成通用查询操作。


在数据可视化上,Data-Export集成了swagger插件,提供可视化互动API控制台;集成了可视化数据插件Grafana,实现直观、实时、可视化的展示区块链数据;支持自动生成FISCO BCOS链上数据监控视图,让用户对链上数据了如指掌。


  Data-Export整体架构


Data-Export组件包括了codegen、parser、extractor、db、common六个主要模块,提供了数据导出、分布式任务调度、数据查询、可视化、监控和管理等功能。


整体架构如下:



1)codegen模块:代码生成


该模块负责相关合约代码和配置文件的生成,包括合约解析、代码模板、代码生成、组件组装等子模块。


codegen运行模式如下图:



各子模块功能如下:
  • 合约解析模块:解析智能合约文件,获取合约中的交易和event对象。
  • 代码模板模块:用于生成获取交易/event数据的代码模板。
  • 代码生成模块:根据获取的交易和event对象,填充代码模板,生成代码文件。
  • 组件组装模块:用于将生成的代码和core组装成一个独立服务。


2)core模块:核心模块


该模块是Data-Export的核心模块,它被打包为一个可执行的BootJar包,内置开箱即用的Restful API,开发者可便捷地获得数据导出服务。同时,core自身也是一个示例,向开发者展示了如何组合利用各功能模块Jar包,来开发一个功能完整的数据导出系统。


运行模式如下图:



链上数据由Data-Export任务调度模块统一调度,由BlocakFetcher从链上获取数据到本地处理节点,交由对应的BlockHandler进行解析,最后将解析后的数据封装,交由db数据存储模块进行持久化。


如上所述,Data-Export对于链上数据处理的核心流程为数据获取、解析、持久化三步,其中涉及功能模块包括线程管理、多活管理、数据管理、异常监控、用户访问。


  • 线程管理子模块


该模块旨在单节点运行情况下,最大限度地提升数据导出和处理效率,包括链上数据的获取、解析、任务调度和执行等,均由线程管理模块统一调度。


  • 多活管理子模块


该模块集成了Elastic-Job,现已支持分布式部署、任务分片、弹性扩容、并行调度和定制化流程任务。该组件可在分布式环境下,通过SimpleJob对区块进行抓取,并由DataflowJob对区块进行解析处理。


  • 数据管理子模块


该模块集成了Sharding-JDBC,支持分库分表和读写分离,开发者使用时只需设置分片数,系统会自动生成分片策略配置,将海量数据导出到不同的库表中。


  • 异常监控子模块


该模块负责对导出数据的异常进行监控和处理,包括在任务异常失败时,对区块数据进行回滚,并重试补偿,以及对任务超时的校验。


Data-Export通过脚本监控数据源和链上数据,来确保导出任务的正确执行,监控主要基于两个维度:
  • 一段时间内,DB中的数据开始落后于链上数据,直到达到某个阈值;
  • 链上块高增加,一段时间内,DB中块高不变。


一旦触发其中某一个的条件,则会输出报警日志。


  • 用户访问子模块


该模块提供两种数据访问方式,一种是API方式,支持用户系统本地调用;另一种为REST方式,可通过http方式访问,降低业务耦合性,支持跨平台调用。


用户接口按照数据类型分成四类接口:区块数据接口、账户数据接口、交易数据接口和事件数据接口。其中,每类接口中都支持基于块高、hash或账户的查询,同样也支持基于时间、特定字段的复杂查询。


3)extractor模块:数据获取


该模块进一步封装了区块链底层平台FISCO BCOS SDK的逻辑,可以更便捷地调用上链功能,获取区块链数据,包括区块高度、交易详情、区块详情等信息。

运行模式如下图:



4)parser模块:数据解析


该模块封装了区块解析功能,可对链上数据进行分析处理。extractor模块获取链上数据后,由parser模块对合约和区块信息进行完整的解析处理,获得区块、函数、事件、账户等数据详情。


运行模式如下图:



各子模块功能如下:
  • 合约加载:解析器执行前,会加载合约的BIN、ABI和配置信息,计算所有合约函数的MethodId。
  • 账户解析:通过Block获取区块的合约地址,通过合约地址获取runcode后,由预先加载的合约BIN信息,识别账户的类型,最终解析出账户。
  • 函数解析:如函数为构造函数,通过加载合约可解析出函数的值传递信息;如函数非构造函数,则transaction中的to字段即为合约地址。通过合约地址获得函数所属的合约,并根据transaction中附带的input和预先加载的methodId进行比对,可获得函数名。在精准定位了函数所属合约和函数名以后,会触发transactionHandler,并执行对应的解析工作。
  • 事件解析: 基于已解析的transactionHash与合约名映射,可以获取合约名称;根据特定的合约名称,会自动触发该合约下的eventHandler,并执行对应解析工作。
  • 区块解析: 根据获得的Block对象属性解析,获得区块概要信息。


5)db模块:数据存储


该模块封装了数据存储和查询逻辑,并提供数据存储扩展接口,可进行定制开发,目前默认支持mysql和ElasticSearch的存储。


Data-Export通过db模块将数据导出到存储介质中,每一类数据都有特定的存储格式和模型,包括区块原始数据、解析后的区块数据、合约信息、事件数据和交易数据等多种存储模型,存储模型如下:


存储模型

说明

区块原始数据

block_raw_data

区块原始数据表

tx_raw_data

交易原始数据表

tx_receipt_raw_data

交易回执原始数据表

解析后的区块数据

block_detail_info

区块详细数据表

block_tx_detail_info

交易数据表

合约信息

contract_info

合约信息表

deployed_account_info

已部署合约详情信息表

事件数据

合约名称_事件名称

合约事件信息表

交易数据

合约名称_函数名称

合约函数信息表


6)common模块:公共模块


该模块封装了一些公用的数据结构、工具类和公共参数等,包括:
  • 链上数据类型转换工具,提供solidity和java类型转换功能支持。
  • 合约类扫描解析工具,对配置合约类进行解析,提取有效信息。
  • 用于模块间交互的数据对象,在模块间传递信息。
  • 全局静态参数,包括任务状态等枚举。
  • 时间、格式等常用工具。
  • ........


  Data-Export应用场景示例


1)集成到数据可视化后台系统


某公司运营人员需获得当前链上业务进展的实时信息和摘要信息,此时可使用Data-Export组件,根据实际需求进行定制化开发,在较短时间内即可投入使用。


使用Data-Export,将导出db的链上数据接入到公司的统一监控平台,公司产品经理可在业务后台系统上获得链上业务的实时进展,运维人员也可实时监控业务系统状态。


2)集成到区块链业务数据分析系统


某公司基于FISCO BCOS开发了区块链业务系统,要求对链上数据进行分析,并可实时查看各类复杂的业务报表,此时可使用Data-Export,配置相关智能合约信息,导出链上数据。


使用Data-Export,将区块链上的数据实时导出到数据库中,开发者可利用Data-Export自带的Restful API对数据进行查询,获得准实时的链上数据,从而进一步分析数据,生成各类业务报表。


  即刻使用


上述功能所涉及的最新代码和技术文档已同步更新,欢迎体验和 star 支持。如需咨询技术问题,欢迎关注本公众号,对话框回复【小助手】进技术交流群。


Data-Export github代码库地址码仓库:

https://github.com/WeBankBlockchain/Data-Export

Data-Export gitee代码库地址:

https://gitee.com/WeBankBlockchain/Data-Export


Data-Export 技术文档:

https://data-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Data-Export/index.html

首次体验Data-Export,可参考快速部署文档:

https://data-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Data-Export/install.html


向我们报告问题,欢迎提交issue:

https://github.com/WeBankBlockchain/Data-Export/issue




浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报