如何設計區(qū)塊鏈應用程序架構?(如何設計區(qū)塊鏈應用程序架構圖)
本文提出了一種分層的區(qū)塊鏈參考架構,該架構包括應用層、智能合約層、集成層、分布式賬本層以及安全層。該架構提供了區(qū)塊鏈應用程序所必需的組件和服務,并適用于公鏈或私鏈各種應用程序的設計。
直至今日,區(qū)塊鏈的設計已經遠遠超越了它最初作為加密貨幣技術的存在。區(qū)塊鏈已經發(fā)展成為一個支持適合公眾和企業(yè)需求的全行業(yè)用例技術平臺。下面所示的區(qū)塊鏈參考架構將作為構建或實現全行業(yè)用例區(qū)塊鏈應用程序的基礎。該參考架構描述了一個分層的體系結構,它提供了滿足企業(yè)需求的區(qū)塊鏈應用程序所必需的組件和服務?;诓煌纳虡I(yè)目的和業(yè)務對象,該架構可以用于開發(fā)包含單個或多個網絡(涉及多個業(yè)務單元或組織)的區(qū)塊鏈。在該參考架構指導下,開發(fā)者既可以實現許可鏈(即私鏈)應用程序的設計,也可以實現非許可鏈(即公鏈)的設計。
上圖所示參考架構可用于構建任何區(qū)塊鏈應用程序。該架構被劃分為多個重要的邏輯層。這些層分別是應用層、智能合約層、集成層、分布式賬本層以及覆蓋全架構的安全層。接下來,讓我們來了解每一層及其所包含的組件:
應用層
應用層是你的終端用戶或客戶端應用程序所在的層次??蛻舳藨贸绦蛲ǔMㄟ^觸發(fā)交易來啟動整個業(yè)務工作流。之后,該交易由節(jié)點調用智能合約層功能繼續(xù)向下執(zhí)行??蛻舳藨贸绦蚩梢允褂萌魏诬浖幊陶Z言實現,并且可以運行在各種操作系統(tǒng)上。應用程序既可以使用任何區(qū)塊鏈框架實現所提供的命令行接口(CLI)工具,也可以使用特定于編程語言的軟件開發(fā)工具包(SDK)與網絡上的節(jié)點通信。隨著區(qū)塊鏈技術的演進早已超越其傳統(tǒng)的基于數字加密貨幣的網絡形象,我們看到越多越多不同類型的客戶端和工具現已支持區(qū)塊鏈框架。如今客戶端應用程序還可以偵聽發(fā)生在區(qū)塊鏈網絡上的各種類型的事件(event),并對這些事件執(zhí)行必要的操作。這些網絡事件可能是很簡單的事件,比如僅僅是從網絡向應用程序提供狀態(tài)更新。在開發(fā)時,還可以使用一個單獨的專用應用程序來監(jiān)測區(qū)塊鏈網絡。
智能合約層
智能合約層的軟件代碼實現了區(qū)塊鏈網絡中的交易。這些代碼是由區(qū)塊鏈網絡節(jié)點調用的關于業(yè)務規(guī)則或條件的一組邏輯集合。智能合約可以有自己的運行環(huán)境或虛擬機環(huán)境。這可以讓它在安全的上下文中運行,就像在虛擬容器里一樣。而且智能合約可以用任何一種流行的軟件編程語言來實現,例如(但不僅限于)熱門的語言 Java、Python、Go、JavaScript 和 Scala 等等。也可以將智能合約編寫為一種服務(service),并將其放在注冊表中,以便客戶端以獨立于位置的方式來查找相同的服務。注冊表可以安全地被保護起來,并且可以控制訪問,這樣只有經過授權的客戶端才能根據該合約來執(zhí)行操作。還可以使用加密哈希散列算法來保護智能合約本身,使其內容(其形式是軟件代碼和相關元數據)成為機密。智能合約還可以被編寫為事件(event)的形式來進行交易狀態(tài)轉換的通信或廣播。該事件可以實現為合同本身的生命周期事件??蛻舳藨贸绦蚩梢詡陕犨@些事件并相應地對它們進行處理。
集成層
當今世界,在所有的顛覆性技術中,應用程序的集成和互聯通信已經變得十分重要,因為現在沒有一個技術平臺可以孤立存在。區(qū)塊鏈也同樣如此。應該保證區(qū)塊鏈網絡能夠訪問自己網絡之外的任何數據。這些數據可以為區(qū)塊鏈工作流提供重要價值,可能是外部應用程序或外部系統(tǒng)的一部分。類似地,也需要保證外部系統(tǒng)能夠與區(qū)塊鏈網絡進行通信。一種實現方法是設立一個外部事件 hub,該 hub 作為媒介,通過事件處理器與外部系統(tǒng)交換數據。而外部應用程序可以偵聽來自該 hub 上的特定事件,并相應地執(zhí)行某些任務。另一方面,智能合約軟件也可以偵聽來自外部系統(tǒng)的事件,并相應地執(zhí)行業(yè)務功能。下面幾小節(jié)解釋了集成場景中一些有趣的其他用例:
人工智能(AI)集成
正如我們所了解的,區(qū)塊鏈本質上是一個分布式賬本,它采用去中心化和自動化的方法來處理基于共識的交易結算過程。那么,又如何將人工智能應用在區(qū)塊鏈中呢?人工智能的應用必須基于大量數據。而區(qū)塊鏈本身就是一個包含大量交易的數據庫,于是可以將其中的數據提供給諸如機器學習(machine learning)的人工智能分支應用來完成某些功能,例如,可以對數據應用復雜的算法來優(yōu)化特定的業(yè)務功能。人工智能分支應用還可以用來改進整個業(yè)務流程或工作流。人工智能算法可以檢測出明顯的異常,并進行預測性建?;蚍治觯瑥亩业侥軌蚪档徒灰壮杀竞驮黾訁^(qū)塊鏈網絡中各方業(yè)務收入的那些指標。在需要自治工作的系統(tǒng)之間,也可以應用人工智能的解決方案來達成交易共識??傊斯ぶ悄芎蛥^(qū)塊鏈的強強聯合可能會在未來真正地改變游戲規(guī)則。
云集成
還可以擴展區(qū)塊鏈架構來實現在云上的組件托管,云可以提供諸如路由、數據轉換、協(xié)議轉換、擴展的證書授權中心(CA)等應用程序的集成服務。該組件還可以充當中間件,在云中提供“區(qū)塊鏈即服務(blockchain as a service)”功能。在區(qū)塊鏈實現中可以提供一個適配器,以便從區(qū)塊鏈網絡內部和外部連接到該中間件組件。區(qū)塊鏈中間件組件可以托管在安全的“沙箱”環(huán)境中,也可以托管在一個安全的虛擬容器中。而外部應用程序可以通過該適配器,在獲取訪問區(qū)塊鏈網絡的有效證書后,與區(qū)塊鏈中間件進行交互通信。
物聯網(IoT)集成
新的一波關于技術集成的浪潮是區(qū)塊鏈網絡與任意可連接的設備進行通信。不同類型的物聯網(IoT)設備或傳感器可以將數據注入區(qū)塊鏈網絡,然后由區(qū)塊鏈節(jié)點進行驗證??梢詫崿F一個標準化的中間件,它可以從設備獲取數據,并根據區(qū)塊鏈網絡的需求執(zhí)行必要的數據換算和格式轉換。之后,區(qū)塊鏈網絡中的節(jié)點可以使用智能合約的特定共識算法來對這些數據進行驗證。
注:有關區(qū)塊鏈和物聯網集成的更多細節(jié),請參閱這篇概述文章。
分布式帳本層
這個分布式賬本層是區(qū)塊鏈架構的核心持久層。它提供了一個去中心化的分布式數據庫,該數據庫包含所有的交易條目。這些交易條目按其出現的順序進行記錄,并組成哈希散列塊。因此,該數據庫,或分類賬,實際上就是交易的一個哈希塊鏈,其中每個塊都指向鏈中的前一個塊。分類帳在區(qū)塊鏈全網絡中進行共享,這就意味著每個節(jié)點都有分類帳的副本,所以每個節(jié)點都能獨立地對交易進行驗證。當每個節(jié)點都同意并確認交易的真實性時,此時就宣告分類帳達成共識。區(qū)塊鏈網絡使用不同的共識算法來達成共識。共識算法是監(jiān)管交易的一組規(guī)則和條件。為公眾實現的區(qū)塊鏈網絡,即公鏈,有一個無需許可的分類賬,而在私鏈或聯盟鏈(半公開,介于公鏈和私鏈之間)中,分類賬可以實現為需要許可。在訪問和管理交易的方式上,需要許可的分類賬引入了某種形式的訪問控制。
分類帳管道(Conduits)
對于許可鏈(私鏈)的區(qū)塊鏈網絡,開發(fā)者可以實現一個名為分類帳管道的模式。在區(qū)塊鏈網絡中,可以將這樣的管道視為私有通道,這樣甚至能在該網絡中讓兩個或多個節(jié)點更私密地執(zhí)行交易。這種節(jié)點必須是成員節(jié)點,并被專門授權對這些私有管道擁有使用權。可以將這些管道視為大型網絡中的小型網絡。在企業(yè)中實現區(qū)塊鏈時,這種模式能進一步加強安全性。
共識算法
區(qū)塊鏈網絡通常由不受信任的匿名實體或節(jié)點進行監(jiān)管。而區(qū)塊鏈中的共識是在網絡中提供信任機制的最關鍵因素。每個節(jié)點都可以用交易形式的數據來對區(qū)塊鏈網絡進行更新,而這些交易最終需要經過驗證,然后才能作為區(qū)塊鏈的一部分被正式記錄在分類帳中。關于如何創(chuàng)建和驗證交易塊并實現區(qū)塊鏈的信任機制,有多種不同的共識算法。
實用拜占庭容錯算法(PBFT)這是基于多數表決的共識。網絡中每個節(jié)點根據給定的規(guī)則或條件集更新和驗證區(qū)塊鏈網絡。如果網絡中的大多數節(jié)點在更新時反映了相同的結果,則宣告網絡達成共識??赡軙猩贁盗髅ス?jié)點(Rogue Nodes)違反網絡規(guī)則,但它們的表決結果不被接受,因為它違反了該算法給出的結果。該共識算法應該滿足所有必要條件,并且所有的節(jié)點必須同意并執(zhí)行相同的條件才能得到所期望的輸出。
工作量證明算法(Proof-of-work,PoW)工作量證明是最早設計出來的傳統(tǒng)算法之一。比特幣的區(qū)塊鏈網絡和以太坊網絡都使用了這種算法。與上面的實用拜占庭容錯算法不同,工作量證明算法并不依賴于多數表決來達成共識,它是一個需要消耗大量計算資源的算法。只有計算能力更強的節(jié)點才能爭得工作量證明算法的記賬權。第一個完成指定任務并有正確輸出的節(jié)點會贏得創(chuàng)建塊的記賬權利,并得到相應的報酬。工作量證明算法通常涉及到某種加密哈希散列算法,以實現所需的目標或結果。在我的免費教程中,第 2 章對工作量證明算法有詳細討論。
股權證明算法(Proof-of-Stake,PoS)前面提到,使用工作量證明算法需要巨大的計算能力,從而導致較高的能量消耗。這種情況可能并不適用。而股權證明算法通過提供一種稱為用戶權益的替代方法來克服這個問題。那些占據或擁有最高數字貨幣量(或某些資產)的用戶會贏得在區(qū)塊鏈網絡中創(chuàng)建塊的記賬權利。因此,在這種算法機制下,并不用需要花錢在升級節(jié)點的算力上,而是直接買下加密貨幣(或其他資產)來增持用戶權益并爭得記賬權,從而取得對一個交易塊的驗證和創(chuàng)建的權利。
安全層
我們在前面的區(qū)塊鏈其他組件部分也涉及了一些安全性的討論。安全層是區(qū)塊鏈架構中的重要組件之一。無論是公鏈還是私鏈,基于區(qū)塊鏈的實施都需要保證安全性和共識策略。在公鏈中,每個節(jié)點都可以參與交易,而在私鏈中,由于有某種形式的訪問控制,只允許被許可的節(jié)點參與交易。
區(qū)塊鏈網絡中的每個實體都必須進行身份綁定。在公鏈網絡中,通常會限制只有參與交易的用戶才能成為這樣的實體,而在私鏈網絡中,實體可能由組織、節(jié)點、用戶以及在區(qū)塊鏈網絡中可以發(fā)揮作用的任何東西所構成。
對于私鏈網絡而言,可以使用公鑰基礎設施(PKI)平臺,在這個平臺里,受信任的證書授權中心(CA)可以頒發(fā)加密證書。而這些加密證書可以采用證書和密鑰的形式。私鑰可用于數字簽名,而公鑰可用于驗證。這種機制實現了一個可信網絡,在該網絡中所有參與者都知道他們是誰,也知道他們可信度的來源。既然現在區(qū)塊鏈網絡種的各方參與者都可以使用自己的加密證書,還有可能建立自己的證書授權中心(CA),所以至關重要的是,區(qū)塊鏈的實現需要提供一種即插即用式的服務,或者是一個抽象的邏輯層,來有效地管理、測試和驗證在網絡中采用不同安全機制的各種實體。
簡而言之,區(qū)塊鏈安全層需要具備鑒權、訪問控制、完整性、保密性、不可篡改性五大有效措施。
結語
區(qū)塊鏈被認為是繼互聯網之后的下一波網絡技術革命,在商業(yè)領域的潛力尤其巨大。區(qū)塊鏈這種自我監(jiān)管的環(huán)境,在身份管理方面提供共識和來源的支持,在安全性方面提供密碼學和策略支持,這將為產生眾多新一代應用程序鋪平道路,而這些應用程序又會在未來為區(qū)塊鏈網絡提供更健壯的基礎設施支持。如今已經有許多不同風格的區(qū)塊鏈問世,從諸如以太坊這樣的非許可分類賬到諸如 IBM 超級分類賬(HyperLedger)這樣的許可分類賬。而區(qū)塊鏈的行業(yè)用例已經從以加密貨幣為中心的金融領域延伸到各行各業(yè),如保險、供應鏈、醫(yī)療、物聯網等。根據用例的類型,你可以選用非許可的區(qū)塊鏈(公鏈)或許可的區(qū)塊鏈(私鏈),甚至是二者的組合技術,即使用公共的共識機制來驅動私有的業(yè)務交易。
區(qū)塊鏈式思維已經拉開帷幕,云、大數據、人工智能、物聯網和分布式賬本的組合力量將在未來帶來更多創(chuàng)新的業(yè)務解決方案。