區塊鏈100篇之fabric的網絡搭建(三)

這一節主要講一下啓動fabric網絡的腳本編寫以及tps的壓測。

腳本的講解

在fabric_raft這個目錄中主要有四個腳本,分別是updown.shgenesis.shcc.sh以及script/official.sh這四個腳本,其中updown.sh腳本就是啓動或者宕掉fabric網絡,genesis.sh這個腳本比較重要的是下面幾行:
在這裏插入圖片描述

  • 1.這裏是根據之前編寫好的crypto-config.yaml文件,通過cryptogen二進制文件來生成證書文件,這裏需要注意的一點是cryptogen最好是跟你要搭建的網絡的版本一致,不然生成的證書有可能有出入導致一些奇奇怪怪的錯誤,一般關於這個二進制的獲取可以直接clone fabric的官方代碼,checkout到自己想要的版本,然後make cryptogen,會在 .build/bin這個目錄下生成這個二進制。
  • 2.也是根據configtx.yaml文件,通過configtxgen來生成證書文件,同樣的版本最好是一致的,獲取方式是通過make configtxgen來獲得;第一行命令是生成system channel的創世區塊;第二行是生成application channel的通道交易配置;第三行跟第四行都是生成錨節點配置文件;這些artificialsofficial.sh腳本中都會用到。

cc.sh這個腳本就是在容器外來調用容器內部的official.sh腳本,所以它的命令就只有一行:

 docker exec cli bash scripts/official.sh

這麼做的好處就是不需要進入到容器內部去執行腳本,其實相當於:

 docker exec -it cli bash 
 bash scripts/official.sh

official.sh這個腳本講一下里面的大概邏輯。

  • 第一步是組織的節點創建channel並加入channel;

在這裏插入圖片描述
在節點peer0.org1.example.com中根據通道配置交易(就是上一步由configtxgen生成的)創建一個channel,這時會在當前目錄下生成一個application channel的創世區塊,即mychannel.block,這個區塊在join channel的時候需要指定,然後就是更新錨節點,錨節點是用於組織與組織之間的通信;切換到節點peer0.org2.example.com的環境變量使當前的節點加入到channel中,順便提一下,cli容器與各個節點容器是通過grpc進行交互的,所以可以通過切換環境變量的方式來控制不同的節點。

  • 第二步是安裝實例化chaincode

在這裏插入圖片描述

  • 1.安裝鏈碼,所有加入某個channel且參與背書的節點都需要安裝鏈碼,安裝鏈碼實際上就是將鏈碼文件拷貝到本地某個目錄下,用於實例化的時候將鏈碼文件拷貝進容器中;
  • 2.實例化鏈碼,第一次運行這一步的時候會比較慢,原因是系統會先拉取ccenv鏡像,然後在此基礎之上構建出一個新的鏈碼鏡像(這個鏡像包含了鏈碼文件),然後再根據這個鏡像啓動容器;實例化鏈碼只需要一次,此後其他節點並不需要都去執行同樣的命令,其他節點只需要執行查詢或者調用鏈碼的操作,系統會自動爲當前的節點啓動一個新的鏈碼容器;重點的參數**-P**是指背書策略,包括OR,AND,NOutOf,詳細可以查看這一篇:Fabric背書策略相關概念與背書驗證過程
  • 3.調用鏈碼
  • 4.查詢鏈碼

壓測

壓測一開始本來是想使用fabric官方推薦的caliper,但是由於各種原因,沒搞明白[哭狀臉],所以就放棄了,使用了一個使用非常簡單的壓測小工具Stupid,下面是我對這個測試網絡的壓測的過程。

下載
git clone https://github.com/guoger/stupid.git
編譯二進制
cd  stupid
go build -o stupid
編寫配置文件

新建文件stupid-config.json

vim stupid-config.json

編寫文件(sample)

{
  "peer_addr": "peer0.org1.example.com:7051",
  "orderer_addr": "orderer.example.com:7050",
  "channel": "mychannel",
  "chaincode": "mycc",
  "version": "",
  "args": ["invoke", "a", "b", "10"],
  "mspid": "Org1MSP",
  "private_key": "crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/priv_sk",
  "sign_cert": "crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]",
  "tls_ca_certs": ["crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem","crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem"],
  "num_of_conn": 20,
  "client_per_conn": 40
}

private_keysign_certtls_ca_certs填寫相對應的目錄文件, num_of_conn這個參數是指client端與peer端、orderer端之間所建立的grpc連接數,client_per_conn這個參數是指向一個peer發送交易提案的客戶端數目。
**注意:**把peer0.org1.example.comorderer.example.com寫到本機的hosts文件中

啓動測試
# 發起4000筆交易
./stupid stupid-config.json 4000
結果

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-99jRqpYw-1586414106063)(../../..\images\blockchain\fabric\stupid壓測結果.png)]
總共耗時25秒,tps大概在157左右。

好了,整個過程大概就是這樣,接下來按照原計劃就是開始編寫chaincode。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章