天天看點

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

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

王濤簡介:

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

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

以下為王濤的分享實錄:

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

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

區塊鍊技術現狀

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

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

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

1)技術演進路程

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

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

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

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

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

2)發展現狀

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

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

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

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

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

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

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

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

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

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

共識機制

一緻性控制—共識機制

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

存儲機制

資料庫日志—賬本

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

智能合約

智能合約---存儲過程

智能合約與資料庫存儲過程一樣,都是一段托管代碼。本質上智能合約與資料庫存儲過程沒有什麼差別,都是通過外部調用或虛拟機執行一段代碼,并可以将托管代碼共享給其他使用者進行調用

分片

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

應用開發接口

目前區塊鍊還處于類似資料庫當時的早期時代,接口沒有統一标準化。根據區塊鍊項目不同,其接口可以按照資料庫、對象存儲、API調用、甚至PaaS平台标準進行定義

安全

區塊鍊的安全機制與資料庫安全機制具有相似之處。資料庫安全一般分為鑒權與授權兩個子產品,分别代表使用者登入以及通路權限。而區塊鍊目前僅支援記錄級寫授權,但是對于讀操作時完全共享的。是以,從安全政策上資料庫比目前的區塊鍊完善很多

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

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

1)功能架構

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

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

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

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

2)一緻性

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

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

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

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

3)鎖機制

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

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

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

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

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

4)安全機制

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

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

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

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

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

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

去中心化資料庫架構

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

我們是否能夠将現有的區塊鍊以資料庫的架構進行組織,分為核心,運作庫,插件,以及SQL解析優化等不同子產品呢?

既然資料庫的核心本質依然是不可變更的事務日志,這一部分等同于區塊鍊的鍊結構,那麼如果我們通過将SQL引擎架設在state store,甚至讓SQL引擎直接對鍊内的資料進行通路,是不是意味着我們就擁有了一個通用的程式設計和通路接口?

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

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

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

去中心化資料庫基本功能

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

  1. 去中心化:架構是完全的去中心化的,不存在中心的控制節點,每個節點都具備讀寫的功能,每個節點的資料都是一緻的;
  2. 無全局鎖:由于采用廣域網上的對等架構,去中心化資料庫不可能實作全局鎖,是以系統隻能使用在某種程度上弱化鎖與一緻性,來滿足高可用的需求;
  3. 非固定節點生成日志:非固定節點生成日志,日志是整個資料庫的日志,在去中心化的體系結構中任何節點都有權記錄日志,這樣就形成了去中心化沒有主節點的架構,任何節點都有機會臨時成為記賬節點出塊;
  4. 異步事務确認:由于不存在全局鎖,與傳統資料庫相比一些事務機制必須得到調整。将事務的送出復原做到異步可能是一種比較可行的思路;
  5. 一緻性政策調整:在多活的區塊鍊狀态下,資料的一緻性政策會與傳統的資料庫一緻性機制有所不同;
  6. 行級别安全性和觸發器:對于資料安全,去中心化資料庫将會保證到行級甚至列級的資料安全性。

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

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

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

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

原文釋出時間為:2018年04月05日

本文作者:區塊鍊大學營

本文來源:

CSDN區塊鍊大學營

,如需轉載請聯系原作者。