王濤:區(qū)塊鏈+數(shù)據(jù)庫,底層技術(shù)融合是否帶來更大爆發(fā)?
4月22日,在掘金技術(shù)社區(qū)主辦的沙龍上,王濤以《區(qū)塊鏈技術(shù)VS數(shù)據(jù)庫技術(shù):顛覆還是融合》為題做了分享。王濤曾就職于 IBM DB2 數(shù)據(jù)庫北美實(shí)驗(yàn)室,作為 IBM DB2 全球***技術(shù)專家小組的成員,參與了 IBM 下一代大數(shù)據(jù)平臺的架構(gòu)規(guī)劃,精通數(shù)據(jù)庫內(nèi)核及體系結(jié)構(gòu),是數(shù)據(jù)庫領(lǐng)域國際***的專家。在 IBM 多倫多實(shí)驗(yàn)室工作了八年后,王濤選擇了回國創(chuàng)業(yè)。在這次演講中,他從技術(shù)角度介紹了區(qū)塊鏈和傳統(tǒng)數(shù)據(jù)庫的異同,以及未來技術(shù)融合的方向。
以下為王濤的演講精編,由巴比特整理。
現(xiàn)在區(qū)塊鏈所說的“3.0階段”,實(shí)際上更多的是偏向于業(yè)務(wù),從數(shù)據(jù)庫角度來看,現(xiàn)在區(qū)塊鏈底層技術(shù)有很多可以提升的余地。剛開始大家只是做一個數(shù)字貨幣,隨著合規(guī)的加入,大家可以在上面跑一些業(yè)務(wù)。
但區(qū)塊鏈底層鏈,包括性能、處理能力、通用功能,離商業(yè)化還有很大的距離。如果把區(qū)塊鏈技術(shù)未來暢想成一個10分的東西,我們認(rèn)為現(xiàn)在區(qū)塊鏈功能只是在1分到2分的級別,還有非常長的路要走。
從技術(shù)角度理解,其實(shí)區(qū)塊鏈技術(shù)就是一個特殊的分布式多活數(shù)據(jù)庫。
區(qū)塊鏈技術(shù)具體有什么樣的演進(jìn)方向?
方向1:從專業(yè)化向通用化演進(jìn)。
現(xiàn)在玩以太坊和比特幣,都是為了專門目的設(shè)計的一套軟件,比特幣是專門為轉(zhuǎn)賬設(shè)計的,以太坊是轉(zhuǎn)賬+智能合約,通用方面,可以使用JAVA、C++程序,寫任何邏輯。現(xiàn)在區(qū)塊鏈基本是為專有系統(tǒng)定制的一套軟件,而不是一個通用的軟件。
方向2:各自為政向標(biāo)準(zhǔn)化演進(jìn)。
搞區(qū)塊鏈最重要的是協(xié)議,而不是軟件,大家只要知道比特幣之間交互協(xié)議,可以使用專為比特幣設(shè)計的礦機(jī),也可以自己寫一套東西,只要有協(xié)議就行?,F(xiàn)在很多人做公鏈,每個公鏈都是獨(dú)立的通信協(xié)議,這就會造成鏈與鏈中間通信受到影響,可以用跨鏈機(jī)制、側(cè)鏈機(jī)制打破這些壁壘。相信未來在整個協(xié)議層可能會有更多通用化、標(biāo)準(zhǔn)化東西。
方向3:產(chǎn)品化與模塊化不斷加強(qiáng)。
現(xiàn)在基本上大部分?jǐn)?shù)據(jù)庫模塊化做的非常好,比如希望用一種特殊的加密算法,就把這個加密的庫替換原來庫就可以,這是未來區(qū)塊鏈需要提升的地方,就是框架能夠做到更好的模塊化。
方向4,性能與可擴(kuò)展性。
針對分片、內(nèi)存計算、磁盤結(jié)構(gòu)等進(jìn)行優(yōu)化,從單點(diǎn)磁盤結(jié)構(gòu)到多分片對等多活架構(gòu),從而使得性能發(fā)揮到***。這一塊需要技術(shù)上繼續(xù)突破才能實(shí)現(xiàn)性能的提升。
區(qū)塊鏈技術(shù)行業(yè)現(xiàn)狀:
1.區(qū)塊鏈體系結(jié)構(gòu)沒有被統(tǒng)一。
2.區(qū)塊鏈開發(fā)語言極其混亂。
3.需求多種多樣,無標(biāo)準(zhǔn)使用范式。
大家在學(xué)習(xí)區(qū)塊鏈技術(shù)時,成本很高,搞一個鏈要學(xué)一套新的開發(fā)語言,這個東西可能不流行了就要換新的語言,這會有很大的問題。做傳統(tǒng)大數(shù)據(jù)庫的,大家用的都是SQL,比較標(biāo)準(zhǔn)化。
另外,現(xiàn)在區(qū)塊鏈基本還沒有一個真正的殺手項(xiàng)目,沒有出現(xiàn)哪一個業(yè)務(wù)必須用區(qū)塊鏈來完成,這樣大家都想嘗試,用區(qū)塊鏈在這塊玩一玩,在那塊玩一玩,試試醫(yī)療、試試物流、試試IoT,哪個行業(yè)真正能用區(qū)塊鏈顛覆,核心價值在哪,怎么用區(qū)塊鏈做這個事情,這些問題是未來一段時間行業(yè)里需要去回答的,這幾點(diǎn)暫時是薄弱環(huán)節(jié)。
一、區(qū)塊鏈與數(shù)據(jù)庫相同點(diǎn)
特性:共識機(jī)制、存儲機(jī)制、智能合約、分片、應(yīng)用開發(fā)接口、安全。這些實(shí)際上都是區(qū)塊鏈底層老生常談的一些模塊,對應(yīng)到數(shù)據(jù)庫,有沒有一些對應(yīng)的點(diǎn)?
共識機(jī)制。在過去數(shù)據(jù)庫架構(gòu)里,所謂一致性控制都是有一個主節(jié)點(diǎn),所有寫操作會被復(fù)制到另外一個存節(jié)點(diǎn)做高可用配置。區(qū)塊鏈上,可以把這個體系擴(kuò)展,假設(shè)主節(jié)點(diǎn)并不是固定的,而是每10分鐘換一次,在主節(jié)點(diǎn)MySQL,10分鐘換一次主節(jié)點(diǎn),某種程度上是相通的。不管是POW、POS所謂共識機(jī)制,真正本質(zhì)是到底在一段時間之內(nèi)以誰的信息為準(zhǔn),這個數(shù)據(jù)庫里是以主節(jié)點(diǎn)為主,當(dāng)它掛了以后,怎么選出一個新的節(jié)點(diǎn),這些都不重要,只是實(shí)現(xiàn)問題。
存儲機(jī)制。在區(qū)塊鏈里,存儲說的都是鏈本身這個事,大家有興趣看一下比特幣、以太坊,除了鏈本身,還有類似于狀態(tài)存儲,比如鏈很長,可能有100GB,涉及到某個賬戶多次修改,鏈本身實(shí)際上是交易日志,記錄每一條記錄修改方式,展現(xiàn)形式要?dú)w到一個數(shù)據(jù)庫里,都是要內(nèi)嵌一個小型數(shù)據(jù)庫,把最終結(jié)果放到里面。這一套體系對應(yīng)到數(shù)據(jù)庫里,無外乎就是數(shù)據(jù)庫的存儲+事務(wù)日志。
智能合約。是用戶自定義的托管程序,在數(shù)據(jù)庫里托管程序叫存儲過程,在區(qū)塊鏈里,本質(zhì)是一樣的,***不同點(diǎn)在于安全性方面。在數(shù)據(jù)庫里調(diào)存儲過程,記錄最終結(jié)果,但是在區(qū)塊鏈里,因?yàn)椴豢尚湃危涗浾{(diào)用。
分片。大部分區(qū)塊鏈項(xiàng)目里做得還不太成熟、不穩(wěn)定,數(shù)據(jù)庫分片是非常成熟的東西,區(qū)塊鏈行業(yè),由于分片之間交易很難保障,大部分區(qū)塊鏈公鏈項(xiàng)目很難做好的分片。
應(yīng)用開發(fā)接口。在MySQL或Oracle用SQL,無外乎寫一段應(yīng)用程序,扔到系統(tǒng)里,別人調(diào)用。而區(qū)塊鏈技術(shù)也需要一個統(tǒng)一的訪問方式,才能更好實(shí)現(xiàn)通用化應(yīng)用。
安全機(jī)制。在數(shù)據(jù)庫里,一個表單,到底誰能讀、誰能寫,有一套定義,但在區(qū)塊鏈里,安全是行級的安全,比如在比特幣里,相當(dāng)于全局可讀,只有輸入可寫的安全配置。
從這幾塊來看,區(qū)塊鏈和數(shù)據(jù)庫的世界有很多相通之處。
數(shù)據(jù)庫共識方式。所有讀寫操作都是主節(jié)點(diǎn),主節(jié)點(diǎn)會把信息傳給兩個從節(jié)點(diǎn)。在區(qū)塊鏈里,它的主節(jié)點(diǎn)是隨時會變化的,比如比特幣每10分鐘做一次出塊,這是POW自我驗(yàn)證,誰先算出那個數(shù),大家廣播一把,我算出數(shù),大家跟我看齊。這是大家競爭主節(jié)點(diǎn)的過程。在區(qū)塊鏈的世界,主節(jié)點(diǎn)是隨時跳躍的,當(dāng)每一個節(jié)點(diǎn)自己認(rèn)為自己變成主節(jié)點(diǎn)以后,會把一段時間之內(nèi)接收到新的信息,通過區(qū)塊方式傳送給其他節(jié)點(diǎn),這個傳輸過程和我們之前從主節(jié)點(diǎn)發(fā)送到從節(jié)點(diǎn)的方式基本也是很類似的,涉及到P2P的東西,核心本質(zhì)都是一樣的。
事務(wù)日志。數(shù)據(jù)庫里事務(wù)日志和區(qū)塊鏈的鏈本身就是一個事情,在區(qū)塊鏈里,每一個區(qū)塊對應(yīng)到數(shù)據(jù)庫,可以認(rèn)為對應(yīng)的就是一個日志文件。最本質(zhì)的區(qū)別是在于區(qū)塊鏈同步標(biāo)準(zhǔn)以區(qū)塊為單位,每一次主節(jié)點(diǎn)要把交易信息打包成區(qū)塊,這個區(qū)塊作為交易日志。當(dāng)有任何信息以后,立刻就可以把數(shù)據(jù)同步給其他節(jié)點(diǎn)。
共識機(jī)制。
POW本質(zhì)是一種自我證明的方法,就是每一個節(jié)點(diǎn)大家都想讓別人跟自己同步,自己想成為主節(jié)點(diǎn),怎么成為主節(jié)點(diǎn)?POW方式是給大家很難的題自己去算,算完了以后,告訴大家算出來了,讓大家來驗(yàn)證,如果驗(yàn)證是對的,跟我看齊。好處是大家會把大部分時間花在計算過程當(dāng)中,而對于網(wǎng)絡(luò)沒什么太大壓力。
POS正好相反,POS沒有過多自我計算的過程,相當(dāng)于一大屋子人都想成為主節(jié)點(diǎn),大家通過某種方式進(jìn)行投票,這種機(jī)制不需要自己去搞,但對網(wǎng)絡(luò)壓力很大,因?yàn)槊恳淮瓮镀倍家O(shè)計上萬個節(jié)點(diǎn)競選,網(wǎng)絡(luò)壓力很大,所以為什么POS也不能夠完全真正解決高性能問題,因?yàn)楫?dāng)節(jié)點(diǎn)數(shù)太多,POS效率非常低。
DPOS,就是一屋子人選幾個代表,大家跟幾個代表看齊,從某種程度上是減少了網(wǎng)絡(luò)壓力。但怎么信這個代表,這個代表是不是代表廣大人民的利益,是不是靠譜,這又是一個問題。
DAG,這跟我們一直說了POW、POS是本質(zhì)的區(qū)別,不管是POS還是POW,做得都是跟我看齊的事,本質(zhì)是當(dāng)某一個人在一段時間之內(nèi)成為一個基準(zhǔn),大家跟基準(zhǔn)點(diǎn)看齊。但DAG的思路是一幫菜市場大媽去傳播謠言,沒有一個基準(zhǔn)點(diǎn),當(dāng)在DAG網(wǎng)絡(luò)里,所有傳輸都是異步的,好處是不需要任何人成為這個基準(zhǔn)出塊的節(jié)點(diǎn),壞處是沒有辦法做時序控制,因?yàn)槊總€人討論東西順序不一樣。DAG唯一能做的事情就是轉(zhuǎn)賬,后面涉及到操作無外乎是加和減,如果菜市場大媽互相傳播方式,做一些高階操作,A和B兩個人先做加法再做乘法,C和D兩個人先做乘法再做加法,兩個結(jié)果不一樣。DAG算法里暫時很難突破排序的問題。傳統(tǒng)區(qū)塊鏈鏈?zhǔn)浇Y(jié)構(gòu)沒有這個問題,這個節(jié)點(diǎn)先做加做做乘,沒關(guān)系,只要說好了,他說先加就是先加,他說先乘就是先乘,這塊是DAG網(wǎng)絡(luò)和傳統(tǒng)區(qū)塊鏈方式***的區(qū)別。
區(qū)塊鏈鏈?zhǔn)浇Y(jié)構(gòu)和數(shù)據(jù)庫日志結(jié)構(gòu)是什么樣的?
數(shù)據(jù)庫日志結(jié)構(gòu)。在一個事務(wù)里先做一個加法操作,再做乘法操作,兩個操作之間同樣有一套指針或鏈接,在數(shù)據(jù)庫的日志結(jié)構(gòu)和區(qū)塊鏈結(jié)構(gòu)有很多共同之處。
區(qū)塊鏈用UTXO的形式,這個并不是最關(guān)鍵的點(diǎn),UTXO只是一種協(xié)議的表示,在底層完全可以使用數(shù)據(jù)庫把它表示出來。對于一個數(shù)據(jù)庫里面的結(jié)構(gòu)體和區(qū)塊鏈的結(jié)構(gòu)體,兩者之間有很多相通的地方,完全可以有互換的關(guān)系。
典型區(qū)塊鏈賬本結(jié)構(gòu)。區(qū)塊鏈涉及到交易活動日志、數(shù)據(jù)狀態(tài)庫,在狀態(tài)庫基礎(chǔ)上增加索引。對應(yīng)到數(shù)據(jù)庫里也是一模一樣的,包括數(shù)據(jù)庫Ctransaction、數(shù)據(jù)管理部分、索引,從結(jié)構(gòu)來看,看待區(qū)塊鏈底層結(jié)構(gòu)和上層數(shù)據(jù)庫結(jié)構(gòu)都是非常相通的。
區(qū)塊鏈與數(shù)據(jù)庫功能模塊對應(yīng)關(guān)系。
區(qū)塊鏈?zhǔn)菙?shù)據(jù)庫交易日志,區(qū)塊鏈State Store對應(yīng)數(shù)據(jù)庫的數(shù)據(jù)存儲,區(qū)塊鏈共識算法對應(yīng)的是數(shù)據(jù)庫一致性算法,區(qū)塊鏈智能合約對應(yīng)的是數(shù)據(jù)庫存儲過程等等。
二、區(qū)塊鏈與數(shù)據(jù)庫的不同
***的不同是一致性。
對于數(shù)據(jù)庫來講,一般都是強(qiáng)一致,比如Oracle,寫入一條記錄以后,確保數(shù)據(jù)一定是存在的,并且這條數(shù)據(jù)在數(shù)據(jù)庫日志里確保不能被更改。在分布式數(shù)據(jù)庫里則是最終一致性,當(dāng)寫一條記錄以后,不一定能夠立刻看到這個東西,但是能夠確保在未來一段時間之內(nèi)這個記錄一定存在。不管強(qiáng)一致還是最終一致,本身要求是寫入成功的數(shù)據(jù)一定會存在在數(shù)據(jù)庫里某一時刻。
但區(qū)塊鏈不一定,區(qū)塊鏈可能會出現(xiàn)分叉,分叉完了還要做合并。比如某一個人賬戶里有10個比特幣,在同一個時刻,在中國和美國兩個不同賬戶里做交易,因?yàn)樵谥袊兔绹?wù)器不一樣,一個服務(wù)器接收我給A做交易是成功的,在第二個美國服務(wù)器接收同樣消息,轉(zhuǎn)給B的也是成功的,但這兩個人不能同時成功。在區(qū)塊鏈一定有交易成功確認(rèn)過程,這在數(shù)據(jù)庫里是沒有交易確認(rèn),只要在數(shù)據(jù)庫里寫的東西一定可以成功。如果在中國向A轉(zhuǎn)10個比特幣,在美國向B轉(zhuǎn)10個比特幣,假設(shè)由于中美開戰(zhàn)了,中美之間網(wǎng)絡(luò)突然斷掉了,可能斷了三天,三天之內(nèi),中國大陸所有比特幣交易沒有辦法通暢,這樣就會超過比特幣6塊的問題,當(dāng)兩個網(wǎng)絡(luò)合并時就會產(chǎn)生分叉,如果未來去做合并時,在中國做交易,給10個比特幣,把一堆東西賣給我,在美國也一樣,這樣在線下收到20個比特幣,***當(dāng)做比特幣合并時,其中一方肯定會被損失。在極端情況下,在比特幣體系里沒有辦法真正保證強(qiáng)一致,去中心化存儲里和中心化存儲***的區(qū)別,就是在于一致性。
為了確保一致性,在數(shù)據(jù)庫里用鎖,因?yàn)樗胁僮髟谥鞴?jié)點(diǎn)執(zhí)行,幾個并行操作里,結(jié)構(gòu)沒有提交時會鎖住,其他操作過來以后,一定要保證這套交易成功才能釋放這個鎖,保證繼續(xù)。
區(qū)塊鏈沒有鎖的機(jī)制,比如在中國做一筆交易以后,不可能在毫秒級或微秒級之內(nèi)就把交易信息傳到美國去,如果美國對同樣記錄做操作時,就會面臨這樣問題,兩者有沖突,在去中心化或多活、多主節(jié)點(diǎn)寫入里,無法保證全局鎖,這個時候怎么確保這個東西,Oracle最終確認(rèn)時,誰先提交誰成功,后面發(fā)現(xiàn)記錄變了,重新做一個。相對于區(qū)塊鏈,以太坊使用NAS,確保每一個賬戶更有順序化,這時候從某種策略選出其中一個正確的。如果順序錯了,會把錯誤繼續(xù)。
從安全級別來講,區(qū)塊鏈有很多機(jī)制確保安全性。對于數(shù)據(jù)庫大家的想法是這個東西是跑在數(shù)據(jù)中心里的,區(qū)塊鏈基本上有一個筆記本就可以了,所以除了確保本地安全以外,更重要的是協(xié)議層面確保其他對等節(jié)點(diǎn)、相鄰節(jié)點(diǎn)有沒有作惡的壞人。在三個層面上確保安全,對于記錄級安全,屬于交易數(shù)字簽名、智能合約數(shù)字簽名,就是當(dāng)做一筆交易時,一定要通過數(shù)字簽名來驗(yàn)證帳號是否有權(quán)利修改這套記錄,通過加密,從記錄級確保修改這條記錄的人一定是本人。區(qū)塊級的安全機(jī)制,當(dāng)收到塊以后怎么確保這個塊是正確的,這個塊包括默克爾樹、挖礦校驗(yàn),這是對于區(qū)塊安全的保障。對于鏈級安全機(jī)制,怎么確保這個鏈?zhǔn)强孔V的,利用前一個區(qū)塊生成校驗(yàn)碼、分叉解決方案。
分片機(jī)制。傳統(tǒng)數(shù)據(jù)庫分片很容易,都在一個數(shù)據(jù)中心之內(nèi),如果做兩個分片之間的操作,先問所有參與交易的人是不是都準(zhǔn)備好了,可以提交了,確保大家都在同一個狀態(tài)下。但有一個問題,沒有辦法在多個分片之間做控制。在區(qū)塊鏈里除非有某種機(jī)制確保不會分叉,不可能確保其中某個操作在在另一個鏈里未來會不會被退掉,沒有技術(shù)確保,因?yàn)殒湶痪邆溥@個功能。不是技術(shù)上操作不了,是理論上行不通。如果這么做也會有一些方法,找到第三方中介做這個事,他來背鍋是有可能的,或者用側(cè)鏈機(jī)制、跨鏈機(jī)制。
三、區(qū)塊鏈技術(shù)和數(shù)據(jù)庫技術(shù)融合的形式
而在底層技術(shù)上,我認(rèn)為通過兩者的技術(shù)融合,可能會出現(xiàn)“去中心化數(shù)據(jù)庫”這么一種產(chǎn)品形態(tài)。
對于去中心化數(shù)據(jù)庫,其主要的技術(shù)點(diǎn)有一下幾個:
1.***去中心化,是一個區(qū)塊鏈的數(shù)據(jù)庫。
2.沒有全局鎖。
3.非固定節(jié)點(diǎn)生成日志,每個節(jié)點(diǎn)都有可能成為出塊的節(jié)點(diǎn)。
4.異步事務(wù)確認(rèn)。
5.一次性策略調(diào)整。
6.行級安全性與觸發(fā)器。
應(yīng)用場景,包括電商、金融、信用、物聯(lián)網(wǎng),這些都有可能,這個形式非常好?,F(xiàn)在的商業(yè)模式是中間商把所有人資源整合,利用整個資源提供便利性,賺中間差價,如果是區(qū)塊鏈機(jī)制,或者叫做去中心化的數(shù)據(jù)庫的機(jī)制,被普遍應(yīng)用的話,從整個商業(yè)模式上來講,不太需要資源密集型中間商,可能會把這些行業(yè)現(xiàn)有的商業(yè)模式解耦。
對于未來區(qū)塊鏈商業(yè)模式來說,區(qū)塊鏈未來絕不僅僅被局限于交易這么一個簡單的操作,我們認(rèn)為未來會是一個去中心化的協(xié)作組織。
例如,攜程是中心化的旅游網(wǎng)站,有各種各樣的資源,包括酒店、機(jī)票、旅游景點(diǎn)資源,會把這些資源打包賣給要出行的各位。未來會不會有一個區(qū)塊鏈攜程或攜程區(qū)塊鏈,它的做法是統(tǒng)一一套體系,可以讓希爾頓和長城飯店直接連到鏈里,另外可以找某一個人或某一個組織,專門是做網(wǎng)站的,專門把這個鏈里所有資源整合起來,做成網(wǎng)站掛出去,相當(dāng)于去中介化,不需要用攜程這樣的組織把所有的資源統(tǒng)一起來賣差價,而是讓所有的人都自發(fā)參與到去中心化組織里,來達(dá)到商業(yè)目的。
我們認(rèn)為區(qū)塊鏈未來是去中心化協(xié)作,而不僅僅只是交易這么一套東西。
基本就是這些,謝謝!