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