1. 程式人生 > >阿里雲容器服務區塊鏈解決方案全新升級 支援Hyperledger Fabric v1.1

阿里雲容器服務區塊鏈解決方案全新升級 支援Hyperledger Fabric v1.1

作為全球開源區塊鏈領域影響最為廣泛的專案之一,超級賬本近日宣佈了Hyperledger Fabric v1.1的正式釋出。此次升級帶來了一系列豐富的新功能以及在安全性、效能與擴充套件性等諸多方面的顯著提升。更多詳情可參考下述資料:

與此同時,作為對開源區塊鏈生態的支援,阿里雲容器服務區塊鏈解決方案也進行了同步升級。這次升級不僅第一時間在Kubernetes叢集上支援Hyperledger Fabric v1.1.0 GA版,並且在以下幾個方面帶來了新的功能增強和使用體驗的優化:

  • 支援新的Node.js型別chaincode和相關示例,以及在國內雲環境落地的適配
  • 支援chaincode級別的賬本資料加密新功能和相關示例
  • 支援新的connection profile和自動生成功能
  • 以及其他Hyperledger Fabric v1.1新功能的支援
  • 支援阿里雲彈性裸金屬伺服器(神龍)
  • 內建容器化的Hyperledger Blockchain Explorer
  • 整合阿里雲日誌服務
  • 優化區塊鏈網路刪除過程的資料目錄清理

本文將對這些主要新功能進行技術方面的解讀。在開始之前,我們準備了一段小視訊,可以讓大家快速瞭解在阿里雲容器服務Kubernetes環境中使用該區塊鏈解決方案的大致流程。

15217001937705

一分鐘認識最新版容器服務區塊鏈解決方案

最新版的區塊鏈解決方案支援從容器服務Kubernetes的應用目錄的acs-hyperledger-fabric圖形介面中實現一鍵部署。此外在引數頁面可以通過直接編輯來實現更豐富的自定義配置,如更改區塊鏈網路拓撲、指定網路埠、功能啟用/禁用等等。

在上述視訊演示中,我們依次進行了以下幾步操作:

  1. 配置和一鍵部署區塊鏈網路
  2. 容器服務Kubernetes控制檯檢視和管理區塊鏈網路的服務和容器
  3. 執行模擬轉賬交易智慧合約的CLI測試
  4. 執行容器化、圖形化的區塊鏈瀏覽器
  5. 容器服務控制檯檢視區塊鏈網路執行日誌

需要說明的是,視訊演示操作前需先完成環境準備工作,具體步驟請參見相關文件指南

新功能:Node.js型別Chaincode支援

在此次Hyperledger Fabric v1.1的升級中,在原有的Golang型別之上(Java型別尚未正式宣佈支援),加入了對流行的Node.js程式語言型別的智慧合約(即chaincode)的支援。這將進一步擴大和豐富Hyperledger Fabric的應用開發生態,吸引更多的開發者加入到區塊鏈應用的創新中來。

在此基礎上,通過對Fabric的原始碼分析,我們在區塊鏈解決方案中解決了在國內網路環境中可能遇到的Node.js型別chaincode例項化(instantiation)過程超時失敗、chaincode映象無法建立的侷限性。

如需體驗Node.js型別的chaincode,可採用CLI方式或者Client SDK方式,通過引數指定chaincode語言型別即可。解決方案中提供了基於官方cli-test.sh的示例指令碼、以及基於官方的balance-transfer的client SDK示例程式。

CLI方式的Node.js型別chaincode示例
15216986774262

15216991696808

Node.js型別示例chaincode原始碼位置:
15216997838279

SDK方式的Node.js型別chaincode示例
15217000027420

15216999353881

15216995417280

需要說明的是,由於Node.js應用自身編譯構建的特點,Hyperledger Fabric中Node.js型別的chaincode例項化(instantiation)時間相比Golang型別的要更長,所以在這個環節需要稍作等待。

新功能:Chaincode級別對賬本資料的加密和簽名

Hyperledger Fabric v1.1新增支援在chaincode級別對交易的資料(即StateDB裡Key-Value中的Value,通過呼叫chaincode時傳入)進行加密/解密、簽名/驗證。這樣能實現業務應用將商業敏感資料交給區塊鏈之後,資料全程(包括落地到賬本)在原有的安全機制之上進一步添加了標準的或使用者可擴充套件的加密演算法和簽名演算法的保護,進一步提高了資料的安全性。

在容器服務的區塊鏈解決方案中,我們提供了官方的EncCC示例程式用於在CLI環境中執行,方便使用者瞭解此功能的使用和工作機制。在該示例中,首先對鍵"key1"的值“value1”進行加密並記錄到賬本上;然後讀取鍵"key1"並解密其值,輸出顯示"value1";接著,再對鍵“key2”的值"value2"進行加密以及數字簽名並記錄到賬本上,最後讀取鍵“key2”並解密、驗證簽名得到最終值,輸出顯示"value2"。

需要說明的是,使用該CLI示例程式之前,請先建立對應的channel(例如通過執行cli-tset.sh)。

2018_03_22_15_48_25_1

2018_03_22_15_50_55_1

2018_03_22_15_52_37_1

新功能:Connection Profile用於Client SDK應用程式

針對不同型別的區塊鏈應用程式有著各不相同的對區塊鏈網路拓撲和連線資訊的描述方式的問題,為了提供更為統一規範的應用連線配置,Hyperledger Fabric v1.1開始支援Connection Profile, 目前主要面向Node.js型別的Client SDK應用程式,未來有望推廣到更多型別的SDK應用上。

在此次區塊鏈方案升級中,也同步支援此功能,並且能夠根據使用者輸入的區塊鏈網路拓撲配置(channel, peer, orderer, ca等)、公網訪問地址和埠等資訊,自動生成Connection Profile應用連線配置檔案(即network-config.yaml)並提供給使用者下載。而在我們的Client SDK示例balancer-transfer-app中也通過一個指令碼實現一鍵下載所有證書金鑰以及Connection Profile等配置檔案。

解決方案自動生成的Connection Profile的位置和部分內容示例如下:

2018_03_22_16_27_08_1

新功能:支援阿里雲彈性裸金屬伺服器(神龍)

此次區塊鏈解決方案升級正式支援在阿里雲彈性裸金屬伺服器(神龍)執行Hyperledger Fabric。阿里雲彈性裸金屬伺服器可提供與普通物理機無差別的高計算效能,同時還提供物理機級別的安全隔離。這些特性為提升基於區塊鏈業務系統的安全風險防範能力、加強對資料和隱私的保護等方面帶來了堅實的執行環境保證。在此基礎上,彈性裸金屬伺服器的高計算效能和彈性水平伸縮能力,結合Hyperledger Fabric代價級的效能和擴充套件性方面的提升,有望進一步提升區塊鏈應用和系統的業務處理能力。

從使用方式上,我們提供了基本無縫支援的體驗,使用者只需在建立容器服務Kubernetes叢集中選擇彈性裸金屬伺服器(現階段需使用者提前通過工單開通彈性裸金屬伺服器的按量付費型別選擇的白名單)作為worker節點;然後按照標準的區塊鏈解決方案的建立部署流程操作即可。

新功能:內建容器化的區塊鏈瀏覽器

區塊鏈解決方案支援基於標準SDK開發的區塊鏈管控工具、瀏覽器等與區塊鏈網路連線。在此次升級中,區塊鏈解決方案進一步地將Hyperledger官方開源的Blockchain Explorer 進行了容器化改造,實現了Explorer本身以及其所依賴的MySQL資料庫作為Kubernetes的service和deployment內置於解決方案中(預設啟用,可設定禁用),隨著區塊鏈網路的建立實現自動配置、部署、啟動和通過負載均衡(SLB)對外提供Web圖形化的區塊鏈網路業務交易監控服務。

2018_03_23_10_45_45_1

2018_03_23_10_48_00_1

15217735020012

需要說明的是,區塊鏈瀏覽器的使用前提是先創建出channel(如通過cli-test.sh)。

新功能:整合阿里雲日誌服務

區塊鏈解決方案原生支援容器服務控制檯的日誌功能,以及Kubernetes的kubectl logs命令檢視功能。利用前者可以在Web介面上便捷地檢視區塊鏈網路中Peer、Orderer、CA、Kafka、Zookeeper等節點的容器日誌資訊,一個示例如下:

logging_entry_1_1

log_page_1

在此基礎上,最新版的容器服務解決方案進一步支援與阿里雲日誌服務進行整合,為企業客戶提供如日誌儲存、實時索引/查詢/分析、日誌告警、視覺化報表等更高階的日誌功能。整合的關鍵引數可在建立部署區塊鏈網路的頁面進行直接設定,具體使用方法可參考該方案的產品文件。

config_blockchain_solution_1

在阿里雲日誌服務控制檯查詢和分析日誌的效果如下圖所示。關於日誌服務完整的查詢分析語法以及更多高階功能說明, 可參考日誌服務的產品文件

query_result_search_1

新功能:刪除流程資料目錄處理優化

考慮到部分割槽塊鏈解決方案的使用者在開發測試環境需要頻繁建立和刪除區塊鏈網路,為了進一步提升效率,這次方案升級優化了對資料目錄清理的優化。具體來說,當區塊鏈網路被刪除(例如使用helm delete命令)的同時,相應的資料目錄名會被自動新增以下字尾:-deleted-當前時間戳。之所以不直接刪除,主要是為了防範人為誤操作的風險,以及滿足部分使用者希望複用原有資料的目的。

假設原資料目錄為:

/data/fabric/network01

則區塊鏈網路刪除後,資料目錄會被重新命名為類似如下的名字:

/data/fabric/network01-deleted-2018-03-21-041756

這樣便能進一步優化使用者的區塊鏈建立-刪除-建立流程上的操作體驗了(因為有使用者需要頻繁進行此類操作進行開發除錯)。此外,如需徹底清理資料目錄以釋放儲存空間,可手工執行rm命令或結合自動化指令碼很方便地實現。

總結

容器服務區塊鏈解決方案自2017年10月正式釋出以來,獲得了為數眾多的開發者和來自零售、金融、製造、多媒體等行業的企業使用者的認可和採用,基於解決方案提供的企業級區塊鏈開發測試環境快速地進行基於區塊鏈的業務創新應用的打造。隨著此次Hyperledger Fabric v1.1和區塊鏈解決方案的升級,將進一步幫助我們的使用者打造功能更完備、效能更高、安全性更強、易用性更好的企業級區塊鏈業務應用。