HyperLedger Fabric 學習思路分享
HyperLedger Fabric 學習思路分享
HyperLedger Fabric最初是由Digital Asset和IBM公司貢獻的、由Linux基金會主辦的一個超級賬本項目,它是一個目前非常流行並廣為人知的區塊鏈網絡框架的實現方案。作為一種基於模塊化架構開發應用程序或解決方案的基礎,HyperLedger Fabric支持如共識和會員服務等即插即用的組件,它的設計初衷是支持不同組件的可插拔實現,並適應整個經濟生態系統的復雜性和高精度性。HyperLedger Fabric利用容器技術運行稱為“Chaincode”的智能合約,該合約包含了系統的應用程序邏輯。
HyperLedger Fabric是一個區塊鏈解決方案,更傾向於聯盟鏈或私有鏈方向。區塊鏈由於去中心化、開放性、自治性、信息不可篡改及匿名性等特征而受到廣泛關註,且目前正處在上升勢態。拋開炒作的代幣項目,應用於行業聯盟鏈或直接搭建私鏈的項目,采用HyperLedger Fabric作為底層平臺無疑是最好的選擇之一。
項目無須刻意圍繞區塊鏈開展,不能因為當前區塊鏈火爆就強迫業務進行轉型,否則對企業發展和項目升級可能不會起到積極作用。
對於聯盟鏈,其應該被打造成一個獨立於企業內部核心業務的外圍應用。換一種說法,一家企業加盟某一個區塊鏈平臺的目的是提升自身的業務健壯度和抗風險能力,而不能因為加盟了某一個區塊鏈平臺就有針對性地修改自身原有業務。
企業對區塊鏈聯盟平臺的姿態應該是最大程度自由的,即上鏈有一定好處,但依然可以根據自身的實際情況選擇隨時下鏈而不影響原有業務。
知識點:
這裏的學習內容是指HyperLedger Fabric學習過程中會遇到的一些應用,通常包括以下幾部分:
1、Docker
Docker 是一個開源的應用容器引擎,基於 Go 語言並遵從Apache2.0協議開源。 Docker 可以讓開發者將應用和依賴包打包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。 容器完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 App),更重要的是容器性能開銷極低。
在學習HyperLedger Fabric的過程中,開發人員需要掌握Docker的基本操作命令,以便可以更快上手,這其中包括打包、拆包、tag、容器管理、鏡像管理等。同時,也需要學習Docker Compose和YAML的編排方案,了解如何掛載文件路徑、設置端口綁定、確定Network以及掌握環境變量的用法等。
2、Go
Go是一種並發的、帶垃圾回收的、快速編譯的語言。它可以在一臺計算機上用幾秒鐘的時間編譯一個大型的Go程序,結合了解釋型語言的遊刃有余、動態類型語言的開發效率以及靜態類型的安全性。
HyperLedger Fabric是一個基於Go開發的開源項目,學習Go不僅僅是為了更深入地閱讀源碼需求,也因為它的智能合約編寫方案需要Go來實現。對於Go的學習,至少能夠在參考API文檔的情況下編寫出一套符合需求的智能合約。然而對於有一定面向對象基礎的開發人員來說,這並不難。
3、gRPC
gRPC 是一個高性能、通用的開源RPC框架,其由 Google 公司主要面向移動應用開發並基於HTTP/2 協議標準而設計的,基於 ProtoBuf(Protocol Buffers) 序列化協議開發,且支持眾多開發語言。
在學習HyperLedger Fabric的過程中,對gRPC的感知並不深,但SDK的相關項目都需要用到它。建議還是需要了解一下諸如此類的傳輸協議,與之類似的還有Thrift、Dubbo等。
4、CA
CA是PKI系統中通信雙方信任的實體,被稱為可信第三方(Trusted Third Party,簡稱TTP)。作為可信第三方的行為具有非否認性。
在HyperLedger Fabric體系中,CA被廣泛運用於每一個具體的對象,如orderer、peer以及最小單位的user等。經常進行後端開發的工程師應該比較了解,在HyperLedger Fabric中CA被用於各種對象的登記、登出、註冊、撤銷等操作。
5、P2P
Peer-to-Peer,對等網絡,即對等計算機網絡,是一種在對等者(Peer)之間分配任務和工作負載的分布式應用架構。
關於P2P的學習並非必須,但這也算是入門區塊鏈底層的必修課,對期望今後有機會進行底層開發的工程師來說,目前多少需要了解一些。
6、Kafka
Kafka是一個分布式消息系統,由LinkedIn使用Scala編寫,用作LinkedIn的活動流(Activity Stream)和運營數據處理管道(Pipeline)的基礎。具有高水平擴展和高吞吐量。
在Fabric網絡中,數據是由Peer節點提交到Orderer排序服務,而Orderer相對於Kafka來說相當於上遊模塊,且Orderer還兼具提供了對數據進行排序及生成符合配置規範及要求的區塊。而使用上遊模塊的數據計算、統計、分析,這個時候就可以使用類似於Kafka這樣的分布式消息系統來協助業務流程。
Kafka是一種共識模式,也就是說平等信任(同步復制),所有的HyperLedger Fabric網絡加盟方都是可信方,因為消息總是均勻地分布在各處。但具體生產使用的時候是依賴於背書來做到確權,相對而言,Kafka應該是一種啟動Fabric網絡的模式或類型。
7、Zookeeper
Zookeeper是一種在分布式系統中被廣泛用來作為分布式狀態管理、分布式協調管理、分布式配置管理和分布式鎖服務的集群。
Kafka增加和減少服務器都會在Zookeeper節點上觸發相應的事件,Kafka系統會捕獲這些事件,進行新一輪的負載均衡,客戶端也會捕獲這些事件來進行新一輪的處理。
8、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案例為引,層層深入,從單機單節點到Solo多機部署再到Kafka集群部署,其中結合穿插文檔講解加深理解。特別是對於一些常犯錯誤,本書均一一進行了提醒並給出了解決方案,希望能通過本書幫助開發人員少走彎路,盡快實現基於HyperLedger Fabric的區塊鏈實踐落地。
當然,每個人都有各自的學習方案和思路,上圖中的路線並非適合所有人,有一定基礎的讀者可以跳過其中的部分節點選擇性閱讀。所以,它適合正在尋求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章以一個簡單的案例做演練,在數據鏈上用到了智能合約,對數據提取則提供了另一種思路。
書中配套源碼地址:HyperLedger Fabric 開發實戰源碼
目前該書已經開始預售,想看的小夥伴們可以通過以下鏈接購買:
京東、天貓、當當、亞馬遜
HyperLedger Fabric 學習思路分享