Categories
程式開發

如何設計區塊鏈應用程序架構?


本文提出了一種分層的區塊鏈參考架構,該架構包括應用層、智能合約層、集成層、分佈式賬本層以及安全層。該架構提供了區塊鏈應用程序所必需的組件和服務,並適用於公鍊或私鏈各種應用程序的設計。

直至今日,區塊鏈的設計已經遠遠超越了它最初作為加密貨幣技術的存在。區塊鏈已經發展成為一個支持適合公眾和企業需求的全行業用例技術平台。下面所示的區塊鏈參考架構將作為構建或實現全行業用例區塊鏈應用程序的基礎。該參考架構描述了一個分層的體系結構,它提供了滿足企業需求的區塊鏈應用程序所必需的組件和服務。基於不同的商業目的和業務對象,該架構可以用於開發包含單個或多個網絡(涉及多個業務單元或組織)的區塊鏈。在該參考架構指導下,開發者既可以實現許可鏈(即私鏈)應用程序的設計,也可以實現非許可鏈(即公鏈)的設計。

如何設計區塊鏈應用程序架構? 1

上圖所示參考架構可用於構建任何區塊鏈應用程序。該架構被劃分為多個重要的邏輯層。這些層分別是應用層、智能合約層、集成層、分佈式賬本層以及覆蓋全架構的安全層。接下來,讓我們來了解每一層及其所包含的組件:

應用層

應用層是你的終端用戶或客戶端應用程序所在的層次。客戶端應用程序通常通過觸發交易來啟動整個業務工作流。之後,該交易由節點調用智能合約層功能繼續向下執行。客戶端應用程序可以使用任何軟件編程語言實現,並且可以運行在各種操作系統上。應用程序既可以使用任何區塊鏈框架實現所提供的命令行接口(CLI)工具,也可以使用特定於編程語言的軟件開發工具包(SDK)與網絡上的節點通信。隨著區塊鏈技術的演進早已超越其傳統的基於數字加密貨幣的網絡形象,我們看到越多越多不同類型的客戶端和工具現已支持區塊鏈框架。如今客戶端應用程序還可以偵聽發生在區塊鍊網絡上的各種類型的事件(event),並對這些事件執行必要的操作。這些網絡事件可能是很簡單的事件,比如僅僅是從網絡向應用程序提供狀態更新。在開發時,還可以使用一個單獨的專用應用程序來監測區塊鍊網絡。

智能合約層

智能合約層的軟件代碼實現了區塊鍊網絡中的交易。這些代碼是由區塊鍊網絡節點調用的關於業務規則或條件的一組邏輯集合。智能合約可以有自己的運行環境或虛擬機環境。這可以讓它在安全的上下文中運行,就像在虛擬容器裡一樣。而且智能合約可以用任何一種流行的軟件編程語言來實現,例如(但不僅限於)熱門的語言Java、Python、Go、JavaScript和Scala等等。也可以將智能合約編寫為一種服務(service),並將其放在註冊表中,以便客戶端以獨立於位置的方式來查找相同的服務。註冊表可以安全地被保護起來,並且可以控制訪問,這樣只有經過授權的客戶端才能根據該合約來執行操作。還可以使用加密哈希散列算法來保護智能合約本身,使其內容(其形式是軟件代碼和相關元數據)成為機密。智能合約還可以被編寫為事件(event)的形式來進行交易狀態轉換的通信或廣播。該事件可以實現為合同本身的生命週期事件。客戶端應用程序可以偵聽這些事件並相應地對它們進行處理。

集成層

當今世界,在所有的顛覆性技術中,應用程序的集成和互聯通信已經變得十分重要,因為現在沒有一個技術平台可以孤立存在。區塊鏈也同樣如此。應該保證區塊鍊網絡能夠訪問自己網絡之外的任何數據。這些數據可以為區塊鏈工作流提供重要價值,可能是外部應用程序或外部系統的一部分。類似地,也需要保證外部系統能夠與區塊鍊網絡進行通信。一種實現方法是設立一個外部事件hub,該hub作為媒介,通過事件處理器與外部系統交換數據。而外部應用程序可以偵聽來自該hub上的特定事件,並相應地執行某些任務。另一方面,智能合約軟件也可以偵聽來自外部系統的事件,並相應地執行業務功能。下面幾小節解釋了集成場景中一些有趣的其他用例:

人工智能(AI)集成

正如我們所了解的,區塊鏈本質上是一個分佈式賬本,它採用去中心化和自動化的方法來處理基於共識的交易結算過程。那麼,又如何將人工智能應用在區塊鏈中呢?人工智能的應用必須基於大量數據。而區塊鏈本身就是一個包含大量交易的數據庫,於是可以將其中的數據提供給諸如機器學習(machine learning)的人工智能分支應用來完成某些功能,例如,可以對數據應用複雜的算法來優化特定的業務功能。人工智能分支應用還可以用來改進整個業務流程或工作流。人工智能算法可以檢測出明顯的異常,並進行預測性建模或分析,從而找到能夠降低交易成本和增加區塊鍊網絡中各方業務收入的那些指標。在需要自治工作的系統之間,也可以應用人工智能的解決方案來達成交易共識。總之,人工智能和區塊鏈的強強聯合可能會在未來真正地改變遊戲規則。

雲集成

還可以擴展區塊鏈架構來實現在雲上的組件託管,雲可以提供諸如路由、數據轉換、協議轉換、擴展的證書授權中心(CA)等應用程序的集成服務。該組件還可以充當中間件,在雲中提供“區塊鏈即服務(blockchain as a service)”功能。在區塊鏈實現中可以提供一個適配器,以便從區塊鍊網絡內部和外部連接到該中間件組件。區塊鏈中間件組件可以託管在安全的“沙箱”環境中,也可以託管在一個安全的虛擬容器中。而外部應用程序可以通過該適配器,在獲取訪問區塊鍊網絡的有效證書後,與區塊鏈中間件進行交互通信。

物聯網(IoT)集成

新的一波關於技術集成的浪潮是區塊鍊網絡與任意可連接的設備進行通信。不同類型的物聯網(IoT)設備或傳感器可以將數據注入區塊鍊網絡,然後由區塊鏈節點進行驗證。可以實現一個標準化的中間件,它可以從設備獲取數據,並根據區塊鍊網絡的需求執行必要的數據換算和格式轉換。之後,區塊鍊網絡中的節點可以使用智能合約的特定共識算法來對這些數據進行驗證。

注:有關區塊鍊和物聯網集成的更多細節,請參閱這篇概述文章

分佈式帳本層

這個分佈式賬本層是區塊鏈架構的核心持久層。它提供了一個去中心化的分佈式數據庫,該數據庫包含所有的交易條目。這些交易條目按其出現的順序進行記錄,並組成哈希散列塊。因此,該數據庫,或分類賬,實際上就是交易的一個哈希塊鏈,其中每個塊都指向鏈中的前一個塊。分類帳在區塊鏈全網絡中進行共享,這就意味著每個節點都有分類帳的副本,所以每個節點都能獨立地對交易進行驗證。當每個節點都同意並確認交易的真實性時,此時就宣告分類帳達成共識。區塊鍊網絡使用不同的共識算法來達成共識。共識算法是監管交易的一組規則和條件。為公眾實現的區塊鍊網絡,即公鏈,有一個無需許可的分類賬,而在私鍊或聯盟鏈(半公開,介於公鍊和私鏈之間)中,分類賬可以實現為需要許可。在訪問和管理交易的方式上,需要許可的分類賬引入了某種形式的訪問控制。

分類帳管道(Conduits)

對於許可鏈(私鏈)的區塊鍊網絡,開發者可以實現一個名為分類帳管道的模式。在區塊鍊網絡中,可以將這樣的管道視為私有通道,這樣甚至能在該網絡中讓兩個或多個節點更私密地執行交易。這種節點必須是成員節點,並被專門授權對這些私有管道擁有使用權。可以將這些管道視為大型網絡中的小型網絡。在企業中實現區塊鏈時,這種模式能進一步加強安全性。

共識算法

區塊鍊網絡通常由不受信任的匿名實體或節點進行監管。而區塊鏈中的共識是在網絡中提供信任機制的最關鍵因素。每個節點都可以用交易形式的數據來對區塊鍊網絡進行更新,而這些交易最終需要經過驗證,然後才能作為區塊鏈的一部分被正式記錄在分類帳中。關於如何創建和驗證交易塊並實現區塊鏈的信任機制,有多種不同的共識算法。

實用拜占庭容錯算法(PBFT)

這是基於多數表決的共識。網絡中每個節點根據給定的規則或條件集更新和驗證區塊鍊網絡。如果網絡中的大多數節點在更新時反映了相同的結果,則宣告網絡達成共識。可能會有少數流氓節點(Rogue Nodes)違反網絡規則,但它們的表決結果不被接受,因為它違反了該算法給出的結果。該共識算法應該滿足所有必要條件,並且所有的節點必須同意並執行相同的條件才能得到所期望的輸出。

工作量證明算法(Proof-of-work,PoW)

工作量證明是最早設計出來的傳統算法之一。比特幣的區塊鍊網絡和以太坊網絡都使用了這種算法。與上面的實用拜占庭容錯算法不同,工作量證明算法並不依賴於多數表決來達成共識,它是一個需要消耗大量計​​算資源的算法。只有計算能力更強的節點才能爭得工作量證明算法的記賬權。第一個完成指定任務並有正確輸出的節點會贏得創建塊的記賬權利,並得到相應的報酬。工作量證明算法通常涉及到某種加密哈希散列算法,以實現所需的目標或結果。在我的免費教程中,第2章對工作量證明算法有詳細討論。

股權證明算法(Proof-of-Stake,PoS)

前面提到,使用工作量證明算法需要巨大的計算能力,從而導致較高的能量消耗。這種情況可能並不適用。而股權證明算法通過提供一種稱為用戶權益的替代方法來克服這個問題。那些佔據或擁有最高數字貨幣量(或某些資產)的用戶會贏得在區塊鍊網絡中創建塊的記賬權利。因此,在這種算法機制下,並不用需要花錢在升級節點的算力上,而是直接買下加密貨幣(或其他資產)來增持用戶權益並爭得記賬權,從而取得對一個交易塊的驗證和創建的權利。

安全層

我們在前面的區塊鏈其他組件部分也涉及了一些安全性的討論。安全層是區塊鏈架構中的重要組件之一。無論是公鏈還是私鏈,基於區塊鏈的實施都需要保證安全性和共識策略。在公鏈中,每個節點都可以參與交易,而在私鏈中,由於有某種形式的訪問控制,只允許被許可的節點參與交易。

區塊鍊網絡中的每個實體都必須進行身份綁定。在公鍊網絡中,通常會限制只有參與交易的用戶才能成為這樣的實體,而在私鍊網絡中,實體可能由組織、節點、用戶以及在區塊鍊網絡中可以發揮作用的任何東西所構成。

對於私鍊網絡而言,可以使用公鑰基礎設施(PKI)平台,在這個平台裡,受信任的證書授權中心(CA)可以頒發加密證書。而這些加密證書可以採用證書和密鑰的形式。私鑰可用於數字簽名,而公鑰可用於驗證。這種機制實現了一個可信網絡,在該網絡中所有參與者都知道他們是誰,也知道他們可信度的來源。既然現在區塊鍊網絡種的各方參與者都可以使用自己的加密證書,還有可能建立自己的證書授權中心(CA),所以至關重要的是,區塊鏈的實現需要提供一種即插即用式的服務,或者是一個抽象的邏輯層,來有效地管理、測試和驗證在網絡中採用不同安全機制的各種實體。

簡而言之,區塊鏈安全層需要具備鑑權、訪問控制、完整性、保密性、不可篡改性五大有效措施。

結語

區塊鏈被認為是繼互聯網之後的下一波網絡技術革命,在商業領域的潛力尤其巨大。區塊鏈這種自我監管的環境,在身份管理方面提供共識和來源的支持,在安全性方面提供密碼學和策略支持,這將為產生眾多新一代應用程序鋪平道路,而這些應用程序又會在未來為區塊鍊網絡提供更健壯的基礎設施支持。如今已經有許多不同風格的區塊鏈問世,從諸如以太坊這樣的非許可分類賬到諸如IBM超級分類賬(HyperLedger)這樣的許可分類賬。而區塊鏈的行業用例已經從以加密貨幣為中心的金融領域延伸到各行各業,如保險、供應鏈、醫療、物聯網等。根據用例的類型,你可以選用非許可的區塊鏈(公鏈)或許可的區塊鏈(私鏈),甚至是二者的組合技術,即使用公共的共識機制來驅動私有的業務交易。

區塊鍊式思維已經拉開帷幕,雲、大數據、人工智能、物聯網和分佈式賬本的組合力量將在未來帶來更多創新的業務解決方案。

作者介紹:

Navveen Balani,個人網站 https://navveenbalani.dev/

原文鏈接:

Blockchain Reference Architecture