區(qū)塊鏈技術(shù)點(diǎn)解析區(qū)塊鏈
基于分布式數(shù)據(jù)庫來理解區(qū)塊鏈,認(rèn)清區(qū)塊鏈技術(shù)常見的一些困惑和誤區(qū),可以讓大家對區(qū)塊鏈有個比較正確的理解方式。
區(qū)塊鏈技術(shù)是基于比特幣應(yīng)用提出的一個概念,他是一個融合了多種技術(shù)的一個集成式創(chuàng)新。目前區(qū)塊鏈的應(yīng)用早已不僅僅局限在比特幣上。
人們在談?wù)摶蚴褂谩皡^(qū)塊鏈”這個詞時,有時候是指技術(shù)的商業(yè)應(yīng)用,有時是指技術(shù)實(shí)現(xiàn)本身。
區(qū)塊鏈的技術(shù)特征:(1)多副本、(2)可靠記錄、(3)不可篡改、(4)多方透明幾個特性,上述特性總結(jié)下來,采用區(qū)塊鏈技術(shù)后,應(yīng)用技術(shù)架構(gòu)如下圖所示,可以看出,區(qū)塊鏈技術(shù)對應(yīng)用而言,就是一個分布式數(shù)據(jù)庫:
一、從分布式數(shù)據(jù)庫的基本概念理解區(qū)塊鏈技術(shù) 和區(qū)塊鏈技術(shù)比,分布式數(shù)據(jù)庫的概念顯然更容易被理解,我就從分布式數(shù)據(jù)庫的一些基本概念出發(fā),理解區(qū)塊鏈的技術(shù)實(shí)現(xiàn),這些概念包括數(shù)據(jù)存儲、點(diǎn)對點(diǎn)可靠傳輸、存儲過程與觸發(fā)器(智能合約)、數(shù)據(jù)安全:
1、分布式數(shù)據(jù)存儲
區(qū)塊鏈技術(shù)的數(shù)據(jù)共享是一個分布式的記賬簿,交易記錄具備多個副本,因此首先要解決分布式數(shù)據(jù)存儲的問題。
1)區(qū)塊鏈存儲的基本單元是區(qū)塊,區(qū)塊采用鏈?zhǔn)浇Y(jié)構(gòu),即新增的區(qū)塊(類似數(shù)據(jù)庫一行記錄)都知道自己前一個區(qū)塊(前一行記錄)是什么,可以一直追溯到根,區(qū)塊的標(biāo)識是區(qū)塊的哈希值,同時鏈?zhǔn)浇Y(jié)構(gòu)保留了業(yè)務(wù)產(chǎn)生的軌跡,可以在新增交易的時候根據(jù)前面的記錄做校驗(yàn),保證了區(qū)塊的內(nèi)容不容易篡改。 這種模式,我們在傳統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)也會采用,例如拉鏈表的形式,每次對數(shù)據(jù)的更新都采用追加( Insert而不是Update)模式,有起始時間、失效時間和是否生效標(biāo)識,保持全部交易歷史。區(qū)塊鏈把這一點(diǎn)變成了一種底層固有模式,加入了哈希、時間戳等機(jī)制在技術(shù)上保證鏈條的正確性,因此非常有價值。
2)既然是分布式、多中心的存儲方式,就必須解決存儲時的分布式一致性問題。在區(qū)塊鏈的前身比特幣應(yīng)用中,解決這一問題的方式是工作量證明(POW Proof-Of-Work)方式,即通過工作以獲得指定成。果,用成果來證明曾經(jīng)付出的努力。這也是接觸區(qū)塊鏈技術(shù)時第一個比較迷惑的地方,我為啥一定要用工作量來證明,是不是還有其他方式?區(qū)塊鏈技術(shù)從比特幣中獨(dú)立出來后,大家把這一問題歸結(jié)為共識問題,工作量證明是達(dá)成共識的一種方式,這樣就清晰多了。 于是就產(chǎn)生了權(quán)益證明(POS Proof of Stake)方式,是一種通過業(yè)務(wù)規(guī)則達(dá)成共識的方式;實(shí)用拜占庭容錯(PBFT Practical Byzantine Fault Tolerance)方式,是一種通過技術(shù)規(guī)則達(dá)成共識的機(jī)制。在公有鏈上,工作量證明(POW)還是一種最主要的共識方式,不容易取代,但在聯(lián)盟鏈上,完全可以根據(jù)自己的情況,創(chuàng)造出新的共識方式出來。我們就根據(jù)這一想法,在特定業(yè)務(wù)中創(chuàng)造過共識算法,解決分布式數(shù)據(jù)存儲的一致性問題,以后有機(jī)會再展開說。
2、點(diǎn)對點(diǎn)可靠傳輸 區(qū)塊鏈技術(shù)是一組技術(shù)的組合,既然是一個分布式的記賬簿,就要解決數(shù)據(jù)可靠傳輸問題。包括記賬節(jié)點(diǎn)(信任節(jié)點(diǎn))之間、非記賬節(jié)點(diǎn)(非信任節(jié)點(diǎn))、客戶端與記賬節(jié)點(diǎn)(信任節(jié)點(diǎn))之間的數(shù)據(jù)傳輸。在以前我們的方案中,往往通過可靠消息或者P2P方式解決數(shù)據(jù)傳輸問題,這些技術(shù)也被用于區(qū)塊鏈技術(shù)中。 但必須說明的是,在真實(shí)業(yè)務(wù)場景下,不可能把所有的數(shù)據(jù)都記錄在記賬簿中,部分業(yè)務(wù)數(shù)據(jù)還是要保存在自己的系統(tǒng)中,這就還需要在技術(shù)框架上做到本地業(yè)務(wù)數(shù)據(jù)與區(qū)塊鏈的記賬簿保持一致,后面微服務(wù)架構(gòu)與區(qū)塊鏈技術(shù)整合時會具體闡述,總之,區(qū)塊鏈平臺只能保證自身數(shù)據(jù)之間的一致,業(yè)務(wù)不能完全依賴區(qū)塊鏈平臺保證數(shù)據(jù)一致性。
3、智能合約:觸發(fā)器與存儲過程 智能合約是指當(dāng)一定條件滿足的情況下,可以被自動執(zhí)行的數(shù)字化合約。實(shí)現(xiàn)這一特性,在數(shù)據(jù)庫中就是由觸發(fā)器和存儲過程完成的。雖然在目前流行的應(yīng)用架構(gòu)中,都不建議把邏輯寫在存儲過程中,但觸發(fā)器和存儲過程還是常用的工具,尤其在數(shù)據(jù)遷移相關(guān)的運(yùn)維活動中。區(qū)塊鏈技術(shù)中智能合約就是觸發(fā)器和存儲過程,他是一個在沙箱中運(yùn)行的腳本,用于執(zhí)行區(qū)塊鏈業(yè)務(wù)中的業(yè)務(wù)邏輯,也可以用于各種檢查。 舉個例子,A產(chǎn)生一筆支付時,可以通過智能合約在數(shù)據(jù)鏈上進(jìn)行檢查,如果發(fā)現(xiàn)A的余額無法支付這筆交易,就可以中止這筆交易。和存儲過程相比,智能合約運(yùn)行在沙箱之中,不能對外部 API 做調(diào)用。這也比較好理解,如果允許外部調(diào)用,就可能無法保證自身的數(shù)據(jù)一致性,后面我們會講到這種缺陷如何彌補(bǔ)。美中不足的是目前的智能合約并不支持 SQL 語法。
4、數(shù)據(jù)安全 交易數(shù)據(jù)是透明的,但不是全部透明,而是相對透明,這是區(qū)塊鏈技術(shù)的一個難點(diǎn),關(guān)鍵有二:
(1)如何保護(hù)隱私,僅僅能看到自己可見的數(shù)據(jù);
(2)密鑰分配問題,例如新加入鏈中的一個節(jié)點(diǎn)會被分配一個新的密鑰,如何用這個密鑰解讀以前鏈中存儲的信息。可見與不可見,這是一個矛盾,理論上沒有一個完美的方案,這里我不對區(qū)塊鏈技術(shù)如何加密、如何做密鑰管理、如何同態(tài)加密等方式做解讀,而是講講如何通過業(yè)務(wù)方法而不是技術(shù)手段規(guī)避這一問題。 舉個例子,在一個小企業(yè)支付的聯(lián)盟鏈中,核心企業(yè)包括某銀行、企業(yè)A,為A的上下游企業(yè)提供信貸業(yè)務(wù),對于所有交易的數(shù)據(jù),銀行和核心企業(yè)A都是可見的,他們擁有記賬節(jié)點(diǎn),對于其他加盟企業(yè),只擁有非記賬節(jié)點(diǎn),他們雖然也有全部的數(shù)據(jù),但是只能看到自己相關(guān)的數(shù)據(jù)。
很明顯,加盟企業(yè)放棄了自己的部分隱私權(quán),但也得到了生意的機(jī)會,這種方式加盟企業(yè)是可以接受的,就好比貸款企業(yè)要向銀行提供經(jīng)營數(shù)據(jù)一樣。數(shù)據(jù)安全問題,在技術(shù)上很難解決,但通過業(yè)務(wù)手段是可以規(guī)避的,這也是我們看好聯(lián)盟鏈的重要原因。
二、理解區(qū)塊鏈技術(shù)常見的幾個困惑
困惑1:比特幣是區(qū)塊鏈技術(shù)的一個應(yīng)用,不能把比特幣應(yīng)用的所有內(nèi)容都?xì)w結(jié)為區(qū)塊鏈技術(shù) 上文提到,區(qū)塊鏈技術(shù)從比特幣中獨(dú)立出來是 2014 年左右的事情,此前每每舉出區(qū)塊鏈的案例都是比特幣,給區(qū)塊鏈技術(shù)的應(yīng)用造成了很多誤解。我建議先了解區(qū)塊鏈技術(shù),再了解比特幣,先理解聯(lián)盟鏈的業(yè)務(wù)場景,再了解公有鏈的業(yè)務(wù)場景,公有鏈看作是聯(lián)盟鏈的一種大規(guī)模延展,,可以少走一些彎路。
困惑2:公有鏈情況下數(shù)據(jù)存儲性能不高,但聯(lián)盟鏈的性能可以遠(yuǎn)高于公有鏈,能滿足多數(shù)場景的要求 數(shù)據(jù)一致性問題是分布式存儲最大的問題,而并發(fā)越高,沖突的概率就越大。區(qū)塊鏈技術(shù)之所以能支持的每秒交易數(shù)(TPS)不高,主要是共識機(jī)制比較復(fù)雜,或者說共識機(jī)制就是刻意為了降低并發(fā)性,減少數(shù)據(jù)沖突的概率。 在公有鏈上,這是一個無法逾越的問題,只能從事實(shí)時性要求不敏感的業(yè)務(wù)。但是,在聯(lián)盟鏈中,由于鏈中的參與方并不多,也不需要每個節(jié)點(diǎn)都記賬,就可以使用一些性能更高的共識機(jī)制,例如前面說的PBFT。我們曾經(jīng)嘗試過一種全對等的算法,可以支持更高的性能。
困惑3:應(yīng)用區(qū)塊鏈技術(shù)不一定必須有礦工來挖礦
初次接觸區(qū)塊鏈技術(shù),礦工/挖礦這個概念讓人非常費(fèi)解: (1)為什么一定要挖礦? (2)為什么要給記賬成功的節(jié)點(diǎn)獎勵比特幣來鼓勵記賬? (3)非比特幣的業(yè)務(wù)中如何鼓勵記賬? 這個困惑歸根結(jié)底還是把區(qū)塊鏈和比特幣混淆造成的。前面說過,挖礦是通過工作量證明(POW)達(dá)成共識的機(jī)制,挖礦能力愈強(qiáng)就取得了記錄權(quán)。更重要的是比特幣的貨幣屬性,發(fā)行貨幣要么靠國家信用(例如紙幣),要么靠奇缺資源(例如黃金),比特幣為了防止濫發(fā),就需要用算力做為一種奇缺資源。 這樣說來,比特幣實(shí)際上把共識算法、貨幣屬性、鼓勵記賬這幾件事都用挖礦來解決了,思路確實(shí)精妙。但是,在業(yè)務(wù)規(guī)則不同的聯(lián)盟鏈中就不一樣了,除了有其他更高效的共識算法外,不需要奇缺資源,不需要專門對記賬做鼓勵,因?yàn)楸仨氂涃~已經(jīng)是核心企業(yè)之間的契約,可以通過技術(shù)手段保證數(shù)據(jù)的同步,支持審計(jì)等能力,自然就不需要挖礦了。 困惑4:目前應(yīng)用區(qū)塊鏈技術(shù)不是去中心,而是多中心。
去中心是一個理想,經(jīng)常有人問,為什么要去中心?去中心有什么好處?真的能去中心嗎?后來,我深入研究聯(lián)盟鏈的場景時發(fā)現(xiàn),實(shí)際的業(yè)務(wù)場景大多是多中心(這又是比特幣惹的禍,他真的想去中心),例如上述的企業(yè)聯(lián)盟方式,幾個建立聯(lián)盟的核心企業(yè)就是多中心,他們共同成為一個新的中心。傳統(tǒng)方式建立新的中心,往往通過建立清算機(jī)構(gòu)的方式,而區(qū)塊鏈技術(shù)讓建立中心的成本降低了。
困惑5:不是所有的區(qū)塊鏈節(jié)點(diǎn)都是記賬節(jié)點(diǎn),很多節(jié)點(diǎn)僅僅用來進(jìn)行數(shù)據(jù)同步而已 多中心就意味著不是每個節(jié)點(diǎn)都需要記賬,記賬的工作由幾個中心節(jié)點(diǎn)負(fù)責(zé)就可以了,其他節(jié)點(diǎn)與記賬節(jié)點(diǎn)間是數(shù)據(jù)同步的關(guān)系,也就是非記賬節(jié)點(diǎn)上也有全部數(shù)據(jù)。聯(lián)盟鏈中非記賬節(jié)點(diǎn)一般處在加盟企業(yè),由于數(shù)據(jù)可見性的要求,非記賬節(jié)點(diǎn)中的數(shù)據(jù)并不是都可見的,但是這一副本可以做為一種法律依據(jù),提高了篡改數(shù)據(jù)的成本。
總結(jié)
從數(shù)據(jù)的角度來看,區(qū)塊鏈本質(zhì)是一種分布式數(shù)據(jù)庫,這里的“分布式”是指區(qū)塊鏈技術(shù)利用鏈?zhǔn)酱鎯Y(jié)構(gòu)不僅解決了分布式數(shù)據(jù)存儲問題,也解決了存儲時的分布式一致性問題。區(qū)塊鏈技術(shù)利用分布式記賬簿保證數(shù)據(jù)可靠傳輸和訪問,利用可自動執(zhí)行的智能合約來編程和操作數(shù)據(jù)。所以,我認(rèn)為,基于分布式數(shù)據(jù)庫來理解區(qū)塊鏈,認(rèn)清區(qū)塊鏈技術(shù)常見的一些困惑和誤區(qū),可以讓大家對區(qū)塊鏈有個比較正確的理解方式。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。