Hyperledger Fabric原理詳解與實戰4

2流程式設計師發表於2020-04-07

本文主要內容如下,愛看不看~

從本章開始,我們要實際操作,來搭建一個Fabric的基礎網路。

有一個概念貫穿整個Fabric應用層面,非常核心的東西,叫“Channel”。

國內一般把它翻譯為“通道”,但我覺得“頻道”更貼切一點。作為一箇中二的程式設計師,怎麼可以與世俗苟同?所以,後面我會稱它為“Channel”或者“通道”。

什麼是Channel

上一章我們看到了Fabric的部署架構(也有稱為“執行時架構”的)。這是整個Fabric網路執行的基礎設施。

基礎設施很直觀很好理解,但Channel是個邏輯概念。要理解Channel的意義,首先要知道以下幾點:

  1. 一個Fabric網路有多個參與者(組織)。

  2. 每個參與者可以自由的和其他參與者組合成一個“聯盟”,就像我們的微信好友,可以自由組合成群組。

  3. 每個“聯盟”維護一條區塊鏈。也就是說,一個Fabric網路中支援同時執行多條區塊鏈。 一個組織可以同時參與多條區塊鏈的維護。

舉個例子:一個糖果公司,為了食品溯源需要,跟上游原料提供商組建了一個Fabric網路。如下圖:

由於區塊鏈裡的資料,“聯盟”成員都是可以全部訪問到的。就像群裡的訊息,群成員都可以讀到。

但牛奶供應商和巧克力供應商並不希望讓其他人看到自己公司與糖果公司的交易資料。

於是,就將他們切分成了兩個聯盟,每個聯盟維護一條區塊鏈。

這時,該Fabric網路上就有兩條區塊鏈,糖果商同時參與了這兩條鏈的維護。

Channel可以理解為上面說的“聯盟”或群組。

每個Channel可以自定義一個全域性唯一的名稱,比如:ChannelMilk和ChannelCoco。

所有的智慧合約、交易、區塊鏈操作都是針對某一個Channel來說的。

也就是說,Channel將一個物理上的Fabric網路分成了多個邏輯分割槽。而每一個應用都是針對某一個分割槽上的資源進行操作。

就像是一塊硬碟,被劃分了多個分割槽,資料存在某一個分割槽裡,應用可以針對某一個分割槽裡的資料進行操作。

所以,我為什麼說,Channel翻譯成“頻道”更貼切一點。

收音機調到某一個頻道,得到的訊號是相同的。參與者加入某一個Channel以後,收到的資料也是相同的。

如果把“Channel”改為“Group”,我想此處就不會有歧義了。當然,後續我還會講到私有資料,就是允許資料的值不必儲存到區塊鏈上。也許到時候,你對Channel的理解又會不一樣。

理解了channel的概念,後面的就好說了。我們就先把這個基礎網路搭建起來。當然,還有很多其他的概念,我們邊做邊講。

實施說明

Fabric官方文件上部署和演示的例子,都是基於docker容器來執行的。

為了照顧對docker不熟悉的小夥伴,後面的內容我會把涉及docker的部分做遮蔽處理,讓你們看上去好像是在虛擬機器或物理機上執行似的。很貼心有沒有?實際上我還是用的容器^_^ 。

當然,對docker不熟悉的小夥伴,如果是搞技術的,請一定要把這塊知識空白補起來。

預設情況下,Fabric都是執行在容器環境中,因為它需要自動生成另外一個容器來執行智慧合約。

不過Fabric也提供了在單獨伺服器上執行智慧合約的方式。

對了,在Fabric中,智慧合約一般稱為“鏈碼”。在後續文章中我也會這麼稱呼它。

搭建基礎網路,分如下幾步實施:

  1. 網路規劃
  2. 生成證書檔案
  3. 啟動節點
  4. 建立Channel
  5. 加入Channel

下面我們開始吧。

網路規劃

還記得我們原來定義的幾個組織和角色嗎?

  • M公司:債券發行人
  • R公司:證券評級機構
  • DB和BH:金融機構,買賣債券

我們對參與的組織做如下規劃:

組織 域名 peer節點 所屬通道 IP
M公司 m.com peer0.m.com channelBond 172.16.0.10
peer1.m.com channelBond 172.16.0.11
R公司 rate.com peer0.rate.com channelBond 192.168.10.10
peer1.rate.com channelBond 192.168.10.11
DB公司 db.com peer0.db.com channelBond 10.1.1.10
peer1.db.com channelBond 10.1.1.11

這次還沒有涉及到CA,先把概念搞懂,後續再加入。

還有一個組織:BH,我們把它作為後來者,等網路建好後,演示一下如何新增新的組織。

還有一個組織負責管理orderer叢集,就是中間人。為什麼要引入它,原因我已經在業務場景那一章說過了。

它的組織域名叫mid.org。還記得我們的目標嗎?沒有中間商賺差價(隱含的意思就是,”我就是唯一的中間商”:-D)。

orderer叢集做如下規劃:

組織 域名 order節點 IP
mid.org mid.org order0.mid.org 172.31.10.10
order1.mid.org 172.31.10.11
order2.mid.org 172.31.10.12

TOP圖如下:

拓撲圖
拓撲圖

Tips

如果你覺得上面的規劃複雜了(畢竟是做學習和測試用的),那就把所有IP換成同一個網段。

要在電腦上完全模擬出多個真實的企業網路環境並不容易,需要有相關的網路基礎知識。

不過你不用擔心,我們只關注Fabric網路本身。如果你對如何模擬出真實的網路感興趣,我會另外寫文章,敬請關注!

今天就聊到這,下一篇,準備擼起袖子大幹一場吧!

我是2流程式設計師,我們下次再賤!

本文使用 mdnice 排版

相關文章