Hyperledger Caliper

choko's avatar
Jun 29, 2024
Hyperledger Caliper
 
 
 
  • chaincode : simple.go - open
 
mdl-2.2-testnet/caliper 이름으로 clone
cd mdl-2.2-testnet git clone https://github.com/hyperledger/caliper-benchmarks.git mv caliper-benchmarks caliper cd caliper

caliper 설치

  • Node version → 14.19.0 이상 필요, make, gcc
( @hyperledger/caliper-core@0.5.0: wanted: {"node":">=14.19.0","npm":">=6.14.16"} )
# /bin/bash sudo apt install -y make sudo apt install -y gcc npm install -g --only=prod @hyperledger/caliper-cli@0.5.0 caliper bind --caliper-bind-sut fabric:2.2 --caliper-bind-args=-g npm install npm install @hyperledger/caliper-core@0.5.0
 

Network 실행

# /bin/bash cd ../docker ./network.sh down ./network.sh up createChannel -ca -s couchdb ./network.sh deployCC -ccn simple -ccv 1 -ccl go -ccp ../caliper/src/fabric/scenario/simple/go cd ../caliper
 

caliper/networks/fabric/test-network.yaml

name: Caliper Benchmarks version: "2.0.0" caliper: blockchain: fabric channels: # channelName of mychannel matches the name of the channel created by test network - channelName: mychannel # the chaincodeIDs of all the fabric chaincodes in caliper-benchmarks contracts: - id: simple organizations: - mspid: Org1MSP # Identities come from cryptogen created material for test-network identities: certificates: - name: 'Admin' clientPrivateKey: path: '../docker/organizations/peerOrganizations/org1.themedium.io/users/Admin@org1.themedium.io/msp/keystore/ece14808bd3bc5ecefbfd2aa75ec785bee5d3f10332581fb194aa938f4f63ec1_sk' clientSignedCert: path: '../docker/organizations/peerOrganizations/org1.themedium.io/users/Admin@org1.themedium.io/msp/signcerts/cert.pem' connectionProfile: path: '../docker/organizations/peerOrganizations/org1.themedium.io/connection-org1.yaml' discover: true
  • clientPrivateKey, clientSignedCert, connectionProfile경로의 key 파일을 local 설정에 맞춰 변경.
  • channel name, certificates name, contracts ID 등도 local 설정에 맞춰준다.
  • connectionProfile를 설정하여 페브릭 네트워크 정보를 제공해 주어야 한다.
# simple한 connectionProfile --- name: test-network-org1 version: 2.0.0 client: organization: peerorg4 connection: timeout: peer: endorser: '3000' organizations: peerorg4: mspid: peerorg4-caMSP peers: - peer4 certificateAuthorities: - peerorg4-ca orderers: # caliper_orderer.yaml orderer1: url: grpcs://orderer1:7050 grpcOptions: ssl-target-name-override: orderer1 hostnameOverride: orderer1 tlsCACerts: pem: | -----BEGIN CERTIFICATE----- MIICIjCCAcigAwIBAgIUMgY7CI7k7ci+c0gvpR5h1qTtNVkwCgYIKoZIzj0EAwIw ZTELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRYwFAYDVQQDEw1vcmRlcmVy b3JnLWNhMB4XDTIzMDEyNjA0MzEwMFoXDTM4MDEyMjA0MzEwMFowZTELMAkGA1UE BhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBlcmxl ZGdlcjEPMA0GA1UECxMGRmFicmljMRYwFAYDVQQDEw1vcmRlcmVyb3JnLWNhMFkw EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbpcc0MHWXAz/zW7dUiG4y/nMwmqKKF80 qjXsOaosztREyDvGesgTmY6ug94aD6v5QYoHDZ/hMhDI8R2yqSe4KKNWMFQwDgYD VR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFCdOChqV CdqEvi17RCOA+tSAhbnlMA8GA1UdEQQIMAaHBAAAAAAwCgYIKoZIzj0EAwIDSAAw RQIhANB2GHverhZjfWI/TzZ8+AmIb2jdYR6GoBu4Te5046ZbAiBOIWuXQmpgA5vm qAN8x4N2+GJVUBcyhsnEa+fr702WRQ== -----END CERTIFICATE----- peers: peer4: url: grpcs://peer4:7051 tlsCACerts: pem: | -----BEGIN CERTIFICATE----- MIICHjCCAcSgAwIBAgIUbcVEaGtlNSpqwyKJjDclCpq+/E0wCgYIKoZIzj0EAwIw YzELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRQwEgYDVQQDEwtwZWVyb3Jn NC1jYTAeFw0yMzAxMjYwNDMxMDBaFw0zODAxMjIwNDMxMDBaMGMxCzAJBgNVBAYT AlVTMRcwFQYDVQQIEw5Ob3J0aCBDYXJvbGluYTEUMBIGA1UEChMLSHlwZXJsZWRn ZXIxDzANBgNVBAsTBkZhYnJpYzEUMBIGA1UEAxMLcGVlcm9yZzQtY2EwWTATBgcq hkjOPQIBBggqhkjOPQMBBwNCAARluwkb/iBg8TU2UonrhBDLAAUNQGDBlCnhI01C vZSXOEzF9ZKAasi29W/uVTqghDoYpnsSJT1FTQnBGHWBb7Fho1YwVDAOBgNVHQ8B Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAdBgNVHQ4EFgQUaYiS9vgGSbV/ rkYkimeeh2HeUUIwDwYDVR0RBAgwBocEAAAAADAKBggqhkjOPQQDAgNIADBFAiEA 6y+8nWGC/IVO1sKy0sD6Q/RiAgLQo/eOUyQMnX8hz5ECIBftCd+rUGeniQ8KCEye NjCKVVJ6Gz5xrCHTBY8/AIYN -----END CERTIFICATE----- grpcOptions: ssl-target-name-override: peer4 hostnameOverride: peer4 certificateAuthorities: peerorg4-ca: url: grpcs://peerorg4-ca:7054 caName: peerorg4-ca tlsCACerts: pem: | -----BEGIN CERTIFICATE----- MIICHjCCAcSgAwIBAgIUbcVEaGtlNSpqwyKJjDclCpq+/E0wCgYIKoZIzj0EAwIw YzELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRQwEgYDVQQDEwtwZWVyb3Jn NC1jYTAeFw0yMzAxMjYwNDMxMDBaFw0zODAxMjIwNDMxMDBaMGMxCzAJBgNVBAYT AlVTMRcwFQYDVQQIEw5Ob3J0aCBDYXJvbGluYTEUMBIGA1UEChMLSHlwZXJsZWRn ZXIxDzANBgNVBAsTBkZhYnJpYzEUMBIGA1UEAxMLcGVlcm9yZzQtY2EwWTATBgcq hkjOPQIBBggqhkjOPQMBBwNCAARluwkb/iBg8TU2UonrhBDLAAUNQGDBlCnhI01C vZSXOEzF9ZKAasi29W/uVTqghDoYpnsSJT1FTQnBGHWBb7Fho1YwVDAOBgNVHQ8B Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBATAdBgNVHQ4EFgQUaYiS9vgGSbV/ rkYkimeeh2HeUUIwDwYDVR0RBAgwBocEAAAAADAKBggqhkjOPQQDAgNIADBFAiEA 6y+8nWGC/IVO1sKy0sD6Q/RiAgLQo/eOUyQMnX8hz5ECIBftCd+rUGeniQ8KCEye NjCKVVJ6Gz5xrCHTBY8/AIYN -----END CERTIFICATE----- httpOptions: verify: false
 

caliper/benchmarks/scenario/simple/config.yaml

simpleArgs: &simple-args initialMoney: 10000 moneyToTransfer: 100 numberOfAccounts: &number-of-accounts 20000 test: name: simple description: >- This is an example benchmark for Caliper, to test the backend DLT's performance with simple account opening & querying transactions. workers: type: local number: 3 rounds: - label: open description: >- Test description for the opening of an account through the deployed contract. txNumber: *number-of-accounts rateControl: type: fixed-rate opts: tps: 2500 workload: module: benchmarks/scenario/simple/open.js arguments: *simple-args
  • Caliper 밴치마크 설정 파일.
  • 여기서 setting attribute를 찾을 수 있다.
 

caliper 실행

npx caliper launch manager \ --caliper-workspace . \ --caliper-benchconfig benchmarks/scenario/simple/config.yaml \ --caliper-networkconfig networks/fabric/test-network.yaml
 
 

다중 Caliper 구성(Master-Worker)

Master Worker 공통 설정

  • caliper.yaml (마스터-워커 모두 공통 설정)
worker:       remote: true       communication:           method: mqtt           address: mqtt://<master ip>:1883
 
  • config.yaml (simple 시나리오의 config.yaml 파일)
workers.type: remote
 

Worker 설정 & 실행

  • caliper-worker.sh
    • manager workers 갯수만큼 For문 숫자를 입력
      ※실행 뒷편에 & 입력 필수
for n in {1..15}; do npx caliper launch worker \       --caliper-workspace $CALIPER_HOME \       --caliper-benchconfig ./benchmarks/scenario/smallbank/config.yaml \       --caliper-networkconfig ./networks/fabric/fabric-v1.4.1/1org1peergoleveldb/fabric-go.yaml & done
 

Master 실행

  • simple 시나리오의 config.yaml에서 workers.number 개수가 Worker에서 설정한 값과 같아야 함
  • 예) master 1대, worker 3대로 구성한 경우
    • master caliper의 simple 시나리오 config.yaml의 workers.number: 80 이면,
    • worker1 caliper의 simple 시나리오 config.yaml의 workers.number: 25
    • worker2 caliper의 simple 시나리오 config.yaml의 workers.number: 25
    • worker3 caliper의 simple 시나리오 config.yaml의 workers.number: 30
    • worker 3대 노드의 workers.number 총합 (25 + 25 + 30 = 80) 과 Master 노드의 workers.number 가 같아야 함
npx caliper launch master \ --caliper-workspace $CALIPER_BENCHMARKS \ --caliper-benchconfig $CHAINCODE_DIR/config.yaml \ --caliper-networkconfig $NETWORK_DIR/fabric-go.yaml
 
 

Master-Worker 실행법

  • 먼저 Master Caliper 실행 후, Worker Caliper 실행
 
Share article

Tom의 TIL 정리방