重磅!京东云区块链数据服务(BDS)正式开源
區塊鏈由很多區塊按時間順序串聯起來構成的,在每個區塊中存儲交易、賬號等相關信息。每個區塊就像一本紙賬本,上面記錄了很多人每天的流水賬。如果我們想查看最近一年有多少筆大額支出,那我們需要將最近一年的所有賬本搬出,一本一本從頭到尾進行翻看,找出相應的記錄。也可以說每個區塊就像一本紙質書,如果我們想從一堆紙質書中按某些關鍵字進行查找,除了從頭到尾進行翻看之外,就別無它法了。區塊鏈上數據都是離散化的數據,需要更加有效的數據組織方式以便于做進一步的查詢與分析。
隨著區塊鏈技術的火爆,整個行業可謂是百家爭鳴,有諸如BTC,ETH,XRP等耳熟能詳的公有鏈項目,也有Fabric,Enterprise Ethereum Alliance,Corda R3等眾所周知的聯盟鏈項目,當然還有一些私有鏈項目。不管是公有鏈也好,聯盟鏈、私有鏈也罷,每個鏈都是一個一個獨立的信息孤島,它們在技術上各有特色,在底層數據模型上也有很多相同之處。每個區塊鏈項目就像一個一個手機App,我們可以統計分析出每個項目用戶總量、日活、月活、留存、使用率、用戶余額、平均交易金額等通用指標。
如何將多個區塊鏈項目的信息孤島連接起來,將無序、離散的區塊數據整合成有序、可方便查詢的關系型數據,將鏈上透明、共識、可信的數據和信息聚合在一起,提供分析、建模服務,賦能產業互聯網發展,是區塊鏈技術產業價值的重要體現,也是京東云BDS產品的目標。
京東云區塊鏈數據服務正在打造一個行業標準的區塊鏈的BI+數據搜索服務,但是區塊鏈項目的底層區塊存儲結構各不相同,需要對不同的項目的數據進行解析與整理,我們深知單單夠我們的力量是不足以對接業界繁多的項目,因此我們開源了區塊鏈數據服務(BDS),讓更多的開發者與社區可以參于其中,接入更多公有鏈、聯盟鏈、私有鏈等區塊鏈項目。區塊鏈數據服務將以區塊鏈數據搜索引擎形式聚合所有區塊鏈相關的內容,最大化區塊鏈上可信數據價值,方便社區能在BDS上進行區塊鏈數據的一站式查詢。
2019-07-17,京東云區塊鏈數據服務(BDS)正式宣布開源計劃,項目組織:https://github.com/jdcloud-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。請先給我們發郵件,郵箱地址:jdcloud-bds@jd.com:,確保我們知道您準備做這個事情,避免其他開發者的重復開發。之后我們會在項目組織 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
1、安裝 kafka
參考 kafka 官網文檔進行搭建,運行 kafka 服務的時候需要修改下其配置文件:
<path-to-kafka>/config/server.properties?
添加以下內容項?
- message.max.bytes=1048576000
2、安裝 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 全節點
BTC 運行環境初始化,參見 build-unix
環境初始化好后,開始進行源碼的編譯、運行
1、編譯源碼
./autogen.sh ./configure make make install2、運行 BTC 全節點
消息隊列這里采用了 Kafka
./usr/local/bin/bitcoind -kafka -kafkaproxyhost=[kafka 代理的ip地址] -kafkaproxyport=[kafka 代理的訪問端口,默認是 8082] -kafkatopic=btc -datadir=[數據目錄]當運行了 BTC 全節點,你可以發現在 Kafka 服務中你收到了一些數據,這就是區塊鏈全節點的新塊數據。
?
安裝 BDS(Splitter)服務
BTC 運行環境初始化,參見 build-unix
環境初始化好后,開始進行源碼的編譯、運行
運行 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
如果要查詢 PostgreSQL 數據庫中的數據必須登錄數據庫服務,執行 SQL 命令來查詢,不夠直觀。
所有推薦可以安裝 Garafna 服務,安裝教程參考 Garafna 官網 文檔進行搭建。
通過 Garafna 服務就可以預置好查詢 PostgreSQL 的 SQL 語句,實時查看你需要的數據結果,并以圖表的形式來展現,更加形象,直觀。
?
總結
一個新的區塊鏈項目對接區塊鏈數據服務開發只有兩步:
修改相應對的全節點服務,能夠將區塊數據寫入到消息隊列。
從消息隊列中取出相應的數據寫入到數據倉庫。
總結
以上是生活随笔為你收集整理的重磅!京东云区块链数据服务(BDS)正式开源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看电脑的 CPU 信息 ?
- 下一篇: FlexRay学习笔记_2