BTA|王濤:傳統IT人如何用資料庫思維來理解區塊鏈?去中心化資料庫也許是答案

雪花又一年發表於2018-04-18

區塊鏈的概念到技術其實出現已經很長時間,但是隨著這兩年的火熱,才漸漸被市場和許多技術人員瞭解。作為一個資料庫行業的老兵,王濤看到對於區塊鏈技術,在熱潮之下,傳統的IT技術同學們保持了十分理性,甚至是排斥的態度。其實不管是熱捧還是排斥,兩極觀點之下,王濤認為我們應該從IT人比較能夠理解的角度探討一下區塊鏈技術。因為區塊鏈這個東西的本質和資料庫技術非常相像,很多機制使用資料庫的理念去理解會非常直觀準確。在本文的分享中,王濤將從資料庫對比的角度,可以讓傳統IT人更好的理解區塊鏈技術。以下為王濤的詳細分享,希望對你有所幫助。同時,王濤也提出了“去中心化資料庫”的定義,作為區塊鏈技術和資料庫技術未來融合的可能方向。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

王濤簡介:


SequoiaDB巨杉資料庫的聯合創始人&CTO,曾是北美IBM DB2 Lab核心研發成員,有著超過十年的資料庫核心架構設計,資料庫引擎研發和企業級資料庫應用的經驗。王濤同時對區塊鏈技術,分散式架構,分散式演算法,區塊鏈技術以及去中心化業務應用有著深入的瞭解。2012年公司成立以來,王濤先生一直主導著SequoiaDB產品的架構設計與開發,並在業界對未來資料庫、大資料、區塊鏈技術發展進行全力地推動。

在本次BTA區塊鏈技術及應用峰會上,王濤也在區塊鏈核心技術專場,發表了“區塊鏈:去中心化資料庫”的主題分享。本文就基於王濤老師現場的演講內容整理而成。

 

以下為王濤的分享實錄:

作為一個資料庫行業的老兵,我看到對於區塊鏈技術,在熱潮之下,傳統的IT技術同學們保持了十分理性,甚至是排斥的態度。其實不管是熱捧還是排斥,兩極觀點之下,我認為我們應該從IT人比較能夠理解的角度探討一下區塊鏈技術。因為區塊鏈這個東西的本質和資料庫技術非常相像,很多機制使用資料庫的理念去理解會非常直觀準確。

對於區塊鏈和傳統資料技術,我認為區塊鏈技術的未來發展,主題是“融合”。我們就從資料庫這個角度來解讀一下區塊鏈技術體系中各個技術點,以及通過“去中心化資料庫“這個概念,把區塊鏈與資料庫技術做一個比較好的整合。

區塊鏈技術現狀


當前的區塊鏈世界有人號稱1.0、2.0、甚至已經到了3.0時代,但是從一個產品或技術打磨的角度來看,我認為當前的區塊鏈也就相當於資料庫的80年代,處於百花爭鳴各種思想層出不窮的時代。

對技術人來說,這是最好的時代,各種新鮮的想法和思路大量爆發,在沉悶的技術領域帶來新鮮的突破;同時這也是最壞的時代,沒有任何產品或方向肯定是未來的主流,任何新鮮的思路也許在幾個月以後就被證明不可行。

所以,我們要正確認知當前區塊鏈技術的變革和發展,那我們來對比一下當年資料庫所走過的道路,看看未來區塊鏈世界會怎樣發展。

640?wx_fmt=png

1)技術演進路程

首先我認為,區塊鏈一定會從當前的專有化向通用化演進。現在基本所有做公鏈的產品都是針對某一個特定的場景來實現與優化,但是我認為未來一定不會是一個應用一條鏈,而是有一種通用的開發正規化,就好像傳統資料庫一樣,不管大家開發什麼樣的應用程式,都可以使用這麼若干有限的幾個通用性產品就能夠滿足大部分業務場景了。

第二,向標準化演進。對於區塊鏈技術,現在每個鏈基本都有自己的開發正規化,甚至很多公鏈還模仿以太坊嘗試自己做一個程式語言出來,這實際上是一種行業處於原始時期的標誌。怎樣判斷一個行業開始走向成熟?就是業務模式基本固定,開發方式基本固定,這樣就能夠對大量的程式人員進行推廣了。

第三,產品化和模組化不斷加強。當前不管是以太坊、比特幣還是很多其他新的公鏈,大部分的體系結構都是非常緊耦合的。對比起我們在大資料領域的Hadoop,基本每個模組都可以作為獨立外掛進行可配置可定製的插拔。所以我認為,隨著區塊鏈技術的不斷成熟和穩定,未來一定會出現一款成熟產品,能夠通過可插拔配置與外掛的方式滿足多種共識演算法、安全機制等。

最後,效能與可擴充套件性的提升。實際上這也是資料庫所走過的路,當前區塊鏈世界想在短短的時間之內通過側鏈、分片等機制跨過當年資料庫幾十年來的變革。

等一會我會介紹一下,從資料庫的角度看待區塊鏈,其最大的效能與擴充套件能力制約瓶頸在什麼地方,以及應當如何優化。

2)發展現狀

那我們回過頭來,看看當前區塊鏈行業的現狀。

我一直以來的觀點,拋開區塊鏈上層的一些應用與金融領域的創新,單獨從技術角度來看,其最大的革新在於對等資料儲存機制的建立。

在資料庫這個行業裡,大家一直遵從著主-從架構,而完全“多活”的系統從幾十年前的提出一直以來都是傳說中的事情,從來沒有任何產品真正做到多活。

而當我們以創新的多活資料庫來看待當前區塊鏈技術時,就會發現三個急需改進的問題。

首先,區塊鏈的體系結構現在非常混亂,大家還沒有向傳統資料庫一樣將其分類為事務、儲存過程、鑑權、主從同步等模組,大部分人對區塊鏈的認知還是停留在神祕的黑盒子階段。

第二,區塊鏈的開發語言完全不成體系。資料庫在經過開始的“戰國時代”後,漸漸使用SQL做到了業界的大一統。而區塊鏈當前明顯還處於“戰國時代”,還沒有一個統一的標準開發和使用標準。

第三,需求的多種多樣,有些需求或白皮書的業務介紹是靠譜的,有些則是完全異想天開不知所云。實際上這個和區塊鏈所帶來全新的業務模式相關,很多人還在探索新的業務模型,從而導致需求沒有形成標準正規化。

區塊鏈 vs資料庫技術,相同點


從資料庫的角度對比,區塊鏈技術即去中心化多活資料庫技術,兩者之間沒有本質區別。

這裡我列舉了一些區塊鏈裡面比較重要的技術點,以及這些技術點在資料庫領域中是以什麼形式存在的。這些概念和資料庫中的技術概念一一對應關係如下:

共識機制

一致性控制—共識機制

分散式資料庫中叫做一致性控制,包括傳統的主從複製、新一代的Raft、Paxos等演算法。在區塊鏈中為了解決額外的拜占庭問題,將演算法改進為PBFT、PoW、PoS等協議

儲存機制

資料庫日誌—賬本

區塊鏈結構基本等價於資料庫的事務日誌,其主要新增的內容包括Merkle Tree結構用於快速驗證資料的正確性,但是其本質與資料庫的交易日誌等價。同時資料庫在日誌中更會包括事務控制等企業級能力,是區塊鏈資料結構所不具備的

智慧合約

智慧合約—儲存過程

智慧合約與資料庫儲存過程一樣,都是一段託管程式碼。本質上智慧合約與資料庫儲存過程沒有什麼區別,都是通過外部呼叫或虛擬機器執行一段程式碼,並可以將託管程式碼共享給其他使用者進行呼叫

分片

資料庫分片機制早在MPP資料庫時代就已經存在。通過將大量資料切分在不同分片中,達到限制每個分片資料總量,並提升總吞吐量和儲存空間的目的

應用開發介面

當前區塊鏈還處於類似資料庫當時的早期時代,介面沒有統一標準化。根據區塊鏈專案不同,其介面可以按照資料庫、物件儲存、API呼叫、甚至PaaS平臺標準進行定義

安全

區塊鏈的安全機制與資料庫安全機制具有相似之處。資料庫安全一般分為鑑權與授權兩個模組,分別代表使用者登入以及訪問許可權。而區塊鏈當前僅支援記錄級寫授權,但是對於讀操作時完全共享的。因此,從安全策略上資料庫比當前的區塊鏈完善很多


區塊鏈 vs資料庫技術,不同點


640?wx_fmt=png

資料庫與區塊鏈功能架構圖


1)功能架構

黃色部分是區塊鏈和資料庫架構都擁有的功能。白色的部分是目前資料庫獨有的功能。

SQL我們再上文也有提及,資料庫的SQL能力是實現其通用性的重要部分,SQL對於之後區塊鏈的開發模式固定下來很重要。

索引管理這塊,在資料庫中主要是提升資料管理和資料查詢的效能效率的,當具體的應用場景出現,效能將成為下一階段需要提升的重要部分。因此,儲存的資料的索引就成為很重要的組成了。

在機制上,區塊鏈和資料庫的主要區別就如以下幾點:

2)一致性

區塊鏈的設計思想,與傳統資料庫設計思想最大的不同就在於多活,也就是去中心化這個體系下所帶來的一致性模型的區別。

傳統的關係型資料庫遵循ACID強一致模型,寫入的記錄立刻可以讀到。而一些新型分散式資料庫採用最終一致性,也就是BASE模型,寫入的資料暫時不一定讀到,但是最終一定會存在。

但是,區塊鏈,或者說去中心化資料庫的設計思路就存在明顯區別,也就是說任何操作不存在“永久確認”這個概念。即使類似比特幣,從核心原理上來看6個塊之前的內容也只是“基本不會被回退”。舉個極端的例子,如果中美之間廣域網出於什麼原因突然斷了三天,之後恢復的話比特幣一定會出現大規模分叉,這個期間如果有賬號同時在中美進行大額消費的話,想要恢復一個主鏈則一定需要犧牲很大一部分人的交易才能實現回退。

那麼,既然在對等架構中沒有辦法保障強一致,那麼區塊鏈體系中的一致性則和傳統資料庫存在本質上的區別,從而引發後續一系列設計上的不同。歸根節底,在任何傳統主從架構的資料庫模型中,人們會想盡一切方法防止叢集內出現“腦裂”,也就是同一個叢集裡面兩個節點都認為自己是主節點。但是這個問題在對等資料庫體系下時時刻刻都可能發生,而這種現象在區塊鏈裡面叫做分叉,這是和我們傳統資料庫一致性模型非常不同的地方。

3)鎖機制

其中,鎖機制可以說是區塊鏈與資料庫在保障資料一致性方面最大的區別。

所有研究過資料庫的同學不可能沒聽說過鎖。當我們做一個事務的時候,提交之前所有該會話變更的記錄都要被鎖住,不能被其他會話所修改。

而去中心化資料庫,由於每個賬本節點操作本地資料,變更資訊會非同步地傳輸出去,因此根本不存在一個全域性鎖能夠在記錄變更的時候通知其他人。因此,在無鎖的前提下,去中心化資料庫,也就是區塊鏈該怎樣保障資料一致呢?

比特幣使用的是UTXO結構,有點類似於資料庫的“樂觀鎖”的思路,也就是操作的時候不進行鎖定,只有在最後提交的過程中判斷記錄有沒有變化。

比特幣則是通過coin是否被花費的狀態來判斷是否存在交易衝突。而以太坊則是使用nonce作為每條記錄的遞增計數器來判斷是否存在針對某一賬戶的重複交易,實際上也是一種變相實現的行級鎖的機制。

4)安全機制

另一個區塊鏈業界大家談論比較多的就是安全機制。

首先,我不是加密演算法專家,因此我在這裡不去討論具體使用的加密演算法,而是從整個儲存體系的安全模型設計上,來討論一下區塊鏈技術中如何在全對等架構的體系下保障資料安全。


在我看來,區塊鏈的安全體系分為三個級別,記錄級、區塊級以及鏈級。

記錄級安全主要是判斷某一條操作記錄是否合法,在一些實現中還包括是否對不同使用者有讀可見和寫可見。


而區塊級則是當節點接收到另一個節點傳送的區塊時,如何判斷這個區塊本身沒有被篡改過,那麼通過默克爾樹、挖礦的結果等機制都可以做到。

最後,怎樣保證鏈的完整呢?比如每個資料塊需要包含鏈中上一個資料塊的校驗,以及當分叉發生時如何進行回退等,都是保障整個鏈條結構的完整。

去中心化資料庫架構

區塊鏈技術和資料庫技術的融合會形成怎麼樣的結果呢?


我們是否能夠將現有的區塊鏈以資料庫的架構進行組織,分為核心,執行庫,外掛,以及SQL解析優化等不同模組呢?


既然資料庫的核心本質依然是不可變更的事務日誌,這一部分等同於區塊鏈的鏈結構,那麼如果我們通過將SQL引擎架設在state store,甚至讓SQL引擎直接對鏈內的資料進行訪問,是不是意味著我們就擁有了一個通用的程式設計和訪問介面?


又例如,對於安全元件,我們是否可以做到列級行級表級以及節點級別的安全認證,同時可以通過配置指定哪些表需要進行數字簽名,哪些表的一些欄位是共享的,但其他欄位是需要經過多重簽名做加密的等。


另外,對於一致性來說,我們是否可以指定某些表是全域性共享表,某些表則是本地表,這樣就可以取代現在區塊鏈與資料庫混用的部署方式。


我認為,未來會出現兩者融合而成的 “去中心化資料庫”。

640?wx_fmt=png

去中心化資料庫基本功能

去中心化資料庫的基本特性:

  1. 去中心化:架構是完全的去中心化的,不存在中心的控制節點,每個節點都具備讀寫的功能,每個節點的資料都是一致的;

  2. 無全域性鎖:由於採用廣域網上的對等架構,去中心化資料庫不可能實現全域性鎖,因此係統只能使用在某種程度上弱化鎖與一致性,來滿足高可用的需求;

  3. 非固定節點生成日誌:非固定節點生成日誌,日誌是整個資料庫的日誌,在去中心化的體系結構中任何節點都有權記錄日誌,這樣就形成了去中心化沒有主節點的架構,任何節點都有機會臨時成為記賬節點出塊;

  4. 非同步事務確認:由於不存在全域性鎖,與傳統資料庫相比一些事務機制必須得到調整。將事務的提交回滾做到非同步可能是一種比較可行的思路;

  5. 一致性策略調整:在多活的區塊鏈狀態下,資料的一致性策略會與傳統的資料庫一致性機制有所不同;

  6. 行級別安全性和觸發器:對於資料安全,去中心化資料庫將會保證到行級甚至列級的資料安全性。

結語:區塊鏈和資料庫技術融合:去中心化資料庫

對於區塊鏈和傳統資料技術,我認為區塊鏈技術的未來發展,主題是“融合”!

現在區塊鏈的業務理念飛速發展,但是從技術本身來看,我認為當前區塊鏈的技術仍然和上世紀“80年代”的資料庫技術階段類似,在技術的成長期。如我們上文所提到,區塊鏈技術在通用性、標準化上還有很長的路要走。

而基於技術路線和架構設計的類似,資料庫技術與區塊鏈技術的融合其實是大勢所趨。 而通過區塊鏈技術和機制的引入,去中心化資料庫,將可能是未來技術發展的一個重要方向。 

640?wx_fmt=gif

原文釋出時間為:2018年04月05日
本文作者:區塊鏈大本營
本文來源:CSDN區塊鏈大本營,如需轉載請聯絡原作者。


相關文章