巨杉資料庫王濤:區塊鏈觀點兩極分化,程式設計師應關注其技術本質

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

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

區塊鏈技術其實就是一個特殊的多活分散式資料庫,既不是萬能的也不是一無是處的,和所有技術一樣都有特定的適用場景,大家也需要在技術角度客觀的看待這個問題。


記者 | 鴿子

最近,隨著區塊鏈技術在各大媒體上大肆報導,人們對區塊鏈的態度分為兩級。

一種看法是百分百的擁護和信奉,將“去中心化”時時刻刻掛在嘴邊,好像只要去了中心化,整個地球就和平了,人類就超脫昇華了。而另一種看法則來自“古典”的技術派,認為區塊鏈就是炒作,“去中心化”沒有任何實際應用價值,僅僅是用來投機的一種方式,完全嗤之以鼻。

在從事多年資料庫工作的巨杉資料庫CTO王濤看來,這兩種看法都是不負責任的。

在他看來,目前業界的程式設計師基本對區塊鏈的理解還停留在“小夥子在廣場對姑娘說我愛你,讓所有人記錄下來”的層面。這種說法作為講給大媽聽的故事不錯,但是從技術人員的角度來看,這實際上是一種非常不靠譜的理解,將區塊鏈中的一些精髓設計給掩蓋起來了。

那麼,傳統IT從業者到底應該如何從本質來理解區塊鏈的技術原理呢?區塊鏈與資料庫到底是什麼關係?區塊鏈在當前到底有什麼實實在在的技術應用場景?

帶著這些問題,區塊鏈大本營特別採訪到巨杉資料庫CTO王濤,希望他能詳細解答我們的疑問。

區塊鏈大本營:在您看來,現在區塊鏈的很多介紹文章都給完全走偏了,那麼問題來了,從傳統IT的角度到底應該如何區塊鏈的技術原理?

王濤:現在網上一大堆講區塊鏈的文章,可是真正能把區塊鏈技術底層精髓的設計思路和重點講明白的沒幾篇。這對於我們搞技術的人來說,挺不能接受的。我做資料庫核心開發行業已經從業15年了,也算老兵,我想從資料庫的角度來說說區塊鏈的本質,以及其與現有資料庫儲存體系中核心的設計思想的區別所在吧。

先從巨集觀看,區塊鏈和分散式資料庫的原理、機制這些幾乎是一致的。區塊鏈這一技術的原理其實並不非常複雜,而且與資料庫技術的很多原理是一脈相承的。

那麼從最本質的功能來看,不管是資料庫還是區塊鏈,都是用來存資料的技術。因此,區塊鏈的概念可能引申出了很多商業方面的革新,但是拋開這些上層建築,從底層地基來看,區塊鏈可以認為是一種特殊的資料庫技術。

對於傳統資料庫來說,經歷了網狀資料庫、層次型資料庫以後,從上世紀八十年代以來,關係型資料庫一直處於業界統治地位,在所有資料儲存體系裡是食物鏈最上層的“霸王龍”。所有學計算機的同學們在大學裡學到的就是關係型資料庫,在工作裡用到的MySQL、Oracle也是關係型資料庫,因此可能會產生“資料庫就是SQL和表結構”這樣的誤解。

640?wx_fmt=png

實際上,資料庫只是一種用來儲存和查詢資料的工具,僅此而已。SQL是一種大家用的比較多的手段,而當前除了SQL業界還有NoSQL、NewSQL等一大堆變形。因此,大家先把思路放寬,將“資料庫”的概念擴充套件到一切可以儲存與獲取資料的機制。

那麼來看區塊鏈技術,不管是比特幣還是以太坊,或者其他變體,其核心本質都是面向交易業務的資料儲存於讀取能力。

在之後的一系列文章裡我會詳細介紹“去中心化”的設計原理和機制,但是現在大家把它看做是一個擁有很多分拷貝的潘多拉魔盒,只要往裡寫了東西就可以很快速地在其他拷貝中顯現出來。從資料庫的角度來看,這就是所有資料庫從業人員幾十年來一直追求的異地多活機制。

因此,區塊鏈技術即異地多活資料庫技術,是各位程式設計師同學理解區塊鏈本質的核心思想。

區塊鏈大本營:區塊鏈技術和傳統資料庫在機制中的有哪些相同點和不同點呢?先說說相同點吧。

王濤:如果大家瞭解資料庫核心結構,可以看到區塊鏈的核心架構是資料庫核心架構一個子集。

區塊鏈的“賬本”就相當於資料庫的“日誌”,資料庫是將操作按照順序寫入日誌,在區塊鏈裡面叫做賬本。

區塊鏈技術的設計和機制,與傳統資料庫的核心理念極為相似。譬如,從其傳輸和儲存的資料結構上來看,區塊鏈的鏈式結構來源於傳統資料庫的事務日誌。任何資料庫的DBA都知道,資料庫的事務日誌本質上就是不可更改的鏈式結構,事務中的每一條操作記錄都會有一個反向指標指向該事務中的上一條記錄。因此,區塊鏈的鏈式結構本質上脫胎於資料庫事務日誌,同時增加了區塊之間的反向雜湊值作為指標,且引入了默克爾樹結構進行快速資料校驗。

因而,我們可以安全地進行認為:區塊鏈的鏈式結構在儲存體系中等價於資料庫的事務日誌。本質上資料庫的任何操作同樣是不可篡改的,只不過當前大部分資料庫不會對外暴露事務日誌的解析工具,僅儲存每一條記錄的最終狀態而已。

此外,區塊鏈的共識部分也脫胎自資料庫的一致性管理機制。比如傳統資料庫的主從結構(例如IBM DB2的HADR、Oracle的DataGuard)就是在多個節點之間實時複製資料的一種方式。

當然,和區塊鏈比起來這種方式一方面是做不到傳說中的“去中心化”,另一方面只能有一個節點作為主節點負責讀寫,其他節點作為從節點只讀,而無法完全做到異地多主多活的拓撲結構。

而分散式資料庫(如NoSQL)使用了多副本自動選舉的機制,業界大家都在談論的Paxos、Raft就是典型的多副本一致性管理演算法,與區塊鏈中PBFT等機制存在異曲同工之處。

所以區塊鏈更像是一類擁有特定架構併為特定目的而設計的分散式資料庫。

區塊鏈大本營:區塊鏈技術在和傳統資料庫兩者機制中的不同點又是什麼呢?

王濤:區塊鏈與傳統資料庫的本質相同,而所有的不同點都來自於“去中心化”,也就是“異地多活”這個前提。

就好像新型分散式資料庫與傳統資料庫相比,所有的設計變更都來自於“PC伺服器內建盤替代外接盤陣”這個前提。區塊鏈技術中不論是UTXO、nonce、PoW、PoS、數字簽名等一系列聽起來很“高大上”的東西,其目的都是圍繞著解決“異地多活”這個困擾著資料庫行業專家20多年的硬骨頭來設計的。

我們先簡單從事務與一致性演算法這兩個方面,來看看區塊鏈與資料庫技術的核心差異在哪裡。

從事務功能來看,資料庫的事務機制就是為了保障通用場景下的一致性原子操作。而區塊鏈技術為了滿足異地多活的前提,將原子操作通過特殊的事務日誌結構,拋棄了通用業務場景,而是百分百集中到支付與結算業務,從而實現了結算場景下的異地多活原子操作。

舉個例子,比特幣使用的UTXO結構在跨遠距離網段的多活架構中,是一種替代傳統事務交易日誌結構的方式,將幾個操作合併在一條事務記錄裡面作為原子操作傳送,而不是每條記錄的更改都作為獨立的記錄,並通過反向指標串聯起來。同時,UTXO並不儲存每條記錄的最終結果,而是儲存變更過程,這與傳統資料庫中事務日誌的儲存機制有著理念上的區別,之後我們會詳細討論為什麼在區塊鏈模型中使用UTXO的價值所在與侷限性,以及如果採用傳統日誌方式所引發的侷限性和可能的解決方案。

實際上,和傳統事務機制比起來UTXO的理念並不複雜,同時目前UTXO對於通用事務來說侷限性很大,無法用於非支付類業務的場景,但是這種思路未來也許會成為多活資料庫中支援通用事務的一種基礎,值得所有資料庫領域的從業人員深入思考。

當然,當前的UTXO結構的執行效率優化也是很大的問題。像在比特幣當前的程式碼實現中,CTxMemPool物件中存在大量的持有全域性鎖函式。由於UTXO需要追蹤每一個coin的花費流程,在記憶體中形成一個巨大的樹狀模型,因此絕大部分需要跟蹤交易的操作都需要對記憶體池進行全域性鎖定,導致執行效率相對低下。相比起傳統資料庫緩衝池的資料頁模型,比特幣的UTXO實現方式有待進行大量優化和提升。

而共識部分則對應著傳統的一致性演算法,也就是解決“誰應該寫”的問題。

現在用的什麼PoW、PoS、DPoS、PBFT之類的演算法,其實就對應了資料庫的一致性演算法,本質上就是決定誰來作為永久化日誌儲存的基準。在多活架構中既然每個節點都能進行寫入操作,為了讓大家達成一致必須在某個時刻向一個節點看齊。這個時間跨度是像比特幣那樣每十分鐘,還是像以太坊那樣每十幾秒,還有用什麼方式決定誰是這個基準節點,就是所謂共識演算法的核心。

對於“誰應該寫”的衍生問題,就是“寫的東西是不是真實”。這個問題在傳統資料庫體系是預設排除的。

區塊鏈的共識演算法另一個需要解決的問題就是拜占庭問題。如今,鏈在公網上,並不知道其他對等節點是不是靠譜的,這才是共識演算法難以得到突破的關鍵。既要滿足功能層面的需求,還要從演算法上保證不靠譜的個別節點不會影響整個網路的一致性共識。

其他的數字簽名之類的都是小特性,基本搞IT的兄弟都很明白,在這裡就不多說了。

區塊鏈大本營:作為資料庫和分散式技術的專家,您如何看待區塊鏈技術的發展?

王濤:現在“古典”和“區塊鏈”的概念大家吵的很火熱,在技術領域也不例外。

經過一段時間的深入瞭解,我看到作為第一批區塊鏈技術的實現,傳統比特幣與以太坊在共識機制、儲存機制、智慧合約機制、跨鏈通訊機制等領域並沒有非常嚴密的設計。

這些技術的不嚴密,就引發了一些在資料庫與儲存領域比較常見的問題,導致其資料規模無法無限增加,比如當前ETH幾百GB就產生了嚴重的效能瓶頸,幾乎不可能到達上百TB規模,吞吐量極為有限,這樣單位吞吐量基本上沒辦法適應通用分散式資料儲存或通用結算體系的要求。

從產品功能的角度看,當前的區塊鏈產品與資料庫相比存在極大的差距。尤其是對於在業界存在了幾十年的關係型資料庫,其主要核心功能包括增刪改查,而主要結構則包括SQL解析、日誌、資料管理、以及索引管理幾大模組。因此從功能上看,當前區塊鏈可以說是一個極簡的多活資料庫模型,功能支援僅僅是資料庫的一個微小子集。

現在的區塊鏈技術還處於0.1版本的時代,就好像80年代各個資料庫技術百家爭鳴的年代一樣,各自都在提出新的架構和觀點。

因此,當我們使用變化的眼光來看待區塊鏈的時候,很多當前的問題實際上並不是不可解決的。例如每秒鐘3筆交易的比特幣技術,是不是意味著UTXO模型不行呢?當然不是。

我們只有當正確理解每一個設計的核心思想以及其侷限性,才能用動態發展的眼光看待新技術,瞭解掩藏在不同產品特性後面的深層次本質與原理。

所以我認為,區塊鏈技術的未來發展,主題是“融合”。就好像之前NoSQL與NewSQL之爭,最終也都演進到兩者融合成為Multi-Model Database一樣,在區塊鏈與傳統資料庫技術越來越多互相融合後,最終會形成一個更有效的資料管理體系。

區塊鏈大本營:分散式資料庫和區塊鏈技術的融合,到底能解決什麼問題?

王濤:分散式資料庫和區塊鏈技術的融合,我認為兩者結合點非常非常多。

區塊鏈彌補了原有資料庫機制的多活之間事務的難點,其創新在於支援多活架構。全世界無數傳統資料庫專家,從上世紀90年代就開始研究分散式多活資料庫,但是到現在也沒有任何成型的理論和實現,在最近二十年一直無法突破的領域。

在區塊鏈技術上,它拋開了強一致和通用事務能力,在對交易和結算領域使用特定的資料結構與演算法實現了這種機制,實際上是一種非常跨時代的思路,絕對值得所有資料庫行業的從業者借鑑和反思。

而分散式資料庫就將發揮其特性,包括資料的擴充套件性、高併發、高效能以及快速的標準化訪問還有更靈活的使用場景。

通過兩者技術結合,將會形成資料庫為基礎的去中心化管理機制。通過分散式資料庫,提供了通用的事務支援,高併發、高效能以及所有包括增刪改查、SQL解析、日誌、資料管理、索引管理等主要功能。而對區塊鏈技術的融合,

將解決多活資料庫的“雙花問題”也就是一致性控制的問題,還能解決公網內的信任問題以及整個資料的更高安全性。

如果想用現實的場景來舉例,就不得不將區塊鏈和業務模式捆綁到一起。其實可以這樣簡單來看,凡是需要使用到異地多活機制的儲存,原則上都可以使用區塊鏈技術來完成。當然,這麼說有點粗暴,裡面還涉及到一大堆例如強一致性、吞吐量之類的需求,但是為了簡單起見大家可以先這麼理解。

舉例來說,如果把淘寶看做是中心化設計的一個巔峰,全球最大的百貨商店,所有開網店的店主都要求著阿里爸爸給自己首頁推薦,那麼去中心化的淘寶可以認為是,只要想要開網店的小姑娘,通過下載一個“區塊鏈淘寶”的系統,就可以免費自由地向這個本地資料庫寫入自己要開網店的資訊,並把需要賣的東西掛到商店裡。然後這個系統通過區塊鏈技術與網上其他所有店長的系統相連,這樣小姑娘就可以不需要花任何“租金”就能開網店啦。同時每一筆交易也“沒有中間商賺差價”,從而完全免除了“店大欺客”所帶來的危害。

區塊鏈大本營:說說你們正在做的事情,未來巨杉這邊對於區塊鏈技術這塊的方向規劃大概是怎麼樣的?

王濤:正如上文所說的模式,巨杉資料庫通過分散式擴充性、高效能高併發以及SQL支援等重要特性,目前已經成功的在一些區塊鏈的應用中得到使用。同時通過我們自身技術團隊在資料庫、分散式架構等等領域的豐富經驗,巨杉也在區塊鏈演算法上進行了創新,並且將兩者進行了有機的結合,可以說正在逐漸實現我們所提到的兩種技術融合的過程。

此外,巨杉資料庫基於在企業級市場的豐富經驗,還將會通過技術融合,讓更多的使用者更好的應用區塊鏈技術。

我們巨杉接下來一段時間的產品線設計已經受到了區塊鏈技術的很多啟發,未來大家可能會看到資料庫與區塊鏈技術更加完美的結合。

區塊鏈大本營:如果傳統IT人想入門或者融合區塊鏈的技術理念,您有什麼好的建議呢?

王濤:搭建測試環境,看程式碼,gdb跟蹤,真正沉下心死磕某一個區塊鏈底鏈,把裡面的機制理解透徹。作為入門教材,大家可以看看比特幣的程式碼。比如將bitcoind編譯完了搭建個測試網路,從頭一步步跟蹤程式碼流程,是深入理解PoW、UTXO等機制最有效的方式。

而且我認為,最好的瞭解辦法就是閱讀這幾個演算法、機制相關的論文資料。因為這些才是設計者真實設計理念、原理的嚴謹記錄,所謂的“解讀”和“翻譯”很可能會忽略了一些部分或者曲解了一些最初的意思。

另外,從我本人的經驗來看,閱讀開源專案的開發者指南和程式碼,是最好的理解產品設計思想的方式。

後記:


以上是巨杉資料庫CTO王濤,從資料庫角度解釋區塊鏈,對於區塊鏈技術的分享,如果你沒有聽夠,還想了解更多,希望王濤能更多講講區塊鏈的技術精髓和實戰,請在留言區發表你的期待,我們將根據你的期待,邀請王濤為你帶來更多精準的技術分享。

640?wx_fmt=png

王濤:SequoiaDB巨杉資料庫的聯合創始人&CTO

 

王濤曾是北美IBM DB2 Lab核心研發成員,有著超過十年的資料庫核心架構設計,資料庫引擎研發和企業級資料庫應用的經驗。王濤同時對區塊鏈技術,分散式架構,分散式演算法,區塊鏈以及去中心化業務應用有著深入的瞭解。

 

2012年公司成立以來,王濤先生一直主導著SequoiaDB產品的架構設計與開發,並在業界對未來資料庫、大資料、區塊鏈技術發展進行全力地推動。

 

王濤作為SequoiaDB巨杉資料庫的兩位創始人之一,目前擔任SequoiaDB的CTO與總架構師。在王濤先生的領導下,SequoiaDB的技術團隊從零開始打造的分散式資料庫,如今SequoiaDB目前已經擁有超過30家大型銀行使用者,以及近百家企業使用者,並已經在多個銀行核心系統投入生產,並於2017年入選國際技術分析機構Gartner的資料庫年度報告。

640?wx_fmt=gif

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


相關文章