當前位置:
首頁 > 最新 > 區塊鏈技術結合分散式資料庫實踐

區塊鏈技術結合分散式資料庫實踐

前言

說到區塊鏈技術,人們第一時間會聯想到比特幣,以及這些年一路上漲的比特幣價格。但是比特幣並不能代表區塊鏈技術,它只是第一個提出區塊鏈技術的數字貨幣。

實際上區塊鏈技術最大的貢獻在於為人們提供了一種去中心化的理念,讓人們看到原來在無信任的網路環境下,數據依然可以確保正確,並且該系統還能夠做到無法停止、防屏蔽的效果。

現在市場上很多的開發者都希望基於區塊鏈技術搭建新的應用系統,但是限於區塊鏈技術其誕生時間不太長,並且暫時也還沒有被廣大的開發者所熟知,所以普通開發者對於如何操作區塊鏈裡面的數據,以及如何使用它來設計數據結構和如何開發應用,這些都是困擾區塊鏈開發者的技術難題。

筆者結合自身多年在資料庫內核研發領域的實踐,基於業界的一些開源技術將區塊鏈底層作為存儲,結合上層的SQL解析部分,能夠使應用程序的開發者像使用傳統資料庫一樣使用區塊鏈技術,直接利用SQL命令操作區塊鏈,並且應用的數據結構設計可以繼續沿用過去成熟的範式設計。

這種方式一方面能夠最大程度對現有開發人員降低學習成本,另一方面能夠有機會將一些現有的應用遷移到區塊鏈平台上,從而有效利用區塊鏈技術中的公開透明以及不可抵賴性。

過去,人們在構建大型、重要的應用系統時,考慮到公網的信息通信較容易遭受惡意攻擊,所以大部分通信網路選型設計時都會採用一個較為封閉的網路環境。而封閉的網路環境,往往會使得應用系統向中心化方向發展。

但是應用系統中心化,對於某些特殊的應用場景並不適合,例如:跨境交易場景。如果該場景採用中心化的建設方式,則需要在跨境的多個系統中均搭建一套存儲系統。在交易過程中,各個系統按照某種約定的規則進行數據處理,並且為了防止各系統的數據不一致現象出現,還需要定期對各個系統中的數據進行核對,如果發現不一致現象再進行相應的數據回滾。這種中心化的建設方式會給系統運維和數據核對帶來不少的困難。

區塊鏈技術是一種支持在無信任網路環境中、去中心化的技術。它可以通過數字簽名手段確保運行在鏈上的應用系統通信網路的安全,並且採用Hash鏈技術確保已經寫入的數據不可更改。過去受限於必須採用信任的網路的技術難題被區塊鏈技術解決了,使得人們可以從更加符合業務場景的實際出發,來審視在規劃應用系統時,是否應該繼續採用中心化的模式來進行建設。

經過區塊鏈技術短時間的發展,目前人們已經認識到類似銀行信用徵信、跨境交易、物聯網IOT、全球專利登記等業務場景,更加適合採用去中心化的區塊鏈技術進行設計和開發。


在當前的資料庫行業中,計算存儲分離架構是未來的主流方向。筆者作為社區貢獻者參與了SequoiaBC的開發,其同樣使用計算存儲分離的架構,將底層區塊鏈作為標準的K/V存儲,輔以上層的SQL解析層,從而做到在全兼容SQL、JDBC、ODBC等標準介面的前提下,有效利用底層區塊鏈存儲的一切優秀特性。

在SequoiaBC的整體架構中,主要包含3部分,分別是

SQL引擎,目前支持MySQL和PostgreSQL兩款主流的開源SQL引擎,該模塊主要是為應用提供SQL服務和檢查SQL語法命令;

SQL Adapter,將SQL命令轉換為對應區塊鏈存儲的操作命令的部分;

區塊鏈存儲層,能夠以插件的形式支持目前主流的區塊鏈,包括:以太坊、EOS、以及Hyperledger等。

SequoiaBC整體架構圖如下。

圖 1

SequoiaBC首創式將SQL引擎和區塊鏈存儲層進行分離,使得無論是面嚮應用的SQL引擎還是存儲層中的區塊鏈產品,都成為插拔式模塊,開發者可以根據開發環境需要隨時替換不同的產品進行開發使用。


作者將以PostgreSQL + Hyperledger fabric作為例子,向開發者介紹如何通過PostgreSQL 直接操作區塊鏈裡面的數據。

用戶在使用Hyperledger fabric時,有兩點需要用戶注意

Hyperledger fabric 區塊鏈是以 「通道」–channel為單位進行數據通信,channel是區塊鏈的「私有通道」概念,只有加入了該channel的節點才可以從chaincode中讀取和修改數據;

Hyperledger fabric的「智能合約」– chaincode是建立在channel 之上。


用戶為PostgreSQL安裝SequoiaBC 的SQL Adapter時,首先需要將SequoiaBC的SQL Adapter配置文件 sbc_fabric—1.0.sql、sbc_fabric.control 拷貝到 PostgreSQL的安裝目錄上。

例如PostgreSQL 的安裝路徑為/usr/local/pgsql,則用戶需要將相關的配置文件拷貝到 /usr/local/pgsql/share/extension/ 目錄

cp sbc_fabric.control /usr/local/pgsql/share/extension/ ;

再將 sbc_fabric.so 程序拷貝到 /usr/local/pgsql/lib 目錄,然後重啟PostgreSQL 服務。

完成以上步驟,開發者就成功為PostgreSQL 安裝了操作Hyperledger fabric的SQL Adapter。


在Hyperledger fabric 的部署步驟中,其中一個重要步驟是為區塊鏈安裝 「智能合約」– chaincode。「智能合約」是Hyperledger fabric區塊鏈描述業務邏輯的具體代碼。開發者可以根據自身業務需要,編寫不同的「智能合約」代碼,以實現對應的業務邏輯。

SequoiaBC為開發者提供了一個符合SQL Adapter規範的chaincode,以下命令為Hyperledger fabric 安裝一個名為mycc 的chaincode 的命令。


假設Hyperledger fabric 區塊鏈中已經存在兩個名字為product和bill 的channel,並且chaincode 的名字分別為product_cc和bill_cc,則用戶在PostgreSQL 中創建名為 product和 bill 的表的命令為

用戶在SequoiaBC中向product 「通道」寫入4條記錄。

用戶通過SequoiaBC獲取product 「通道」的所有記錄。

用戶在SequoiaBC中向bill 「通道」寫入3條記錄。

用戶可以通過SequoiaBC從bill 「通道」中獲取數據

用戶可以通過SequoiaBC對product 「通道」里的數據進行條件過濾

用戶可以通過SequoiaBC對product 和bill 兩個「通道」數據進行關聯查詢


實現機制

在PG+Hyperledger的體系中,Hyperledger的智能合約需要以go語言的方式進行實現。而在其他例如以太坊等公鏈上則可以用Solidity實現類似同樣的邏輯。

例如,在Hyperledger中一個insert操作可以用如下代碼簡單實現。

而PG端對應INSERT邏輯的代碼則可以通過FDW簡單實現。

在一個正式實現中可以直接構造Hyperledger的PEER端消息包替代docker的peer調用,可以達到更好的性能與健壯性。


區塊鏈是第一個試圖自帶信任化和防止篡改的分散式記錄系統。它的出現,讓大家意識到,除了互聯網這樣儘力而為的基礎設施外,人們還能打造一個彼此信任的基礎設施。

區塊鏈技術的出現,讓人們對新的應用形態有了更多的想像力,而將區塊鏈與傳統資料庫開發技術相結合,則讓區塊鏈應用開發更加簡單。開發者可以直接像過去操作資料庫的方式直接操作區塊鏈,降低開發難度的同時,還能對過去已經穩定、成熟的應用系統做應用遷移。使用這種區塊鏈+資料庫的聯合解決方案,既加快了區塊鏈應用的實施速度,也有效保護過去的程序資產,避免了重複造輪子的尷尬。

作者:Jun Tung

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 巴比特資訊 的精彩文章:

中國銀行業協會潘光偉:商業銀行要充分利用區塊鏈等技術探索全新服務內容
幣安:SYS異常交易為部分API用戶的釣魚事件,對被動涉及異常交易的賬戶進行交易回滾

TAG:巴比特資訊 |