HyperLedger Fabric 學習思路分享 html
HyperLedger Fabric最初是由Digital Asset和IBM公司貢獻的、由Linux基金會主辦的一個超級帳本項目,它是一個目前很是流行並廣爲人知的區塊鏈網絡框架的實現方案。做爲一種基於模塊化架構開發應用程序或解決方案的基礎,HyperLedger Fabric支持如共識和會員服務等即插即用的組件,它的設計初衷是支持不一樣組件的可插拔實現,並適應整個經濟生態系統的複雜性和高精度性。HyperLedger Fabric利用容器技術運行稱爲「Chaincode」的智能合約,該合約包含了系統的應用程序邏輯。git
HyperLedger Fabric是一個區塊鏈解決方案,更傾向於聯盟鏈或私有鏈方向。區塊鏈因爲去中心化、開放性、自治性、信息不可篡改及匿名性等特徵而受到普遍關注,且目前正處在上升勢態。拋開炒做的代幣項目,應用於行業聯盟鏈或直接搭建私鏈的項目,採用HyperLedger Fabric做爲底層平臺無疑是最好的選擇之一。github
項目無須刻意圍繞區塊鏈開展,不能由於當前區塊鏈火爆就強迫業務進行轉型,不然對企業發展和項目升級可能不會起到積極做用。編程
對於聯盟鏈,其應該被打形成一個獨立於企業內部核心業務的外圍應用。換一種說法,一家企業加盟某一個區塊鏈平臺的目的是提高自身的業務健壯度和抗風險能力,而不能由於加盟了某一個區塊鏈平臺就有針對性地修改自身原有業務。後端
企業對區塊鏈聯盟平臺的姿態應該是最大程度自由的,即上鍊有必定好處,但依然能夠根據自身的實際狀況選擇隨時下鏈而不影響原有業務。安全
知識點:服務器
這裏的學習內容是指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案例爲引,層層深刻,從單機單節點到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 開發實戰源碼
目前該書已經開始預售,想看的小夥伴們能夠經過如下連接購買: