重磅!京东云区块链数据服务(BDS)正式开源
區(qū)塊鏈由很多區(qū)塊按時(shí)間順序串聯(lián)起來構(gòu)成的,在每個(gè)區(qū)塊中存儲(chǔ)交易、賬號(hào)等相關(guān)信息。每個(gè)區(qū)塊就像一本紙賬本,上面記錄了很多人每天的流水賬。如果我們想查看最近一年有多少筆大額支出,那我們需要將最近一年的所有賬本搬出,一本一本從頭到尾進(jìn)行翻看,找出相應(yīng)的記錄。也可以說每個(gè)區(qū)塊就像一本紙質(zhì)書,如果我們想從一堆紙質(zhì)書中按某些關(guān)鍵字進(jìn)行查找,除了從頭到尾進(jìn)行翻看之外,就別無它法了。區(qū)塊鏈上數(shù)據(jù)都是離散化的數(shù)據(jù),需要更加有效的數(shù)據(jù)組織方式以便于做進(jìn)一步的查詢與分析。
隨著區(qū)塊鏈技術(shù)的火爆,整個(gè)行業(yè)可謂是百家爭鳴,有諸如BTC,ETH,XRP等耳熟能詳?shù)墓墟滍?xiàng)目,也有Fabric,Enterprise Ethereum Alliance,Corda R3等眾所周知的聯(lián)盟鏈項(xiàng)目,當(dāng)然還有一些私有鏈項(xiàng)目。不管是公有鏈也好,聯(lián)盟鏈、私有鏈也罷,每個(gè)鏈都是一個(gè)一個(gè)獨(dú)立的信息孤島,它們?cè)诩夹g(shù)上各有特色,在底層數(shù)據(jù)模型上也有很多相同之處。每個(gè)區(qū)塊鏈項(xiàng)目就像一個(gè)一個(gè)手機(jī)App,我們可以統(tǒng)計(jì)分析出每個(gè)項(xiàng)目用戶總量、日活、月活、留存、使用率、用戶余額、平均交易金額等通用指標(biāo)。
如何將多個(gè)區(qū)塊鏈項(xiàng)目的信息孤島連接起來,將無序、離散的區(qū)塊數(shù)據(jù)整合成有序、可方便查詢的關(guān)系型數(shù)據(jù),將鏈上透明、共識(shí)、可信的數(shù)據(jù)和信息聚合在一起,提供分析、建模服務(wù),賦能產(chǎn)業(yè)互聯(lián)網(wǎng)發(fā)展,是區(qū)塊鏈技術(shù)產(chǎn)業(yè)價(jià)值的重要體現(xiàn),也是京東云BDS產(chǎn)品的目標(biāo)。
京東云區(qū)塊鏈數(shù)據(jù)服務(wù)正在打造一個(gè)行業(yè)標(biāo)準(zhǔn)的區(qū)塊鏈的BI+數(shù)據(jù)搜索服務(wù),但是區(qū)塊鏈項(xiàng)目的底層區(qū)塊存儲(chǔ)結(jié)構(gòu)各不相同,需要對(duì)不同的項(xiàng)目的數(shù)據(jù)進(jìn)行解析與整理,我們深知單單夠我們的力量是不足以對(duì)接業(yè)界繁多的項(xiàng)目,因此我們開源了區(qū)塊鏈數(shù)據(jù)服務(wù)(BDS),讓更多的開發(fā)者與社區(qū)可以參于其中,接入更多公有鏈、聯(lián)盟鏈、私有鏈等區(qū)塊鏈項(xiàng)目。區(qū)塊鏈數(shù)據(jù)服務(wù)將以區(qū)塊鏈數(shù)據(jù)搜索引擎形式聚合所有區(qū)塊鏈相關(guān)的內(nèi)容,最大化區(qū)塊鏈上可信數(shù)據(jù)價(jià)值,方便社區(qū)能在BDS上進(jìn)行區(qū)塊鏈數(shù)據(jù)的一站式查詢。
2019-07-17,京東云區(qū)塊鏈數(shù)據(jù)服務(wù)(BDS)正式宣布開源計(jì)劃,項(xiàng)目組織:https://github.com/jdcloud-bds/,產(chǎn)品演示地址可以訪問 京東云區(qū)塊鏈數(shù)據(jù)服務(wù)。
?
架構(gòu)圖
Blockchain Node:改造后的全節(jié)點(diǎn)服務(wù),可將新塊數(shù)據(jù)同步到 Queue 中;
Exchange:交易所上區(qū)塊鏈相關(guān)數(shù)據(jù);
Social Network:社交媒體上區(qū)塊鏈相關(guān)數(shù)據(jù);
Queue:消息隊(duì)列服務(wù);
Splitter:負(fù)責(zé)從 Queue 讀取區(qū)塊鏈數(shù)據(jù),并將數(shù)據(jù)結(jié)果寫入到 Data Warehouse 中;
Data Process Framework:實(shí)時(shí)數(shù)據(jù)分析模塊,會(huì)進(jìn)行一些實(shí)時(shí)數(shù)據(jù)指標(biāo)計(jì)算,并將計(jì)算結(jié)果寫入到 Data Warehouse 中;
Machine Learning:機(jī)器學(xué)習(xí)模塊,會(huì)針對(duì)區(qū)塊鏈地址信息通過機(jī)器學(xué)習(xí)技術(shù)進(jìn)行訓(xùn)練,分析,并將分析結(jié)果寫入到 Data Warehouse 中;
Data Warehouse:數(shù)據(jù)倉庫服務(wù),負(fù)責(zé)結(jié)構(gòu)化存儲(chǔ)區(qū)塊鏈相關(guān)數(shù)據(jù);
Cache Service:數(shù)據(jù)緩存服務(wù),存儲(chǔ)一些熱數(shù)據(jù),提高響應(yīng)速度;
Event Service:事件訂閱服務(wù),支持針對(duì)特殊的事件進(jìn)行訂閱設(shè)置,發(fā)送郵件或短信;
Blockchain BI Service:數(shù)據(jù)可視化服務(wù);
API Service:API 接口服務(wù),支持通過 API 方式獲取數(shù)據(jù);
Report Service:數(shù)據(jù)報(bào)告服務(wù),自動(dòng)生成數(shù)據(jù)報(bào)表。
?
開源計(jì)劃
目前在開源項(xiàng)目組織 https://github.com/jdcloud-bds/ 中, 京東BDS團(tuán)隊(duì)開源了?Blochain Node?和?Splitter?兩個(gè)服務(wù)模塊,?Blochain Node?模塊優(yōu)先將?BTC Node?代碼開源了出來,之后我們還會(huì)不斷開源其他的全節(jié)點(diǎn)服務(wù),預(yù)計(jì)在 2019 年 Q3 季度會(huì)陸續(xù)將:ETH,XRP,ETC,LTC 等 20+ 條主流公有鏈開源出來,歡迎各位開發(fā)者定期關(guān)注京東云區(qū)塊鏈產(chǎn)品部的開源項(xiàng)目。
當(dāng)然,除了開源?Blochain Node?和?Splitter?兩個(gè)服務(wù)模塊之外,京東云BDS團(tuán)隊(duì)還會(huì)陸續(xù)將其他服務(wù)模塊也開源出來。
有人會(huì)問如果只是開源?Blochain Node?和?Splitter?兩個(gè)服務(wù)模塊,是不是無法搭建出類似 京東云區(qū)塊鏈數(shù)據(jù)服務(wù) 的效果。當(dāng)然可以。
通過上面的系統(tǒng)架構(gòu)圖可以發(fā)現(xiàn),Blochain Node?和?Splitter?兩個(gè)是整套服務(wù)的核心模塊,其他模塊都是基于這兩個(gè)模塊來設(shè)計(jì)的,所以開源了這兩個(gè)核心模塊,區(qū)塊鏈數(shù)據(jù)庫服務(wù)的基本架子就已經(jīng)存在了,剩下的就是錦上添花的事情了。
具體搭建方式,詳見本篇文章的 “本地搭建” 介紹。
?
成為 Contributor
針對(duì)京東云區(qū)塊鏈產(chǎn)品部開源的?Blochain Node?和?Splitter?兩個(gè)服務(wù)服務(wù),開發(fā)者都可以申請(qǐng)成為 Contributor。
如果您想基于bds-btc項(xiàng)目進(jìn)行 bug 修復(fù)或者新增一些新特性,請(qǐng)給我們的項(xiàng)目提個(gè) issue,確保我們知道您準(zhǔn)備做這個(gè)事情,避免其他開發(fā)者的重復(fù)開發(fā)。之后您只需要基于 https://github.com/jdcloud-bds/bds-btc 項(xiàng)目新建一個(gè)分支,并基于這個(gè)分支進(jìn)行代碼編輯,同時(shí)請(qǐng)確保文檔和測試用例都是完整的,完成后提交 PR 即可,項(xiàng)目的 Contributor 會(huì)進(jìn)行代碼審核,審核通過后會(huì)進(jìn)行代碼合并。
如果您是想將新區(qū)塊鏈項(xiàng)目接入BDS平臺(tái),比如:Grin、Libra。請(qǐng)先給我們發(fā)郵件,郵箱地址:jdcloud-bds@jd.com:,確保我們知道您準(zhǔn)備做這個(gè)事情,避免其他開發(fā)者的重復(fù)開發(fā)。之后我們會(huì)在項(xiàng)目組織 https://github.com/jdcloud-bds/ 下新建一個(gè)項(xiàng)目倉庫,您只需要基于新建的項(xiàng)目倉庫新建一個(gè)分支,并基于這個(gè)分支進(jìn)行代碼編輯,同時(shí)請(qǐng)確保文檔和測試用例都是完整的,完成后提交 PR 即可,項(xiàng)目的 Contributor 會(huì)進(jìn)行代碼審核,審核通過后會(huì)進(jìn)行代碼合并。
Contributing 詳細(xì)文檔可分別參考
- bds Contributing Guide
- bds-btc Contributing Guide
如果您是開發(fā)者,有興趣一起參與進(jìn)來,歡迎來一起為區(qū)塊鏈的開源社區(qū)做一份貢獻(xiàn)。
?
本地搭建
接下來,讓我們來一起看看,如果在本地搭建一套簡易環(huán)境,達(dá)到類似 京東云區(qū)塊鏈數(shù)據(jù)服務(wù) 的效果。
部署方式
- confluent and Kafka - Queue
- PostgreSQL - Data Warehouse
- BTC Node
- BDS(Splitter)
- Grafana - Blockchain BI Service
?
安裝 confluent 和 kafka
1、安裝 kafka
參考 kafka 官網(wǎng)文檔進(jìn)行搭建,運(yùn)行 kafka 服務(wù)的時(shí)候需要修改下其配置文件:
<path-to-kafka>/config/server.properties?
添加以下內(nèi)容項(xiàng)?
- message.max.bytes=1048576000
2、安裝 confluent
參考 confluent 官網(wǎng)文檔進(jìn)行搭建,下載壓縮包文件并解壓運(yùn)行 Confluent REST Proxy 服務(wù),但是在運(yùn)行之前需要修改下其配置文件:
<path-to-confluent>/etc/kafka-rest/kafka-rest.properties?
添加以下內(nèi)容項(xiàng)
- max.request.size = 1048576000
- buffer.memory = 1048576000
- send.buffer.bytes = 1048576000
?
運(yùn)行數(shù)據(jù)庫服務(wù)
數(shù)據(jù)庫這塊其實(shí)可以不用自己本地搭建,其實(shí)可以直接使用云數(shù)據(jù)庫服務(wù),這里推薦是用京東云云數(shù)據(jù)庫 RDS 服務(wù),購買地址請(qǐng)戳:JCS For PostgreSQL。
當(dāng)數(shù)據(jù)庫服務(wù)運(yùn)行起來之后,你需要手動(dòng)創(chuàng)建一個(gè)庫名,這個(gè)庫名之后在運(yùn)行 BDS(Splitter)服務(wù)的時(shí)候會(huì)用到。
?
安裝 BTC 全節(jié)點(diǎn)
BTC 運(yùn)行環(huán)境初始化,參見 build-unix
環(huán)境初始化好后,開始進(jìn)行源碼的編譯、運(yùn)行
1、編譯源碼
./autogen.sh ./configure make make install2、運(yùn)行 BTC 全節(jié)點(diǎn)
消息隊(duì)列這里采用了 Kafka
./usr/local/bin/bitcoind -kafka -kafkaproxyhost=[kafka 代理的ip地址] -kafkaproxyport=[kafka 代理的訪問端口,默認(rèn)是 8082] -kafkatopic=btc -datadir=[數(shù)據(jù)目錄]當(dāng)運(yùn)行了 BTC 全節(jié)點(diǎn),你可以發(fā)現(xiàn)在 Kafka 服務(wù)中你收到了一些數(shù)據(jù),這就是區(qū)塊鏈全節(jié)點(diǎn)的新塊數(shù)據(jù)。
?
安裝 BDS(Splitter)服務(wù)
BTC 運(yùn)行環(huán)境初始化,參見 build-unix
環(huán)境初始化好后,開始進(jìn)行源碼的編譯、運(yùn)行
運(yùn)行 BDS(Splitter)服務(wù)
- 設(shè)置項(xiàng)目的路徑?$GOPATH/src/github.com/jdcloud-bds/bds/;
- 執(zhí)行?go build -v github.com/jdcloud-bds/bds/cmd/bds-splitter?編譯項(xiàng)目;
- 根據(jù)?/config/splitter_example.conf?配置模板新建一個(gè)配置文件?splitter.conf,修改?splitter.conf?的內(nèi)容,按提示設(shè)置對(duì)應(yīng)的配置內(nèi)容項(xiàng),包括但不限于 btc 全節(jié)點(diǎn)信息,kafka 相關(guān)信息等;
- 執(zhí)行?./bds-splitter -c splitter.conf?運(yùn)行 BDS(Splitter)服務(wù);
當(dāng) BDS(Splitter)跑起來之后,你會(huì)發(fā)現(xiàn)在你的 PostgreSQL 數(shù)據(jù)庫服務(wù)之前新建的庫名下新建了一些表,過了一會(huì),會(huì)發(fā)現(xiàn)這些表都有不同程度的新數(shù)據(jù)插入,這些數(shù)據(jù)就是 BDS(Splitter)服務(wù)從消息隊(duì)列 Kafka 中消費(fèi)的全節(jié)點(diǎn)的新塊數(shù)據(jù),進(jìn)行解析之后插入的。
這樣就完成了從非結(jié)構(gòu)的區(qū)塊鏈數(shù)據(jù)到結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)換,只需要整套服務(wù)一直運(yùn)行著,那么在 PostgreSQL 數(shù)據(jù)庫服務(wù)就實(shí)時(shí)存儲(chǔ)著 BTC 全節(jié)點(diǎn)的所有數(shù)據(jù)信息。
?
安裝 Garafna
如果要查詢 PostgreSQL 數(shù)據(jù)庫中的數(shù)據(jù)必須登錄數(shù)據(jù)庫服務(wù),執(zhí)行 SQL 命令來查詢,不夠直觀。
所有推薦可以安裝 Garafna 服務(wù),安裝教程參考 Garafna 官網(wǎng) 文檔進(jìn)行搭建。
通過 Garafna 服務(wù)就可以預(yù)置好查詢 PostgreSQL 的 SQL 語句,實(shí)時(shí)查看你需要的數(shù)據(jù)結(jié)果,并以圖表的形式來展現(xiàn),更加形象,直觀。
?
總結(jié)
一個(gè)新的區(qū)塊鏈項(xiàng)目對(duì)接區(qū)塊鏈數(shù)據(jù)服務(wù)開發(fā)只有兩步:
修改相應(yīng)對(duì)的全節(jié)點(diǎn)服務(wù),能夠?qū)^(qū)塊數(shù)據(jù)寫入到消息隊(duì)列。
從消息隊(duì)列中取出相應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)倉庫。
總結(jié)
以上是生活随笔為你收集整理的重磅!京东云区块链数据服务(BDS)正式开源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看电脑的 CPU 信息 ?
- 下一篇: FlexRay学习笔记_2