鏈客,專爲開發者而生,有問必答!算法
此文章來自區塊鏈技術社區,未經容許拒絕轉載。
數據庫
區塊鏈技術是基於比特幣應用提出的一個概念,他是一個融合了多種技術的一個集成式創新。目前區塊鏈的應用早已不只僅侷限在比特幣上。人們在談論或使用「區塊鏈」這個詞時,有時候是指技術的商業應用,有時是指技術實現自己。編程
在《區塊鏈的業務價值是經過數據共享下降信任成本》一文中,我論述了應用區塊鏈技術的商業價值,有在多方參與的場景下更適合採用區塊鏈技術,也提到了區塊鏈的技術特徵:(1)多副本、(2)可靠記錄、(3)不可篡改、(4)多方透明幾個特性,上述特性總結下來,採用區塊鏈技術後,應用技術架構以下圖所示,能夠看出,區塊鏈技術對應用而言,就是一個分佈式數據庫(估計看到我這個結論,不少磚就要拍過來了,請你們拍磚的同時繼續看),我一一說來:安全
1、從分佈式數據庫的基本概念理解區塊鏈技術架構
和區塊鏈技術比,分佈式數據庫的概念顯然更容易被理解,我就從分佈式數據庫的一些基本概念出發,理解區塊鏈的技術實現,這些概念包括數據存儲、點對點可靠傳輸、存儲過程與觸發器(智能合約)、數據安全:併發
一、分佈式數據存儲框架
區塊鏈技術的數據共享是一個分佈式的記帳簿,交易記錄具有多個副本,所以首先要解決分佈式數據存儲的問題。運維
1)區塊鏈存儲的基本單元是區塊,區塊採用鏈式結構,即新增的區塊(相似數據庫一行記錄)都知道本身前一個區塊(前一行記錄)是什麼,能夠一直追溯到根,區塊的標識是區塊的哈希值,同時鏈式結構保留了業務產生的軌跡,能夠在新增交易的時候根據前面的記錄作校驗,保證了區塊的內容不容易篡改。數據庫設計
這種模式,咱們在傳統的數據庫設計也會採用,例如拉鍊表的形式,每次對數據的更新都採用追加( Insert而不是Update)模式,有起始時間、失效時間和是否生效標識,保持所有交易歷史。區塊鏈把這一點變成了一種底層固有模式,加入了哈希、時間戳等機制在技術上保證鏈條的正確性,所以很是有價值。分佈式
2)既然是分佈式、多中心的存儲方式,就必須解決存儲時的分佈式一致性問題。在區塊鏈的前身比特幣應用中,解決這一問題的方式是工做量證實(POW Proof-Of-Work)方式,即經過工做以得到指定成果,用成果來證實曾經付出的努力。這也是接觸區塊鏈技術時第一個比較迷惑的地方,我爲啥必定要用工做量來證實,是否是還有其餘方式?區塊鏈技術從比特幣中獨立出來後,你們把這一問題歸結爲共識問題,工做量證實是達成共識的一種方式,這樣就清晰多了。
因而就產生了權益證實(POS Proof of Stake)方式,是一種經過業務規則達成共識的方式;實用拜占庭容錯(PBFT Practical Byzantine Fault Tolerance)方式,是一種經過技術規則達成共識的機制。在公有鏈上,工做量證實(POW)仍是一種最主要的共識方式,不容易取代,但在聯盟鏈上,徹底能夠根據本身的狀況,創造出新的共識方式出來。咱們就根據這一想法,在特定業務中創造過共識算法,解決分佈式數據存儲的一致性問題,之後有機會再展開說。
二、點對點可靠傳輸
區塊鏈技術是一組技術的組合,既然是一個分佈式的記帳簿,就要解決數據可靠傳輸問題。包括記帳節點(信任節點)之間、非記帳節點(非信任節點)、客戶端與記帳節點(信任節點)之間的數據傳輸。在之前咱們的方案中,每每經過可靠消息或者P2P方式解決數據傳輸問題,這些技術也被用於區塊鏈技術中。
但必須說明的是,在真實業務場景下,不可能把全部的數據都記錄在記帳簿中,部分業務數據仍是要保存在本身的系統中,這就還須要在技術框架上作到本地業務數據與區塊鏈的記帳簿保持一致,後面微服務架構與區塊鏈技術整合時會具體闡述,總之,區塊鏈平臺只能保證自身數據之間的一致,業務不能徹底依賴區塊鏈平臺保證數據一致性。
三、智能合約:觸發器與存儲過程
智能合約是指當必定條件知足的狀況下,能夠被自動執行的數字化合約。實現這一特性,在數據庫中就是由觸發器和存儲過程完成的。雖然在目前流行的應用架構中,都不建議把邏輯寫在存儲過程當中,但觸發器和存儲過程仍是經常使用的工具,尤爲在數據遷移相關的運維活動中。區塊鏈技術中智能合約就是觸發器和存儲過程,他是一個在沙箱中運行的腳本,用於執行區塊鏈業務中的業務邏輯,也能夠用於各類檢查。
舉個例子,A產生一筆支付時,能夠經過智能合約在數據鏈上進行檢查,若是發現A的餘額沒法支付這筆交易,就能夠停止這筆交易。和存儲過程相比,智能合約運行在沙箱之中,不能對外部 API 作調用。這也比較好理解,若是容許外部調用,就可能沒法保證自身的數據一致性,後面咱們會講到這種缺陷如何彌補。美中不足的是目前的智能合約並不支持 SQL 語法。
四、數據安全
交易數據是透明的,但不是所有透明,而是相對透明,這是區塊鏈技術的一個難點,關鍵有二:(1)如何保護隱私,僅僅能看到本身可見的數據;(2)密鑰分配問題,例如新加入鏈中的一個節點會被分配一個新的密鑰,如何用這個密鑰解讀之前鏈中存儲的信息。可見與不可見,這是一個矛盾,理論上沒有一個完美的方案,這裏我不對區塊鏈技術如何加密、如何作密鑰管理、如何同態加密等方式作解讀,而是講講如何經過業務方法而不是技術手段規避這一問題。
舉個例子,在一個小企業支付的聯盟鏈中,核心企業包括某銀行、企業A,爲A的上下游企業提供信貸業務,對於全部交易的數據,銀行和核心企業A都是可見的,他們擁有記帳節點,對於其餘加盟企業,只擁有非記帳節點,他們雖然也有所有的數據,可是隻能看到本身相關的數據。
很明顯,加盟企業放棄了本身的部分隱私權,但也獲得了生意的機會,這種方式加盟企業是能夠接受的,就比如貸款企業要向銀行提供經營數據同樣。數據安全問題,在技術上很難解決,但經過業務手段是能夠規避的,這也是咱們看好聯盟鏈的重要緣由。
2、理解區塊鏈技術常見的幾個困惑
從剛剛接觸區塊鏈技術的一頭霧水,到概念的逐步清晰,再到區塊鏈應用的研發,經歷不少困惑,這裏列出幾個常見的困惑。
困惑1:比特幣是區塊鏈技術的一個應用,不能把比特幣應用的全部內容都歸結爲區塊鏈技術
上文提到,區塊鏈技術從比特幣中獨立出來是 2014 年左右的事情,此前往往舉出區塊鏈的案例都是比特幣,給區塊鏈技術的應用形成了不少誤解。我建議先了解區塊鏈技術,再瞭解比特幣,先理解聯盟鏈的業務場景,再瞭解公有鏈的業務場景,公有鏈看做是聯盟鏈的一種大規模延展,,能夠少走一些彎路。
困惑2:公有鏈狀況下數據存儲性能不高,但聯盟鏈的性能能夠遠高於公有鏈,能知足多數場景的要求
數據一致性問題是分佈式存儲最大的問題,而併發越高,衝突的機率就越大。區塊鏈技術之因此能支持的每秒交易數(TPS)不高,主要是共識機制比較複雜,或者說共識機制就是刻意爲了下降併發性,減小數據衝突的機率。
在公有鏈上,這是一個沒法逾越的問題,只能從事實時性要求不敏感的業務。可是,在聯盟鏈中,因爲鏈中的參與方並很少,也不須要每一個節點都記帳,就可使用一些性能更高的共識機制,例如前面說的PBFT。咱們曾經嘗試過一種全對等的算法,能夠支持更高的性能。
困惑3:應用區塊鏈技術不必定必須有礦工來挖礦
初次接觸區塊鏈技術,礦工/挖礦這個概念讓人很是費解:
(1)爲何必定要挖礦?
(2)爲何要給記帳成功的節點獎勵比特幣來鼓勵記帳?
(3)非比特幣的業務中如何鼓勵記帳?
這個困惑歸根結底仍是把區塊鏈和比特幣混淆形成的。前面說過,挖礦是經過工做量證實(POW)達成共識的機制,挖礦能力愈強就取得了記錄權。更重要的是比特幣的貨幣屬性,發行貨幣要麼靠國家信用(例如紙幣),要麼靠奇缺資源(例如黃金),比特幣爲了防止濫發,就須要用算力作爲一種奇缺資源。
這樣說來,比特幣實際上把共識算法、貨幣屬性、鼓勵記帳這幾件事都用挖礦來解決了,思路確實精妙。可是,在業務規則不一樣的聯盟鏈中就不同了,除了有其餘更高效的共識算法外,不須要奇缺資源,不須要專門對記帳作鼓勵,由於必須記帳已是核心企業之間的契約,能夠經過技術手段保證數據的同步,支持審計等能力,天然就不須要挖礦了。
困惑4:目前應用區塊鏈技術不是去中心,而是多中心
去中心是一個理想,常常有人問,爲何要去中心?去中心有什麼好處?真的能去中心嗎?後來,我深刻研究聯盟鏈的場景時發現,實際的業務場景大可能是多中心(這又是比特幣惹的禍,他真的想去中心),例如上述的企業聯盟方式,幾個創建聯盟的核心企業就是多中心,他們共同成爲一個新的中心。傳統方式創建新的中心,每每經過創建清算機構的方式,而區塊鏈技術讓創建中心的成本下降了。
困惑5:不是全部的區塊鏈節點都是記帳節點,不少節點僅僅用來進行數據同步而已
多中心就意味着不是每一個節點都須要記帳,記帳的工做由幾個中心節點負責就能夠了,其餘節點與記帳節點間是數據同步的關係,也就是非記帳節點上也有所有數據。聯盟鏈中非記帳節點通常處在加盟企業,因爲數據可見性的要求,非記帳節點中的數據並非均可見的,可是這一副本能夠作爲一種法律依據,提升了篡改數據的成本。
3、總結
從數據的角度來看,區塊鏈本質是一種分佈式數據庫,這裏的「分佈式」是指區塊鏈技術利用鏈式存儲結構不只解決了分佈式數據存儲問題,也解決了存儲時的分佈式一致性問題。區塊鏈技術利用分佈式記帳簿保證數據可靠傳輸和訪問,利用可自動執行的智能合約來編程和操做數據。因此,我認爲,基於分佈式數據庫來理解區塊鏈,認清區塊鏈技術常見的一些困惑和誤區,可讓你們對區塊鏈有個比較正確的理解方式。
採用區塊鏈技術後,應用技術架構是什麼,與微服務架構的關係,現有應用如何進行遷移?下節微課我會爲你們逐一詳細介紹。
焦烈焱
EAII-企業架構創新研究院 常務理事
2001年加入普元信息,現任CTO,全面負責普元信息技術與產品的運營工做,公司技術發展戰略的重要決策人。焦烈焱在企業技術架構研究方面有二十餘年的經驗,長期致力於分佈式環境的企業計算、 SOA與雲計算技術研究與實踐。加入普元信息後組織完成一系列核心產品的研發工做,包括SOA應用平臺、以BPM &/ESB爲核心的業務集成平臺、以復瑣事件處理/數據治理/做業調度爲核心的大數據平臺,期間主持了中國工商銀行、中國建設銀行等多家大型企業技術平臺的規劃與研發。著有《SOA中國路線圖—實施版》一書。