區塊鏈+數據庫,底層技術融合是否帶來更大爆發? - 王濤 | JTalk 第五期

編者按:本文系區塊鏈專家王濤講師,在掘金技術社區主辦的《給開發者的區塊鏈技術指南 | JTalk 掘金線下活動第五期》 活動上的分享整理。掘金 JTalk 目前已舉辦5期,每期 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在爲開發者提供線下技術交流互動機會,幫助開發者成長。前端

4月22日,在掘金技術社區主辦的沙龍上, 王濤以《區塊鏈技術VS數據庫技術:顛覆仍是融合》爲題作了分享。如下是JTalk演講實錄:

如今區塊鏈所說的「3.0階段」,實際上更多的是偏向於業務,從數據庫角度來看,如今區塊鏈底層技術有不少能夠提高的餘地。剛開始你們只是作一個數字貨幣,隨着合規的加入,你們能夠在上面跑一些業務。 但區塊鏈底層鏈,包括性能、處理能力、通用功能,離商業化還有很大的距離。若是把區塊鏈技術將來暢想成一個10分的東西,咱們認爲如今區塊鏈功能只是在1分到2分的級別,還有很是長的路要走。 從技術角度理解,其實區塊鏈技術就是一個特殊的分佈式多活數據庫。算法

區塊鏈技術具體有什麼樣的演進方向?

方向1:從專業化向通用化演進。 如今玩以太坊和比特幣,都是爲了專門目的設計的一套軟件,比特幣是專門爲轉帳設計的,以太坊是轉帳+智能合約,通用方面,可使用JAVA、C+ +程序,寫任何邏輯。如今區塊鏈基本是爲專有系統定製的一套軟件,而不是一個通用的軟件。數據庫

方向2:各自爲政向標準化演進。 搞區塊鏈最重要的是協議,而不是軟件,你們只要知道比特幣之間交互協議,可使用專爲比特幣設計的礦機,也能夠本身寫一套東西,只要有協議就行。如今不少人作公鏈,每一個公鏈都是獨立的通訊協議,這就會形成鏈與鏈中間通訊受到影響,能夠用跨鏈機制、側鏈機制打破這些壁壘。相信將來在整個協議層可能會有更多通用化、標準化東西。後端

方向3:產品化與模塊化不斷增強。 如今基本上大部分數據庫模塊化作的很是好,好比但願用一種特殊的加密算法,就把這個加密的庫替換原來庫就能夠,這是將來區塊鏈須要提高的地方,就是框架可以作到更好的模塊化。安全

方向4,性能與可擴展性。 針對分片、內存計算、磁盤結構等進行優化,從單點磁盤結構到多分片對等多活架構,從而使得性能發揮到極致。這一塊須要技術上繼續突破才能實現性能的提高。服務器

區塊鏈技術行業現狀:

  1. 區塊鏈體系結構沒有被統一。
  2. 區塊鏈開發語言極其混亂。
  3. 需求多種多樣,無標準使用範式。 你們在學習區塊鏈技術時,成本很高,搞一個鏈要學一套新的開發語言,這個東西可能不流行了就要換新的語言,這會有很大的問題。作傳統大數據庫的,你們用的都是SQL,比較標準化。 另外,如今區塊鏈基本尚未一個真正的殺手項目,沒有出現哪個業務必須用區塊鏈來完成,這樣你們都想嘗試,用區塊鏈在這塊玩一玩,在那塊玩一玩,試試醫療、試試物流、試試IoT,哪一個行業真正能用區塊鏈顛覆,核心價值在哪,怎麼用區塊鏈作這個事情,這些問題是將來一段時間行業裏須要去回答的,這幾點暫時是薄弱環節。

1、區塊鏈與數據庫相同點

特性:共識機制、存儲機制、智能合約、分片、應用開發接口、安全。這些實際上都是區塊鏈底層老生常談的一些模塊,對應到數據庫,有沒有一些對應的點? 共識機制。在過去數據庫架構裏,所謂一致性控制都是有一個主節點,全部寫操做會被複制到另一個存節點作高可用配置。區塊鏈上,能夠把這個體系擴展,假設主節點並非固定的,而是每10分鐘換一次,在主節點MySQL,10分鐘換一次主節點,某種程度上是相通的。無論是POW、POS所謂共識機制,真正本質是到底在一段時間以內以誰的信息爲準,這個數據庫裏是以主節點爲主,當它掛了之後,怎麼選出一個新的節點,這些都不重要,只是實現問題。網絡

存儲機制。在區塊鏈裏,存儲說的都是鏈自己這個事,你們有興趣看一下比特幣、以太坊,除了鏈自己,還有相似於狀態存儲,好比鏈很長,可能有100GB,涉及到某個帳戶屢次修改,鏈自己其實是交易日誌,記錄每一條記錄修改方式,展示形式要歸到一個數據庫裏,都是要內嵌一個小型數據庫,把最終結果放到裏面。這一套體系對應到數據庫裏,無外乎就是數據庫的存儲+事務日誌。架構

智能合約。是用戶自定義的託管程序,在數據庫裏託管程序叫存儲過程,在區塊鏈裏,本質是同樣的,最大不一樣點在於安全性方面。在數據庫裏調存儲過程,記錄最終結果,可是在區塊鏈裏,由於不可信任,記錄調用。 分片。大部分區塊鏈項目裏作得還不太成熟、不穩定,數據庫分片是很是成熟的東西,區塊鏈行業,因爲分片之間交易很難保障,大部分區塊鏈公鏈項目很難作好的分片。框架

應用開發接口。在MySQL或Oracle用SQL,無外乎寫一段應用程序,扔到系統裏,別人調用。而區塊鏈技術也須要一個統一的訪問方式,才能更好實現通用化應用。異步

安全機制。在數據庫裏,一個表單,到底誰能讀、誰能寫,有一套定義,但在區塊鏈裏,安全是行級的安全,好比在比特幣裏,至關於全局可讀,只有輸入可寫的安全配置。 從這幾塊來看,區塊鏈和數據庫的世界有不少相通之處。

數據庫共識方式。全部讀寫操做都是主節點,主節點會把信息傳給兩個從節點。在區塊鏈裏,它的主節點是隨時會變化的,好比比特幣每10分鐘作一次出塊,這是POW自我驗證,誰先算出那個數,你們廣播一把,我算出數,你們跟我看齊。這是你們競爭主節點的過程。在區塊鏈的世界,主節點是隨時跳躍的,當每個節點本身認爲本身變成主節點之後,會把一段時間以內接收到新的信息,經過區塊方式傳送給其餘節點,這個傳輸過程和咱們以前從主節點發送到從節點的方式基本也是很相似的,涉及到P2P的東西,核心本質都是同樣的。

事務日誌。數據庫裏事務日誌和區塊鏈的鏈自己就是一個事情,在區塊鏈裏,每個區塊對應到數據庫,能夠認爲對應的就是一個日誌文件。最本質的區別是在於區塊鏈同步標準以區塊爲單位,每一次主節點要把交易信息打包成區塊,這個區塊做爲交易日誌。當有任何信息之後,馬上就能夠把數據同步給其餘節點。

共識機制。

POW本質是一種自我證實的方法,就是每個節點你們都想讓別人跟本身同步,本身想成爲主節點,怎麼成爲主節點?POW方式是給你們很難的題本身去算,算完了之後,告訴你們算出來了,讓你們來驗證,若是驗證是對的,跟我看齊。好處是你們會把大部分時間花在計算過程中,而對於網絡沒什麼太大壓力。

POS正好相反,POS沒有過多自我計算的過程,至關於一大屋子人都想成爲主節點,你們經過某種方式進行投票,這種機制不須要本身去搞,但對網絡壓力很大,由於每一次投票都要設計上萬個節點競選,網絡壓力很大,因此爲何POS也不可以徹底真正解決高性能問題,由於當節點數太多,POS效率很是低。 DPOS,就是一屋子人選幾個表明,你們跟幾個表明看齊,從某種程度上是減小了網絡壓力。但怎麼信這個表明,這個表明是否是表明廣大人民的利益,是否是靠譜,這又是一個問題。

DAG,這跟咱們一直說了POW、POS是本質的區別,無論是POS仍是POW,作得都是跟我看齊的事,本質是當某一我的在一段時間以內成爲一個基準,你們跟基準點看齊。但DAG的思路是一幫菜市場大媽去傳播謠言,沒有一個基準點,當在DAG網絡裏,全部傳輸都是異步的,好處是不須要任何人成爲這個基準出塊的節點,壞處是沒有辦法作時序控制,由於每一個人討論東西順序不同。DAG惟一能作的事情就是轉帳,後面涉及到操做無外乎是加和減,若是菜市場大媽互相傳播方式,作一些高階操做,A和B兩我的先作加法再作乘法,C和D兩我的先作乘法再作加法,兩個結果不同。DAG算法裏暫時很難突破排序的問題。傳統區塊鏈鏈式結構沒有這個問題,這個節點先作加作作乘,不要緊,只要說好了,他說先加就是先加,他說先乘就是先乘,這塊是DAG網絡和傳統區塊鏈方式最大的區別。

區塊鏈鏈式結構和數據庫日誌結構是什麼樣的?

數據庫日誌結構。在一個事務裏先作一個加法操做,再作乘法操做,兩個操做之間一樣有一套指針或連接,在數據庫的日誌結構和區塊鏈結構有不少共同之處。 區塊鏈用UTXO的形式,這個並非最關鍵的點,UTXO只是一種協議的表示,在底層徹底可使用數據庫把它表示出來。對於一個數據庫裏面的結構體和區塊鏈的結構體,二者之間有不少相通的地方,徹底能夠有互換的關係。
典型區塊鏈帳本結構。區塊鏈涉及到交易活動日誌、數據狀態庫,在狀態庫基礎上增長索引。對應到數據庫裏也是如出一轍的,包括數據庫Ctransaction、數據管理部分、索引,從結構來看,看待區塊鏈底層結構和上層數據庫結構都是很是相通的。 區塊鏈與數據庫功能模塊對應關係。
區塊鏈是數據庫交易日誌,區塊鏈State Store對應數據庫的數據存儲,區塊鏈共識算法對應的是數據庫一致性算法,區塊鏈智能合約對應的是數據庫存儲過程等等。

2、區塊鏈與數據庫的不一樣

最大的不一樣是一致性。 對於數據庫來說,通常都是強一致,好比Oracle,寫入一條記錄之後,確保數據必定是存在的,而且這條數據在數據庫日誌裏確保不能被更改。在分佈式數據庫裏則是最終一致性,當寫一條記錄之後,不必定可以馬上看到這個東西,可是可以確保在將來一段時間以內這個記錄必定存在。無論強一致仍是最終一致,自己要求是寫入成功的數據必定會存在在數據庫裏某一時刻。 但區塊鏈不必定,區塊鏈可能會出現分叉,分叉完了還要作合併。好比某一我的帳戶裏有10個比特幣,在同一個時刻,在中國和美國兩個不一樣帳戶裏作交易,由於在中國和美國服務器不同,一個服務器接收我給A作交易是成功的,在第二個美國服務器接收一樣消息,轉給B的也是成功的,但這兩我的不能同時成功。在區塊鏈必定有交易成功確認過程,這在數據庫裏是沒有交易確認,只要在數據庫裏寫的東西必定能夠成功。若是在中國向A轉10個比特幣,在美國向B轉10個比特幣,假設因爲中美開戰了,中美之間網絡忽然斷掉了,可能斷了三天,三天以內,中國大陸全部比特幣交易沒有辦法通暢,這樣就會超過比特幣6塊的問題,當兩個網絡合並時就會產生分叉,若是將來去作合併時,在中國作交易,給10個比特幣,把一堆東西賣給我,在美國也同樣,這樣在線下收到20個比特幣,最後當作比特幣合併時,其中一方確定會被損失。在極端狀況下,在比特幣體系裏沒有辦法真正保證強一致,去中心化存儲裏和中心化存儲最大的區別,就是在於一致性。 爲了確保一致性,在數據庫裏用鎖,由於全部操做在主節點執行,幾個並行操做裏,結構沒有提交時會鎖住,其餘操做過來之後,必定要保證這套交易成功才能釋放這個鎖,保證繼續。 區塊鏈沒有鎖的機制,好比在中國作一筆交易之後,不可能在毫秒級或微秒級以內就把交易信息傳到美國去,若是美國對一樣記錄作操做時,就會面臨這樣問題,二者有衝突,在去中心化或多活、多主節點寫入裏,沒法保證全局鎖,這個時候怎麼確保這個東西,Oracle最終確認時,誰先提交誰成功,後面發現記錄變了,從新作一個。相對於區塊鏈,以太坊使用NAS,確保每個帳戶更有順序化,這時候從某種策略選出其中一個正確的。若是順序錯了,會把錯誤繼續。

從安全級別來說,區塊鏈有不少機制確保安全性。對於數據庫你們的想法是這個東西是跑在數據中內心的,區塊鏈基本上有一個筆記本就能夠了,因此除了確保本地安全之外,更重要的是協議層面確保其餘對等節點、相鄰節點有沒有做惡的壞人。在三個層面上確保安全,對於記錄級安全,屬於交易數字簽名、智能合約數字簽名,就是當作一筆交易時,必定要經過數字簽名來驗證賬號是否有權利修改這套記錄,經過加密,從記錄級確保修改這條記錄的人必定是本人。區塊級的安全機制,當收到塊之後怎麼確保這個塊是正確的,這個塊包括默克爾樹、挖礦校驗,這是對於區塊安全的保障。對於鏈級安全機制,怎麼確保這個鏈是靠譜的,利用前一個區塊生成校驗碼、分叉解決方案。

分片機制。傳統數據庫分片很容易,都在一個數據中心以內,若是作兩個分片之間的操做,先問全部參與交易的人是否是都準備好了,能夠提交了,確保你們都在同一個狀態下。但有一個問題,沒有辦法在多個分片之間作控制。在區塊鏈裏除非有某種機制確保不會分叉,不可能確保其中某個操做在在另外一個鏈裏將來會不會被退掉,沒有技術確保,由於鏈不具有這個功能。不是技術上操做不了,是理論上行不通。若是這麼作也會有一些方法,找到第三方中介作這個事,他來背鍋是有可能的,或者用側鏈機制、跨鏈機制。

3、區塊鏈技術和數據庫技術融合的形式

而在底層技術上,我認爲經過二者的技術融合,可能會出現「去中心化數據庫」這麼一種產品形態。 對於去中心化數據庫,其主要的技術點有一下幾個:

  1. 百分之百去中心化,是一個區塊鏈的數據庫。
  2. 沒有全局鎖。
  3. 非固定節點生成日誌,每一個節點都有可能成爲出塊的節點。
  4. 異步事務確認。
  5. 一次性策略調整。
  6. 行級安全性與觸發器。 應用場景,包括電商、金融、信用、物聯網,這些都有可能,這個形式很是好。如今的商業模式是中間商把全部人資源整合,利用整個資源提供便利性,賺中間差價,若是是區塊鏈機制,或者叫作去中心化的數據庫的機制,被廣泛應用的話,從整個商業模式上來說,不太須要資源密集型中間商,可能會把這些行業現有的商業模式解耦。 對於將來區塊鏈商業模式來講,區塊鏈將來毫不僅僅被侷限於交易這麼一個簡單的操做,咱們認爲將來會是一個去中心化的協做組織。 例如,攜程是中心化的旅遊網站,有各類各樣的資源,包括酒店、機票、旅遊景點資源,會把這些資源打包賣給要出行的各位。將來會不會有一個區塊鏈攜程或攜程區塊鏈,它的作法是統一一套體系,可讓希爾頓和長城飯店直接連到鏈裏,另外能夠找某一我的或某一個組織,專門是作網站的,專門把這個鏈裏全部資源整合起來,作成網站掛出去,至關於去中介化,不須要用攜程這樣的組織把全部的資源統一塊兒來賣差價,而是讓全部的人都自發參與到去中心化組織裏,來達到商業目的。 咱們認爲區塊鏈將來是去中心化協做,而不只僅只是交易這麼一套東西。 基本就是這些,謝謝!

以上是《給開發者的區塊鏈技術指南 | JTalk 掘金線下活動第五期》 講師王濤的分享,若是你對掘金的 JTalk 線下活動感興趣,能夠關注掘金活動頁面的 JTalk 活動報名。掘金 JTalk 目前已舉辦5期,每個月一期的 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在爲開發者提供線下技術交流互動機會,幫助開發者成長。

JTalk 預告

JTalk 第六期即將在杭州舉辦。

  • 主題:從前端到「後端」
  • 時間:5.20
相關文章
相關標籤/搜索