FISCO BCOS 實(shí)戰(zhàn)教程(七)config.ini 配置詳解之 chain & compatibility & flow_control

"? ? config.ini 配置中的 chain 配置說明可以參考?FISCO 官網(wǎng)

1. chain

? ? 我們可以看到在 chain 這個(gè)配置中有三個(gè)配置項(xiàng) id, sm_crypto , sm_crypto_channel ,官網(wǎng)上也對(duì)這三個(gè)配置項(xiàng)做了說明。下面我們依次來講解這三個(gè)配置項(xiàng)的作用

1.1 id?

? ? 這個(gè)配置項(xiàng)很簡單,實(shí)際應(yīng)用中我們也不會(huì)涉及到修改這個(gè)配置項(xiàng),保持默認(rèn)即可

1.2 sm_crypto

? ? 這個(gè)配置項(xiàng)表示節(jié)點(diǎn)是否以國密方式啟動(dòng)。關(guān)于國密和非國密,這里不做過多解釋,有興趣的可以自行百度。

? ? 這個(gè)值是使用 build_chain.sh ( 這里以 build_chain.sh 為例 ) 生成節(jié)點(diǎn)的時(shí)候,指定是否生成國密節(jié)點(diǎn)來確定的,默認(rèn)值是 false ,表示的是以非國密方式啟動(dòng),那么如果我們希望以國密方式啟動(dòng)呢,只能重新生成新的鏈,無法通過直接修改來變更運(yùn)行方式,可以參考?FISCO 官網(wǎng)?查看如何生成國密鏈。同時(shí)各位讀者可以參考我的另一個(gè)文章 “FISCO BCOS 實(shí)戰(zhàn)教程(三) build_chain.sh 搭鏈“? 了解使用 build_chain.sh 時(shí),各個(gè)參數(shù)的使用說明。


1.3 sm_crypto_channel

? ? ? ? 這里假設(shè)各位讀者已經(jīng)根據(jù)??FISCO 官網(wǎng)? 生成鏈一條國密鏈。這里我們使用?bash?build_chain.sh?-l?127.0.0.1:4?-p?30300,20200,8545?-g?-G 生成鏈,然后并啟動(dòng)。??

? ? 進(jìn)入?fisco/nodes/127.0.0.1/node0 目錄,查看 config.ini 文件。這里我們看到 sm_crypto_channel 為 true,表示 channel 連接方式為國密方式。 sm_crypto_channel? 具體影響到客戶端連接節(jié)點(diǎn)時(shí)使用的證書。下面我們來驗(yàn)證一下。

? ? 參考?FISCO 官網(wǎng)?配置下載 console 后,進(jìn)行配置文件和證書配置。這里需要注意的是,官網(wǎng)中復(fù)制證書時(shí),使用的命令是 "cp -r nodes/127.0.0.1/sdk/* console/conf/"? , 這里官網(wǎng)假設(shè)你是使用 "bash?build_chain.sh?-l?127.0.0.1:4?-p?30300,20200,8545?-g"? 生成的節(jié)點(diǎn),但實(shí)際上,我們上面用的命令是 "bash?build_chain.sh?-l?127.0.0.1:4?-p?30300,20200,8545?-g?-G "? ,這里多來一個(gè) -G 。所以,復(fù)制證書的時(shí)候,我們不能直接使用官網(wǎng)上的命令,需要稍微修改下。

? ? 使用如下命令, 在 console/conf 目錄下,創(chuàng)建 gm 目錄,然后復(fù)制證書到 gm 目錄下。至于為什么要?jiǎng)?chuàng)建 gm 目錄,大家可以查看 console/conf/config.toml 這個(gè)文件。我們看到, gm 默認(rèn)的證書路徑為 conf/gm ,所以方便起見,這里我們就創(chuàng)建默認(rèn)的 conf/gm 目錄。

## 創(chuàng)建gm 目錄

mkdir console/conf/gm

## 復(fù)制證書

cp sdk/gm/* console/conf/gm/


? ? 然后進(jìn)入到 console 目錄下,執(zhí)行 ./start.sh 啟動(dòng) console

? ? 如果啟動(dòng)失敗,則需要 ps -ef|grep -i fisco 查看 fisco 進(jìn)程是否啟動(dòng)。如果沒有啟動(dòng),進(jìn)入到?nodes/127.0.0.1? 目錄,使用 ./start_all.sh 啟動(dòng)節(jié)點(diǎn)后,在次嘗試啟動(dòng) console。

? ? 好了,這里我們啟動(dòng) console 成功,表示成功連接到節(jié)點(diǎn)了,下面我們來修改 sm_crypto_channel 參數(shù),看看具體的效果。

? ? 進(jìn)入?nodes/127.0.0.1/node0 目錄,修改 config.ini 文件中?sm_crypto_channel=false。

? ? 然后重啟 node0,看到 success 字樣表示重啟成功。

? ? 再次進(jìn)入到 console/conf? 目錄,修改 peers=["127.0.0.1:20200"] 。這里說明下,默認(rèn)的配置是?peers=["127.0.0.1:20200","127.0.0.1:20201"] , 表示 console 會(huì)去嘗試連接 node0 和 node1? ( 具體的連接說明可以查看我的 "FISCO BCOS 實(shí)戰(zhàn)教程(四)config.ini 配置詳解之 channel & rpc" )。 但因?yàn)閯偛盼覀冎恍薷?node0 的配置,所以為了看到實(shí)驗(yàn)效果,這里配置 console 只連接 node0。

? ? 之后我們嘗試啟動(dòng) console, 連接失敗了。這里我們看到,雖然我們?cè)?console/conf/gm 目錄下防止了證書,但卻依然連接失敗。讓我們繼續(xù)實(shí)驗(yàn)

,?

? ? 使用如下命令,復(fù)制 sdk目錄下的非國密證書到 console/conf 目錄。

cp nodes/127.0.0.1/sdk/*? ?console/conf


????然后再次進(jìn)入 console 目錄,嘗試啟動(dòng) console。我們看到 console 啟動(dòng)成功了。這里不知道大家有沒有注意到,我們?cè)?console 目錄下同時(shí)放置了國密和非國密的證書,那么 console 怎么知道用那個(gè)證書去連接節(jié)點(diǎn)呢? 答案是,按個(gè)嘗試去連接。console 首先會(huì)使用 conf 目錄下的非國密證書去連接節(jié)點(diǎn),如果成功,則連接成功,console 返回 "Welcome" 信息;如果連接失敗,則繼續(xù)使用 conf/gm 目錄下的國密證書去嘗試連接節(jié)點(diǎn),如果連接成功,則返回 “Welcome" 信息; 如果兩次嘗試都失敗,哦,console 就提示連接失敗,返回連接失敗的錯(cuò)誤信息。

? ? 同時(shí),我們可以注意到,我們只修改來 node0 的 sm_crypto_channel 的配置,node1/node2/node3 的配置并沒有修改,這說明這個(gè)配置項(xiàng)對(duì)于每個(gè)節(jié)點(diǎn)是獨(dú)立的,每個(gè)節(jié)點(diǎn)中的這個(gè)配置項(xiàng)是可以為不相同的。

? ? 另外,可能有人會(huì)問,如果我生成的是非國密的鏈,即節(jié)點(diǎn)中 sm_crypto 和 sm_cryto_channel 都是 false, 那么我可以修改節(jié)點(diǎn)的?sm_cryto_channel 為 true 嗎?? 呵呵,如果你生的非國密的鏈,那么你的 sdk 目錄中是沒有 gm 這個(gè)目錄的,所以就算你修改?sm_cryto_channel=true , 你也找不都國密的證書。

1.4 還原配置

? ? 做完實(shí)驗(yàn)來,記得還原 node0 中 config.ini 的 sm_crypto_channe=true ,? 然后重啟 node0


2. compatibility

? ? 現(xiàn)在讓我來繼續(xù)看下一個(gè)配置。compatibility 配置項(xiàng)中只有一個(gè)?supported_version 配置項(xiàng),這個(gè)配置項(xiàng)的作用是用于兼容升級(jí)的。以下圖為例,現(xiàn)在配置為 2.7.2 ,表示我的 fisco-bcos 二進(jìn)制版本為 2.7.2 , 那么后續(xù)如果 FISCO 官方繼續(xù)開發(fā)了新版本的FISCO BCOS ,比如 2.9.0。如果 2.9.0 中對(duì)性能有很大提升,你也想用這個(gè)新版本,那么你就可以直接拿? 2.9.0 的 fisco-bcos 二進(jìn)制,替換當(dāng)前節(jié)點(diǎn)上的 fisco-bcos 二進(jìn)制,然后只需要重啟節(jié)點(diǎn),不用做任何修改,你的節(jié)點(diǎn)可以繼續(xù)運(yùn)行,當(dāng)然 2.9.0 中所包含的新功能因?yàn)檫@個(gè)?supported_version 這個(gè)參數(shù)的原因是關(guān)閉的,你無法使用。如果你修改?supported_version 為 2.9.0 那么,會(huì)造成各種異常和不兼容,因?yàn)槟愕臄?shù)據(jù)和配置文件還是 2.7.2 的。

? ? 所以,總結(jié)來說,這個(gè)配置項(xiàng)是對(duì)后續(xù)版本的 fisco-bcos 二進(jìn)制來說的,已經(jīng)運(yùn)行的節(jié)點(diǎn)不能修改這個(gè)配置項(xiàng),否則會(huì)出現(xiàn)各種異常。


3.?log

? ? 這個(gè)配置項(xiàng)就很簡單了,一眼就能明白作用,這里不做過多解釋

4.?flow_control

? ? 這個(gè)配置下面有兩個(gè)配置項(xiàng),limit_req 和?outgoing_bandwidth_limit。 ??

4.1?outgoing_bandwidth_limit

? ??outgoing_bandwidth_limit 這個(gè)配置項(xiàng)參考官網(wǎng)的說明進(jìn)行理解。不容易進(jìn)行模擬,這里就不進(jìn)行演示,并且實(shí)際使用中,這個(gè)參數(shù)使用較少。

?4.2 limit_req

? ? 比較有意思的參數(shù)是這個(gè)?limit_req, 用于限制節(jié)點(diǎn)接受的 QPS 。

首先,下載 java-sdk-demo ( 我們將使用這個(gè)工具發(fā)送 QPS )

git clone https://github.com/FISCO-BCOS/java-sdk-demo.git

# 如果 git 訪問很慢,可以訪問 gitee

git clone https://gitee.com/FISCO-BCOS/java-sdk-demo

? ? ? ? 進(jìn)入到 java-sdk-demo 目錄,進(jìn)行編譯

? ? ? ? 進(jìn)行文件配置, 這里的配置和 console 的配置一樣,大家一樣畫葫蘆就好了

cp java-sdk-demo/dist/config-example.toml config.toml

mkdir?java-sdk-demo/dist/conf/gm

cp?nodes/127.0.0.1/sdk/gm/*?java-sdk-demo/dist/conf/gm


? ? 當(dāng)然,這了 config.toml 文件我們需要修改下,配置?peers=["127.0.0.1:20200"] , 只連接 node0

? ? 好了,準(zhǔn)備工作就緒,我們來實(shí)驗(yàn)一下。進(jìn)入?java-sdk-demo/dist 目錄,執(zhí)行如下命令

#調(diào)用格式:java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf parallelok [groupid] add [用戶量] [QPS] [用戶文件名]#調(diào)用樣例java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf parallelok 1 add 5000 1000 user1


執(zhí)行成功,我們看到這里最后輸出 TPS 為 888? ,執(zhí)行結(jié)果可能有細(xì)微差別,這里結(jié)果想近即可 。 TPS 和 QPS 的區(qū)別,大家可以百度下,因?yàn)檫@里我們是在本地執(zhí)行,所以可以認(rèn)為 QPS = TPS.

? ? ? ? 下面,進(jìn)入?nodes/127.0.0.1/node0 ,修改 config.ini 為如下。打開?limit_req, 并設(shè)置為 100

? ? ????然后重啟 node0

? ? 再次進(jìn)入?java-sdk-demo/dist? 目錄,執(zhí)行如下命令

#調(diào)用格式: java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf parallelok [groupid] add [用戶量] [QPS] [用戶文件名] #調(diào)用樣例 java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf parallelok 1 add 5000 1000 user1

? ??

? ? 這里我們查看最后的輸出,注意到 “include error requests“ 結(jié)果為 950 ,接近 1000, 也就是我們發(fā)送的 QPS 速率。然后 “exclude error requests“ 為 129 , , 就是我們?cè)O(shè)置的 node0 的?limit_req 值。那么總結(jié)下,就可以發(fā)現(xiàn),當(dāng)我們發(fā)送的 QPS 值超過節(jié)點(diǎn)設(shè)置的?limit_req 值時(shí),多余的 QPS 消息,節(jié)點(diǎn)會(huì)返回拒絕,即處理失敗。

? ? 這個(gè)值的使用場(chǎng)景是,當(dāng)節(jié)點(diǎn)機(jī)器性能較差,當(dāng)業(yè)務(wù)請(qǐng)求量較多( 即 QPS ) 時(shí),通過設(shè)置這個(gè)值,可以限制節(jié)點(diǎn)的處理速率。

4.3 還原配置

? ? 最后,記得還原 node0 的配置哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容