Fabirc性能測試工具之Caliper介紹

Caliper介紹

Caliper是區(qū)塊鏈性能測試框架蝌以,用戶可以在定義好測試集的情況下針對自己的區(qū)塊鏈網(wǎng)絡進行性能測試,獲取一系列的測試結果并生成測試報告趋箩。

當前支持的區(qū)塊鏈解決方案

當前支持的性能指標

  • 交易成功率
  • 交易吞吐量TPS
  • 交易延遲
  • 資源消耗(CPU/內存/網(wǎng)絡IO)

架構

參見 Architecture introduction.

image.png

Adaptation Layer 適配器層

Adaptation Layer 將現(xiàn)有的區(qū)塊鏈系統(tǒng)集成到Caliper框架中來铃拇,每一個適配器都通過相應的區(qū)塊鏈的SDK或者RESTful API實現(xiàn)了對應的'Caliper Blockchain NBIs'

Interface&Core Layer 接口和核心層

Interface&Core Layer 實現(xiàn)了核心功能并提供了北向接口通危,包括了四種NBIs:

  • 區(qū)塊鏈操作接口:包括部署、調用智能合約蜈垮,查詢賬本信息等耗跛。
  • 資源監(jiān)控:包括對監(jiān)控的啟停、獲取后臺區(qū)塊鏈系統(tǒng)的資源消耗狀態(tài)攒发,包括CPU调塌、內存、網(wǎng)絡IO等等惠猿。目前有提供的有兩種監(jiān)控羔砾,一種是監(jiān)控本地和遠程的docker鏡像,另一種是監(jiān)控本地進程偶妖。
  • 性能分析器::包括讀取預定義的性能統(tǒng)計定義(包括TPS姜凄、延遲、成功率等)并打印出結果趾访。執(zhí)行交易時將會記錄關鍵指標态秧,比如創(chuàng)建時間、提交時間扼鞋、交易結果等申鱼。
  • 報告生成器: 生成HTML格式的測試報告空扎。

Benchmark Engine 基準引擎

image.png

Configuration File 配置文件

主要有兩種配置文件,一種是測試基準配置文件润讥,一種是區(qū)塊鏈網(wǎng)絡拓撲配置文件转锈。
示例:

{
  "blockchain": {
    "type": "fabric",
    "config": "./fabric.json"
  },
  "command" : {
    "start": "docker-compose -f ../../network/fabric/simplenetwork/docker-compose.yaml up -d",
    "end" : "docker-compose -f ../../network/fabric/simplenetwork/docker-compose.yaml down;docker rm $(docker ps -aq)"
  },
  "test": {
    "name": "simple",
    "description" : "This is an example benchmark for caliper",
    "clients": {
      "type": "local",
      "number": 5
    },
    "rounds": [{
        "label" : "open",
        "txNumber" : [5000, 5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}, {"type": "fixed-rate", "opts": {"tps" : 300}}],
        "arguments": {  "money": 10000 },
        "callback" : "benchmark/simple/open.js"
      },
      {
        "label" : "query",
        "txNumber" : [5000, 5000],
        "rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 300}}, {"type": "fixed-rate", "opts": {"tps" : 400}}],
        "callback" : "benchmark/simple/query.js"
      }]
  },
  "monitor": {
    "type": ["docker", "process"],
    "docker":{
      "name": ["peer0.org1.example.com", "http://192.168.1.100:2375/orderer.example.com"]
    },
    "process": [
      {
        "command" : "node",
        "arguments" : "local-client.js",
        "multiOutput" : "avg"
      }
    ],
    "interval": 1
  }
}
  • blockchain - 定義了使用什么區(qū)塊鏈網(wǎng)絡,并且指明使用的配置文件楚殿。
  • command - 定義了在何時執(zhí)行的操作撮慨。
    start: 測試開始時執(zhí)行
    end: 測試完成后執(zhí)行
  • test - 定義測試元數(shù)據(jù)。
    name&description: 測試名稱和簡介脆粥,生成報告時使用砌溺。
    clients:定義測試客戶端類型,目前有'local' 和'zookeeper'兩種变隔。'local' 模式采用本地進程來模擬客戶端請求规伐。'zookeeper'模式則客戶端會分布在不同的機器上,通過zookeeper的協(xié)調來獲取測試任務匣缘。
    hint:提示猖闪。主要用在報告生成中,表示調用的是什么鏈碼肌厨。
    txNumber:每一輪的測試交易次數(shù)培慌。
    txDuration:每一輪的測試時間。
    rateControl:客戶端請求的速率柑爸,未定義則默認為1TPS吵护。
    trim:修剪測試統(tǒng)計結果,用于消除啟動和停止時測試的不準確性表鳍。比如trim設置為30馅而,如果是按次數(shù)設置交易,則測試周期的前后30個交易數(shù)據(jù)不會被統(tǒng)計譬圣。如果是按照時間設置瓮恭,則測試周期的前后30s的數(shù)據(jù)不會被統(tǒng)計。
    arguments:用戶定義的參數(shù)胁镐,直接透傳偎血。
    callback:定義本輪測試中所調用的模塊。
  • monitor - 定義監(jiān)控的是本地進程還是docker鏡像盯漂。

Master

定義了三個默認的測試階段

  • 準備階段 - 根據(jù)區(qū)塊鏈配置文件生成創(chuàng)建并實例化一個區(qū)塊鏈颇玷,安裝智能合約并啟動監(jiān)控器。
  • 測試階段 - master根據(jù)基準測試配置文件啟動循環(huán)測試就缆。client會獲取測試任務開始執(zhí)行測試帖渠,并存儲測試結果以備后續(xù)分析。
  • 報告階段 - 每一輪測試結果會收集起來進行分析并自動生成HTML格式的測試報告竭宰。報告樣式如下:


    image.png

Clients

  • Local clients 會通過Node.js 啟動多個進程來進行測試空郊,由于node.js是單進程的份招,測試會啟動多個子進程來工作,每個子進程相當于一個client狞甚。負載將會均勻的劃分到每個client中锁摔。
  • Zookeeper clients 多個zookeeper clients將會獨立啟動,并且監(jiān)聽測試信息哼审,測試完畢以后會創(chuàng)建一個znode來記錄測試結果谐腰。每一個zookeeper client也會本地創(chuàng)建多個字進程來執(zhí)行實際的測試工作。具體可以參考Zookeper Client Design.

User defined test module

定義了測試函數(shù)和以及提交交易涩盾,用戶可以在這里自定義測試邏輯十气。
需要定義三個函數(shù):

  • init - 在客戶端的每一輪測試之前調用,獲取區(qū)塊鏈數(shù)據(jù)以及用戶的配置信息春霍,用戶也可以定義一些其他的初始化信息砸西。
  • run - 使用API創(chuàng)建和提交實際的交易信息≈啡澹客戶端會周期性的調用此函數(shù)芹枷,建議一次只調用一個交易,采用異步模式离福。如果一次調用多個交易的話杖狼,實際的測試測試負載情況會跟配置文件里定義的不同。
  • end - 會在每輪測試完成之后調用妖爷。用戶可以自己定義一些清理工作。

環(huán)境準備

  • NodeJS 8.X
  • node-gyp
  • Docker
  • Docker-compose
git clone https://github.com/hyperledger/caliper.git
cd caliper
npm install
npm install grpc@1.10.1 fabric-ca-client@1.1.0 fabric-client@1.1.0

執(zhí)行測試

node ./benchmark/simple/main.js -c ./config.json -n ./fabric.json

-c : 基準測試配置文件, 如果不設置理朋,默認使用 config.json .
-n : 賬本網(wǎng)絡的配置文件. 如果不設置, 默認使用 config.json中設置的 blockchain config值.
注:以上都是基于fabric v1.1版本
跑一個自帶的2org4peer的測試例子:

node benchmark/smallbank/main.js

成功生成報告則表明環(huán)境OK絮识。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嗽上,隨后出現(xiàn)的幾起案子次舌,更是在濱河造成了極大的恐慌,老刑警劉巖兽愤,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彼念,死亡現(xiàn)場離奇詭異,居然都是意外死亡浅萧,警方通過查閱死者的電腦和手機逐沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洼畅,“玉大人吩案,你說我怎么就攤上這事〉鄞兀” “怎么了徘郭?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵靠益,是天一觀的道長。 經(jīng)常有香客問我残揉,道長胧后,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任抱环,我火速辦了婚禮壳快,結果婚禮上,老公的妹妹穿的比我還像新娘江醇。我一直安慰自己濒憋,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布陶夜。 她就那樣靜靜地躺著凛驮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪条辟。 梳的紋絲不亂的頭發(fā)上黔夭,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音羽嫡,去河邊找鬼本姥。 笑死,一個胖子當著我的面吹牛杭棵,可吹牛的內容都是我干的婚惫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魂爪,長吁一口氣:“原來是場噩夢啊……” “哼先舷!你這毒婦竟也來了?” 一聲冷哼從身側響起滓侍,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蒋川,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撩笆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捺球,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年夕冲,在試婚紗的時候發(fā)現(xiàn)自己被綠了氮兵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耘擂,死狀恐怖胆剧,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤秩霍,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布篙悯,位于F島的核電站,受9級特大地震影響铃绒,放射性物質發(fā)生泄漏鸽照。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一颠悬、第九天 我趴在偏房一處隱蔽的房頂上張望矮燎。 院中可真熱鬧,春花似錦赔癌、人聲如沸诞外。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峡谊。三九已至,卻和暖如春刊苍,著一層夾襖步出監(jiān)牢的瞬間既们,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工正什, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啥纸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓婴氮,卻偏偏與公主長得像斯棒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子主经,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容