区块链由很多区块按时间顺序串联起来构成的,在每个区块中存储交易、账号等相关信息。每个区块就像一本纸账本,上面记录了很多人每天的流水账。如果我们想查看最近一年有多少笔大额支出,那我们需要将最近一年的所有账本搬出,一本一本从头到尾进行翻看,找出相应的记录。也可以说每个区块就像一本纸质书,如果我们想从一堆纸质书中按某些关键字进行查找,除了从头到尾进行翻看之外,就别无它法了。区块链上数据都是离散化的数据,需要更加有效的数据组织方式以便于做进一步的查询与分析。
随着区块链技术的火爆,整个行业可谓是百家争鸣,有诸如BTC,ETH,XRP等耳熟能详的公有链项目,也有Fabric,Enterprise Ethereum Alliance,Corda R3等众所周知的联盟链项目,当然还有一些私有链项目。不管是公有链也好,联盟链、私有链也罢,每个链都是一个一个独立的信息孤岛,它们在技术上各有特色,在底层数据模型上也有很多相同之处。每个区块链项目就像一个一个手机App,我们可以统计分析出每个项目用户总量、日活、月活、留存、使用率、用户余额、平均交易金额等通用指标。
如何将多个区块链项目的信息孤岛连接起来,将无序、离散的区块数据整合成有序、可方便查询的关系型数据,将链上透明、共识、可信的数据和信息聚合在一起,提供分析、建模服务,赋能产业互联网发展,是区块链技术产业价值的重要体现,也是京东云BDS产品的目标。
京东云区块链数据服务正在打造一个行业标准的区块链的BI+数据搜索服务,但是区块链项目的底层区块存储结构各不相同,需要对不同的项目的数据进行解析与整理,我们深知单单够我们的力量是不足以对接业界繁多的项目,因此我们开源了区块链数据服务(BDS),让更多的开发者与社区可以参于其中,接入更多公有链、联盟链、私有链等区块链项目。区块链数据服务将以区块链数据搜索引擎形式聚合所有区块链相关的内容,最大化区块链上可信数据价值,方便社区能在BDS上进行区块链数据的一站式查询。
现在,京东云区块链数据服务(BDS)正式对外开源!
🔗https://github.com/jdcloud-bds/
产品演示地址可以访问BDS服务。
架构图
-
Blockchain Node:改造后的全节点服务,可将新块数据同步到 Queue 中;
-
Exchange:交易所上区块链相关数据;
-
Social Network:社交媒体上区块链相关数据;
-
Queue:消息队列服务;
-
Splitter:负责从 Queue 读取区块链数据,并将数据结果写入到 Data Warehouse 中;
-
Data Process Framework:实时数据分析模块,会进行一些实时数据指标计算,并将计算结果写入到 Data Warehouse 中;
-
Machine Learning:机器学习模块,会针对区块链地址信息通过机器学习技术进行训练,分析,并将分析结果写入到 Data Warehouse 中;
-
Data Warehouse:数据仓库服务,负责结构化存储区块链相关数据;
-
Cache Service:数据缓存服务,存储一些热数据,提高响应速度;
-
Event Service:事件订阅服务,支持针对特殊的事件进行订阅设置,发送邮件或短信;
-
Blockchain BI Service:数据可视化服务;
-
API Service:API 接口服务,支持通过 API 方式获取数据;
-
Report Service:数据报告服务,自动生成数据报表;
开源计划
目前在开源项目组织 https://github.com/jdcloud-bds/ 中, 京东云BDS团队开源了Blochain Node 和 Splitter 两个服务模块, Blochain Node 模块优先将 BTC Node 代码开源了出来,之后我们还会不断开源其他的全节点服务,预计在 2019 年 Q3 季度会陆续将:ETH,XRP,ETC,LTC 等 20+ 条主流公有链开源出来,欢迎各位开发者定期关注京东云区块链团队的开源项目。
当然,除了开源 Blochain Node 和 Splitter 两个服务模块之外,京东云BDS团队还会陆续将其他服务模块也开源出来。
有人会问如果只是开源 Blochain Node 和 Splitter 两个服务模块,是不是无法搭建出类似 京东云区块链数据服务 的效果。当然可以。
通过上面的系统架构图可以发现,Blochain Node 和 Splitter 两个是整套服务的核心模块,其他模块都是基于这两个模块来设计的,所以开源了这两个核心模块,区块链数据库服务的基本架子就已经存在了,剩下的就是锦上添花的事情了。
具体搭建方式,详见本篇文章的 “本地搭建” 介绍。
成为 Contributor
针对京东云区块链产品部开源的 Blochain Node 和 Splitter 两个服务服务,开发者都可以申请成为 Contributor。
如果您想基于bds-btc项目进行 bug 修复或者新增一些新特性,请给我们的项目提个 issue,确保我们知道您准备做这个事情,避免其他开发者的重复开发。之后您只需要基于 https://github.com/jdcloud-bds/bds-btc 项目新建一个分支,并基于这个分支进行代码编辑,同时请确保文档和测试用例都是完整的,完成后提交 PR 即可,项目的 Contributor 会进行代码审核,审核通过后会进行代码合并。
如果您是想将新区块链项目接入BDS平台,比如:Grin、Libra。请先给我们发邮件,邮箱地址:[email protected]:,确保我们知道您准备做这个事情,避免其他开发者的重复开发。之后我们会在项目组织 https://github.com/jdcloud-bds/ 下新建一个项目仓库,您只需要基于新建的项目仓库新建一个分支,并基于这个分支进行代码编辑,同时请确保文档和测试用例都是完整的,完成后提交 PR 即可,项目的 Contributor 会进行代码审核,审核通过后会进行代码合并。
Contributing 详细文档可分别参考
-
bds Contributing Guide
-
bds-btc Contributing Guide
如果您是开发者,有兴趣一起参与进来,欢迎来一起为区块链的开源社区做一份贡献。
本地搭建
接下来,让我们来一起看看,如果在本地搭建一套简易环境,达到类似 京东云区块链数据服务 的效果。
部署方式
-
confluent and Kafka - Queue
-
PostgreSQL - Data Warehouse
-
BTC Node
-
BDS(Splitter)
-
Grafana - Blockchain BI Service
安装 confluent 和 kafka
安装 kafka
参考 kafka 官网文档进行搭建,运行 kafka 服务的时候需要修改下其配置文件:<path-to-kafka>/config/server.properties
添加以下内容项
-
message.max.bytes=1048576000
安装 confluent
参考 confluent 官网文档进行搭建,下载压缩包文件并解压运行 Confluent REST Proxy 服务,但是在运行之前需要修改下其配置文件:<path-to-confluent>/etc/kafka-rest/kafka-rest.properties
添加以下内容项
-
max.request.size = 1048576000
-
buffer.memory = 1048576000
-
send.buffer.bytes = 1048576000
运行数据库服务
数据库这块其实可以不用自己本地搭建,其实可以直接使用云数据库服务,这里推荐是用京东云云数据库 RDS 服务,购买地址请戳:JCS For PostgreSQL。
当数据库服务运行起来之后,你需要手动创建一个库名,这个库名之后在运行 BDS(Splitter)服务的时候会用到。
安装 BTC 全节点
环境初始化好后,开始进行源码的编译、运行
编译源码
1 ./autogen.sh 2 ./configure 3 make 4 make install
运行 BTC 全节点
1 ./usr/local/bin/bitcoind -kafka -kafkaproxyhost=[kafka 代理的ip地址] -kafkaproxyport=[kafka 代理的访问端口,默认是 8082] -kafkatopic=btc -datadir=[数据目录]
当运行了 BTC 全节点,你可以发现在 Kafka 服务中你收到了一些数据,这就是区块链全节点的新块数据。
安装 BDS(Splitter)服务
环境初始化好后,开始进行源码的编译、运行
运行 BDS(Splitter)服务
-
设置项目的路径
$GOPATH/src/github.com/jdcloud-bds/bds/
; -
执行
go build -v github.com/jdcloud-bds/bds/cmd/bds-splitter
编译项目; -
根据
/config/splitter_example.conf
配置模板新建一个配置文件 splitter.conf,修改 splitter.conf 的内容,按提示设置对应的配置内容项,包括但不限于 btc 全节点信息,kafka 相关信息等; -
执行
./bds-splitter -c splitter.conf
运行 BDS(Splitter)服务;
当 BDS(Splitter)跑起来之后,你会发现在你的 PostgreSQL 数据库服务之前新建的库名下新建了一些表,过了一会,会发现这些表都有不同程度的新数据插入,这些数据就是 BDS(Splitter)服务从消息队列 Kafka 中消费的全节点的新块数据,进行解析之后插入的。
这样就完成了从非结构的区块链数据到结构化的数据转换,只需要整套服务一直运行着,那么在 PostgreSQL 数据库服务就实时存储着 BTC 全节点的所有数据信息。
安装 Garafna
所有推荐可以安装 Garafna 服务,安装教程参考 Garafna 官网 文档进行搭建。
通过 Garafna 服务就可以预置好查询 PostgreSQL 的 SQL 语句,实时查看你需要的数据结果,并以图表的形式来展现,更加形象,直观。
总结
一个新的区块链项目对接区块链数据服务开发只有两步:
-
修改相应对的全节点服务,能够将区块数据写入到消息队列。
-
从消息队列中取出相应的数据写入到数据仓库。
点击“阅读原文”查看京东云区块链数据服务(BDS)项目介绍,也欢迎访问:🔗https://github.com/jdcloud-bds/点个Star~
推荐阅读