1. 程式人生 > >區塊鏈開源框架 HyperLedger Fabric 學習思路分享

區塊鏈開源框架 HyperLedger Fabric 學習思路分享

 

本文作者楊毅 著有《HyperLedger Fabric開發實戰——快速掌握區塊鏈技術》一書。

區塊鏈開源框架 HyperLedger Fabric 學習思路分享

HyperLedger Fabric最初是由Digital Asset和IBM公司貢獻的、由Linux基金會主辦的一個超級賬本專案,它是一個目前非常流行並廣為人知的區塊鏈網路框架的實現方案。作為一種基於模組化架構開發應用程式或解決方案的基礎,HyperLedger Fabric支援如共識和會員服務等即插即用的元件,它的設計初衷是支援不同元件的可插拔實現,並適應整個經濟生態系統的複雜性和高精度性。HyperLedger Fabric利用容器技術執行稱為“Chaincode”的智慧合約,該合約包含了系統的應用程式邏輯。

HyperLedger Fabric是一個區塊鏈解決方案,更傾向於聯盟鏈或私有鏈方向。區塊鏈由於去中心化、開放性、自治性、資訊不可篡改及匿名性等特徵而受到廣泛關注,且目前正處在上升勢態。拋開炒作的代幣專案,應用於行業聯盟鏈或直接搭建私鏈的專案,採用HyperLedger Fabric作為底層平臺無疑是最好的選擇之一。

專案無須刻意圍繞區塊鏈開展,不能因為當前區塊鏈火爆就強迫業務進行轉型,否則對企業發展和專案升級可能不會起到積極作用。

對於聯盟鏈,其應該被打造成一個獨立於企業內部核心業務的外圍應用。換一種說法,一家企業加盟某一個區塊鏈平臺的目的是提升自身的業務健壯度和抗風險能力,而不能因為加盟了某一個區塊鏈平臺就有針對性地修改自身原有業務。

企業對區塊鏈聯盟平臺的姿態應該是最大程度自由的,即上鍊有一定好處,但依然可以根據自身的實際情況選擇隨時下鏈而不影響原有業務。

必備知識點

這裡的學習內容是指HyperLedger Fabric學習過程中會遇到的一些應用,通常包括以下幾部分。

  • Docker

Docker 是一個開源的應用容器引擎,基於 Go 語言並遵從Apache2.0協議開源。 Docker 可以讓開發者將應用和依賴包打包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。 容器完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 App),更重要的是容器效能開銷極低。

在學習HyperLedger Fabric的過程中,開發人員需要掌握Docker的基本操作命令,以便可以更快上手,這其中包括打包、拆包、tag、容器管理、映象管理等。同時,也需要學習Docker Compose和YAML的編排方案,瞭解如何掛載檔案路徑、設定埠繫結、確定Network以及掌握環境變數的用法等。

  • Go

Go是一種併發的、帶垃圾回收的、快速編譯的語言。它可以在一臺計算機上用幾秒鐘的時間編譯一個大型的Go程式,結合瞭解釋型語言的遊刃有餘、動態型別語言的開發效率以及靜態型別的安全性。

HyperLedger Fabric是一個基於Go開發的開源專案,學習Go不僅僅是為了更深入地閱讀原始碼需求,也因為智慧合約編寫方案需要Go來實現。對於Go的學習,至少能夠在參考API文件的情況下編寫出一套符合需求的智慧合約。然而,對於有一定面向物件基礎的開發人員來說,這並不難。

  • gRPC

gRPC 是一個高效能、通用的開源RPC框架,由 Google公司 主要面向移動應用開發並基於HTTP/2 協議標準而設計的,基於 ProtoBuf(Protocol Buffers) 序列化協議開發,且支援眾多開發語言。

在學習HyperLedger Fabric的過程中,對gRPC的感知並不深,但SDK的相關專案都需要用到它。建議還是需要了解一下諸如此類的傳輸協議,與之類似的還有Thrift、Dubbo等。

  • CA

CA是PKI系統中通訊雙方信任的實體,被稱為可信第三方(Trusted Third Party, TTP)。作為可信第三方的行為具有非否認性。

在HyperLedger Fabric體系中,CA被廣泛運用於每一個具體的物件,如orderer、peer以及最小單位的user等。後端開發的工程師應該比較瞭解,在HyperLedger Fabric中CA被用於各種物件的登記、登出、註冊、撤銷等操作。

  • P2P

Peer-to-Peer,對等網路,即對等計算機網路,是一種在對等者(Peer)之間分配任務和工作負載的分散式應用架構。

關於P2P的學習並非必須,但也算是入門區塊鏈底層的必修課,對期望今後有機會進行底層開發的工程師來說,目前多少需要了解一些。

  • Kafka

Kafka是一個分散式訊息系統,由LinkedIn使用Scala編寫,用作LinkedIn的活動流(Activity Stream)和運營資料處理管道(Pipeline)的基礎。具有高水平擴充套件和高吞吐量。

在Fabric網路中,資料是由Peer節點提交到Orderer排序服務,而Orderer相對於Kafka來說相當於上游模組,且Orderer還兼具提供對資料進行排序及生成符合配置規範及要求的區塊。當使用上游模組的資料計算、統計、分析時,可以使用Kafka這樣的分散式訊息系統來協助業務流程。

Kafka是一種共識模式,也就是平等信任(同步複製),所有的HyperLedger Fabric網路加盟方都是可信方,因為訊息總是均勻地分佈在各處。但具體生產使用的時候會依賴於背書來做到確權,相對而言,Kafka應該是一種啟動Fabric網路的模式或型別。

  • Zookeeper

Zookeeper是一種在分散式系統中被廣泛用於分散式狀態管理、分散式協調管理、分散式配置管理和分散式鎖服務的叢集。

Kafka增加和減少伺服器都會在Zookeeper節點上觸發相應的事件,Kafka系統會捕獲這些事件,進行新一輪的負載均衡,客戶端也會捕獲這些事件進行新一輪的處理。

  • SDK(Java/Node.js)

HyperLedger Fabric最終需要落地於實際應用,相對於HyperLedger Fabric的應用層則會直接提供介面給其他各客戶端並對區塊鏈網路進行操作。目前,基於HyperLedger Fabric的SDK方案有很多,但相對較成熟的主要還是Java和Node.js的。所以,這兩門語言應當是學習HyperLedger Fabric平臺工程師的主力語言,建議熟練使用兩者其中之一。

如果這兩門語言都不是目前學習Hyperledger Fabric工程師的主力語言,可以考慮用其他被gRPC所支援的程式語言自行實現,或者使用Fabric-SDK-Container提供的解決方案。

學習路線

Hyperledger Fabric的入門其實不能說難,只是很麻煩,很多知識點並不需要開發人員熟練掌握,但必須有所瞭解。當只想基於Hyperledger Fabric平臺上線落地一個區塊鏈專案,卻不清楚哪些知識點是必須深入學習的時候,就需要一個簡單明確的引導來幫助完成這件事。

本人從接觸HyperLedger Fabric專案以來,經歷了其0.6版本到1.1版本的數次迭代。因為早期中文資料稀缺,並且0.6版本到1.0版本是一個跨度非常大的迭代,導致早期的大部分部署和應用經驗失去作用,不得已再次從1.0版本開始從頭學習。當時中文資料極為有限,且大多數都是單篇翻譯或純粹的概念講解,導致我一直沒有找到入門的頭緒,只能不斷地從官方文件中汲取知識。

現在網上已經有了大量的HyperLedger Fabric教學部落格和視訊資料,也有很多書籍輔助開發人員學習,國內的HyperLedger Fabric專案實操氛圍也不錯,大部分關於區塊鏈的招聘都要求應聘人員對HyperLedger Fabric的架構和具體應用有一定的經驗。

本人根據自己的實踐經驗,並撰寫了Hyperledger Fabric 1.0 從零開始系列博文。後來在宋亞東老師的建議下,再次從頭梳理了所有內容,並結合自己實際學習和開發的過程整理了一條學習線路,如下圖所示。開發人員可以按照圖中序號順序進行學習。

區塊鏈開源框架 HyperLedger Fabric 學習思路分享

當然,每個人都有各自的學習方案和思路,上圖中的路線並非適合所有人,有一定基礎的讀者可以跳過其中的部分節點選擇性閱讀。所以,它適合正在尋求HyperLedger Fabric入門的新人,也適合這方面的中、高階開發人員選擇性學習。

區塊鏈開源框架 HyperLedger Fabric 學習思路分享

這本名為《HyperLedger Fabric開發實戰——快速掌握區塊鏈技術》的書沒有花費篇章講述區塊鏈的編年史,也沒有橫向對比各大區塊鏈平臺的優缺點,也不是純粹的翻譯註解。更多的是對初學HyperLedger Fabric的指南,書中有大量的程式碼介紹和講解,並且也提供了原始碼下載地址,減少手動敲程式碼及除錯的煩惱。同時,以HyperLedger Fabric案例為引,層層深入,從單機單節點到Solo多機部署再到Kafka叢集部署,其中結合穿插文件講解加深理解。特別是對於一些常犯錯誤,本書均一一進行了提醒並給出瞭解決方案,希望能通過本書幫助開發人員少走彎路,儘快實現基於HyperLedger Fabric的區塊鏈實踐落地。

最後,介紹下本書的架構組成:

第1章是基本環境部署,包括內網和外網的不同方案,以及核心處理等。

第2章是HyperLedger Fabric及環境部署,先是用文件講述了Fabric相關的介紹和主要功能點,接著分析了原始碼部署和映象處理方面的問題。

第3章帶著讀者一步步跑通官方的e2e_cli案例,並在隨後對該案例進行了分析。

第4章開始,手動部署一次單機多節點網路。

第5章跟隨前章的腳步,手動部署一次Solo多機網路環境。

第6章繼續深入,搭建基於Kafka的叢集網路。

第7章以文件為主,著重講解如何編寫智慧合約及有關智慧合約的用法。

第8章詳細介紹CouchDB的使用,並推薦使用CouchDB。

第9章講解在Fabric釋出1.0版之後的對外客戶端呼叫方式、客戶端對SDK的使用和相關原始碼。

第10章以一個簡單的案例做演練,在資料鏈上用到了智慧合約,對資料提取則提供了另一種思路。

本書已經上市銷售,點選瞭解更多。