1. 程式人生 > >區塊鏈技術的本質是分散式資料庫

區塊鏈技術的本質是分散式資料庫

本文轉自微訊號EAWorld。掃描下方二維碼,關注成功後,回覆“普元方法+”,將會獲得熱門課堂免費學習機會!
《當微服務撞上區塊鏈》系列微課分為:
1、區塊鏈的業務價值是通過資料共享降低信任成本
2、區塊鏈的本質是分散式資料庫(本文)
3、區塊鏈與微服務是天生的一對

區塊鏈技術是基於比特幣應用提出的一個概念,他是一個融合了多種技術的一個整合式創新。目前區塊鏈的應用早已不僅僅侷限在比特幣上。人們在談論或使用“區塊鏈”這個詞時,有時候是指技術的商業應用,有時是指技術實現本身。

在《區塊鏈的業務價值是通過資料共享降低信任成本》一文中,我論述了應用區塊鏈技術的商業價值,有在多方參與的場景下更適合採用區塊鏈技術,也提到了區塊鏈的技術特徵:(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:不是所有的區塊鏈節點都是記賬節點,很多節點僅僅用來進行資料同步而已

多中心就意味著不是每個節點都需要記賬,記賬的工作由幾個中心節點負責就可以了,其他節點與記賬節點間是資料同步的關係,也就是非記賬節點上也有全部資料。聯盟鏈中非記賬節點一般處在加盟企業,由於資料可見性的要求,非記賬節點中的資料並不是都可見的,但是這一副本可以做為一種法律依據,提高了篡改資料的成本。

三、總結

從資料的角度來看,區塊鏈本質是一種分散式資料庫,這裡的“分散式”是指區塊鏈技術利用鏈式儲存結構不僅解決了分散式資料儲存問題,也解決了儲存時的分散式一致性問題。區塊鏈技術利用分散式記賬簿保證資料可靠傳輸和訪問,利用可自動執行的智慧合約來程式設計和操作資料。所以,我認為,基於分散式資料庫來理解區塊鏈,認清區塊鏈技術常見的一些困惑和誤區,可以讓大家對區塊鏈有個比較正確的理解方式。

採用區塊鏈技術後,應用技術架構是什麼,與微服務架構的關係,現有應用如何進行遷移?下節微課我會為大家逐一詳細介紹。

關於作者
焦烈焱
EAII-企業架構創新研究院 常務理事
2001年加入普元資訊,現任CTO,全面負責普元資訊科技與產品的運營工作,公司技術發展戰略的重要決策人。焦烈焱在企業技術架構研究方面有二十餘年的經驗,長期致力於分散式環境的企業計算、 SOA與雲端計算技術研究與實踐。加入普元資訊後組織完成一系列核心產品的研發工作,包括SOA應用平臺、以BPM &/ESB為核心的業務整合平臺、以複雜事件處理/資料治理/作業排程為核心的大資料平臺,期間主持了中國工商銀行、中國建設銀行等多家大型企業技術平臺的規劃與研發。著有《SOA中國路線圖—實施版》一書。
圖片描述

關於EAWorld
微服務,DevOps,元資料,企業架構原創技術分享,EAii(Enterprise Architecture Innovation Institute)企業架構創新研究院旗下官方微信公眾號。

掃描下方二維碼,關注成功後,回覆“普元方法+”,將會獲得熱門課堂免費學習機會!
微訊號:EAWorld。
圖片描述

全新形態的PWorld2017盛大開啟,首四場定於7月1日在北京、上海、廣州、成都四城同步舉行。CSDN專項報名通道可獲得現場伴手禮個性T恤一件!