Installing and Running Caliper

HH·2022년 1월 9일
1

Hyperledger Caliper

목록 보기
6/12

Installing and Running Caliper

개요


캘리퍼는 @hyperledger/caliper-cli 패키지와 hyperledger/caliper 도커 이미지로 퍼블리싱되었다. 둘 모두 CLI 바이너리를 갖고 있다. 사용가능한 버전 및 그 복잡성은 NPM으로 설치하기도커 이미지 사용하기 섹션을 참조해라.

캘리퍼 설치 및 실행은 대개 아래 단계를 따르고, 나머지 섹션에서 디테일을 설명한다 :

  1. NPM이나 DockerHub에서 캘리퍼 CLI를 얻는다.
  2. CLI로 bind 커맨드를 실행한다. 이 단계는 선택된 플랫폼의 SDK 패키지의 지정된 버전을 가져온다.
  3. CLI나 도커이미지로 벤치마크를 시작한다.

나머지 문서에서 사용하는 예시는 캘리퍼 워크스페이스로 캘리퍼 벤치마크 리포지토리를 사용한다. 이것은 벤치마킹을 위한 다양한 샘플 아티팩트를 갖고 있다.

중요

사용하는 캘리퍼 버전과 일치하는 적절한 리포지토리 태그/커밋을 선택했는지 확인하자.

caliper-benchmarks리포지토리를 복사하기 위해 아래를 실행해라 :

git clone https://github.com/hyperledger/caliper-benchmarks.git
cd caliper-benchmarks
git checkout <원하는 캘리퍼 버전>

참고

커스텀 벤치마크를 구동하고 있는 경우 디렉토리 경로(와 다른 관련된 구성들)을 적절히 바꿔라.

캘리퍼 CLI


어플리케이션에 캘리퍼 패키지를 넣기 전 까지 CLI를 이용해 캘리퍼를 사용할 가능성이 높다. 다른 섹션은 캘리퍼 CLI를 얻고 호출하는 다른 방법을 소개한다. 이 섹션은 단순히 CLI가 제공하는 API에 집중한다.

참고

아래 예시는 CLI를 ~/caliper-benchmarks 디렉토리에 로컬로 설치했다고 가정한다. 따라서 npx 호출이 caliper 바이너리 이전에 발생한다. 구체적인 내용은 로컬 NPM 설치 섹션을 참조해라.

CLI 엔트리 포인트는 caliper 바이너리다. 버전을 확인함으로써 CLI가 제대로 설치되었는지 알 수 있다 :

user@ubuntu:~/caliper-benchmarks$ npx caliper --version
v0.4.0

CLI는 상이한 작업들을 수행하기 위한 여러 커맨드들을 제공한다. 가능한 커맨드들과 그에 대한 설명을 확인하려면 아래를 실행해라 :

user@ubuntu:~/caliper-benchmarks$ npx caliper --help
caliper <command>

Commands:
  caliper.js bind [options]       Bind Caliper to a specific SUT and its SDK version
  caliper.js launch <subcommand>  Launch a Caliper process either in a manager or worker role.
  caliper.js unbind [options]     Unbind Caliper from a previously bound SUT and its SDK version
  caliper.js completion           generate completion script

Options:
  --help, -h  Show usage information  [boolean]
  --version   Show version information  [boolean]

Examples:
  caliper bind
  caliper unbind
  caliper launch manager
  caliper launch worker

For more information on Hyperledger Caliper: https://hyperledger.github.io/caliper/

또한 다음 하위섹션에서 설명되는 방법으로 특정한 커맨드에 대한 도움말 페이지를 요청할 수 있다.

참고

커맨드 옵션은 커맨드 라인을 통해서, 또는 캘리퍼 구성 매커니즘으로 지원되는 다양한 다른 소스들에 의해 설정된다. 이 유연성은 CLI를 여러 상이한 환경에 추가하기 쉽게 한다.

bind 커맨드


캘리퍼를 얻는 방법은 NPX 패키지 설치나 도커 이미지 가져오기만큼 쉽다. 하지만 캘리퍼에게 대상으로 설정한 플랫폼이 무엇인지, 어떤 플랫폼 SDK 버전을 사용하는지 지정하기 위해서 추가 단계가 필요하다. 이 단계는 binding이라고 불리며, binding CLI 커맨드로 실행가능하다.

커맨드의 도움말 페이지를 보기 위해 실행하자 :

user@ubuntu:~/caliper-benchmarks$ npx caliper bind --help

//결과
Usage:
  caliper bind --caliper-bind-sut fabric:1.4.1 --caliper-bind-cwd ./ --caliper-bind-args="-g"


Options:
  --help, -h           Show usage information  [boolean] //사용 정보 설명
  --version            Show version information  [boolean] // 버전 정보
  --caliper-bind-sut   The name and version of the platform and its SDK to bind to  [string] //플랫폼 및 바인드되어야하는 SDK의 이름과 버전
  --caliper-bind-cwd   The working directory for performing the SDK install  [string] // SDK 설치 수행 워킹디렉토리
  --caliper-bind-args  Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter  [string] //"npm install"에 넘겨주는 추가 인수. 이 파라미터 설정을 위해서는 "=" 표기법을 사용해라 
  --caliper-bind-file  Yaml file to override default (supported) package versions when binding an SDK  [string] // SDK 바인딩 시 디폴트 패키지를 오버라이딩하는 Yaml 파일

바인딩 단계는 기술적으로 CLI로 완전히 관리되는 적절한 패키지 및 설치 설정이 포함된 추가 npm install 호출로 구성된다.

커맨드 설정에 아래 파라미터들을 쓸 수 있다 :

  • SUT/platform name and SDK version : 타겟 플랫폼과 설치할 SDK 버전을 지정한다. (예: fabric:1.4.1)
  • Working directory : npm install 커맨드가 수행되어야 하는 디렉토리. 기본값은 현재 작업 디렉토리다.
  • User arguments : npm install로 넘겨져야 하는 추가 인수. (예: --save)

아래 SUT 이름과 SDK 버전 결합이 지원된다 :

  • besu: 1.3.2, 1.3, 1.4, latest
  • ethereum: 1.2.1, latest
  • fabric: 1.1.0 [1.1], 1.4.11 [1.4, latest], 2.1.0 [2.1, latest-v2]
  • fisco-bcos: 2.0.0, latest

참고

타겟 SUT 버전과 바인딩하는 SDK가 호환되는지 확인해라

참고

Besu의 모든 패치 버전은 각각의 버전으로 지원된다. 1.3.2 SUT는 deprecated 되었으므로 대신에 1.3을 사용하기를 추천한다.

bind 명령어는 동일한 SUT 버전에 대해 여러 벤치마크를 실행할 계획일 때 유용하다. 한번 바인딩하면 재바인딩 필요 없이 서로 다른 벤치마크를 작동시킬 수 있다.
다음 섹션에서 볼 수 있듯, 필수 파라미터를 제공한다면 매니저와 워커 프로세스를 위한 launcher 커맨드를 바인딩에 사용할 수 있다.

참고

caliper-bind-file 파라미터를 YAML 파일 경로로 지정해 빌트인 바인딩을 오버라이딩할수있다. 파일은 여기서 설명되는 기본 바인딩 파일의 구조와 일치해야 한다.
이 방법으로 아직 캘리퍼가 지원하지 않는 실험적 SDK 버전을 사용할 수 있다.

이는 그러한 SDK 버전에 대해 도움을 제공할 수 없음을 의미한다!

unbind 커맨드


측정 또는 프로젝트 개발 동안 상이한 SUT SDK 버전/바인딩 간 전환이 필요할 수 있다. SUT SDK에 따라, 단순히 다른 버전으로 재바인딩하는 것은 원치 않는 패키지를 남겨 모호한 오류를 발생시킬 수 있다.

이것을 피하기 위해, CLI는 unbind 커맨드를 제공한다. 이 커맨드는 bind와 같다(심지어 같은 인수를 사용한다).
하지만 바인딩 사양에 있는 패키지를 설치하는 대신 이것은 패키지를 제거하고 앞선 바인딩의 흔적을 남겨두지 않는다.

도움말 페이지를 보려면 실행하자 :

user@ubuntu:~/caliper-benchmarks$ npx caliper unbind --help

Usage:
  caliper unbind --caliper-bind-sut fabric:1.4.1 --caliper-bind-cwd ./ --caliper-bind-args="-g"

Options:
  --help, -h           Show usage information  [boolean]
  --version            Show version information  [boolean]
  --caliper-bind-sut   The name and version of the platform and its SDK to unbind  [string] //언바인드하는 플랫폼 및 SDK의 이름과 버전
  --caliper-bind-cwd   The working directory for performing the SDK removal  [string] //SDK 제거를 수행할 워킹디렉토리
  --caliper-bind-args  Additional arguments to pass to "npm remove". Use the "=" notation when setting this parameter  [string] //추가 인수 (npm remove에 전달하는). 파라미터 설정을 위해 "=" 표기를 사용해라
  --caliper-bind-file  Yaml file to override default (supported) package versions when unbinding an SDK  [string] //SDK를 언바인딩할때 디폴트 패키지를 오버라이딩하는 yaml 파일

참고

글로벌하게 bind/unbind를 실행하거나(캘리퍼 도커 이미지에 의해 수행되는 것과 같은 방식이다), binding/unbinding 수행 시 --caliper-bind-args="--save-dev" 인자를 사용하는 것을 추천한다.
이것은 npm이 패키지를 올바르게 제거할 것을 보장한다.

launch 커맨드


캘리퍼는 워크로드를 생성하기 위해 워커 프로세스를 사용해 벤치마크를 구동한다. 또한 워커 프로세스 간 서로 다른 벤치마크 라운드를 조정하기 위해 매니저 프로세스를 사용한다. 따라서, CLI는 매니저와 워커 프로세스를 런칭하기 위한 명령어를 제공한다.

도움말 페이지를 보기 위해 실행해라 :

user@ubuntu:~/caliper-benchmarks$ npx caliper launch --help
caliper launch <subcommand>

Launch a Caliper process either in a manager or worker role.
//매니저 또는 워커의 역할로 캘리퍼 프로세스를 런칭한다.

Commands:
// 벤치마크 구동을 조정하기 위한 매니저 프로세스를 런칭한다
  caliper launch manager [options]  Launch a Caliper manager process to coordinate the benchmark run
// 벤치마크 워크로드를 생산하기 위한 워커 프로세스를 런칭한다 
  caliper launch worker [options]  Launch a Caliper worker process to generate the benchmark workload

Options:
  --help, -h  Show usage information  [boolean]
  --version   Show version information  [boolean]

launch manager command


캘리퍼 매니저 프로세스는 분산된 벤치마크 실행 시작점으로 간주될 수 있다. 이것은 벤치마크 실행 동안 워커 프로세스를 조정(그리고 선택적으로 생성)한다.

도움말 페이지를 보기 위해서는 실행해라:

user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager --help
Usage:
 caliper launch manager --caliper-bind-sut fabric:1.4.1 [other options]

Options:
  --help, -h           Show usage information  [boolean]
  --version            Show version information  [boolean]
  --caliper-bind-sut   The name and version of the platform to bind to  [string]
  --caliper-bind-cwd   The working directory for performing the SDK install  [string]
  --caliper-bind-args  Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter  [string]
  --caliper-bind-file  Yaml file to override default (supported) package versions when binding an SDK  [string]

launch manager 프로세스는 bind 커맨드의 파라미터 또한 처리할 수 있다. 바인딩과 벤치마크 실행을 한번에 수행할 때 사용한다.

하지만 이 커맨드는 아래 설정들을 반드시 설정해야 한다 :

  • caliper-workspace : 프로젝트 루트가 될 디렉토리. 다른 구성파일 또는 설정과 관련된 모든 경로가 이 디렉토리에서 처리된다. 워크스페이스 개념은 여러 다른 기계 간 캘리퍼 프로젝트 이식을 위해 도입되었다.
  • caliper-benchconfig : 아키텍처 페이지에서 자세히 다루는 테스트 라운드 구성을 갖고 있는 파일 경로. 워크스페이스 경로에 대한 상대경로로 지정되어야 한다.
  • caliper-networkconfig : 선택된 SUT를 위한 네트워크 구성/설명을 포함한 경로. 각 어뎁터 구성 페이지에 자세히 설명된다. 워크스페이스 경로에 대한 상대경로로 설정되어야 한다.

launch worker command


캘리퍼 워커 프로세스는 벤치마크가 실행되는 동안 워크로드를 생성한다. 일반적으로 둘 이상의 워커 프로세스가 작동하고 단일 매니저 프로세스에 의해 조정된다.

도움말 페이지를 보기 위해 실행해라:

user@ubuntu:~/caliper-benchmarks$ npx caliper launch worker --help
Usage:
 caliper launch manager --caliper-bind-sut fabric:1.4.1 [other options]

Options:
  --help, -h           Show usage information  [boolean]
  --version            Show version information  [boolean]
  --caliper-bind-sut   The name and version of the platform to bind to  [string]
  --caliper-bind-cwd   The working directory for performing the SDK install  [string]
  --caliper-bind-args  Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter  [string]
  --caliper-bind-file  Yaml file to override default (supported) package versions when binding an SDK  [string]

매니저 프로세스와 같은 방법으로 워커 프로세스를 구성할 수 있다. 추가 바인딩 스텝을 포함하고 앞선 세션에서 설명한 세 가지 필수 파라미터를 요구한다.

캘리퍼 테스트 페이즈 컨트롤


캘리퍼 커맨드는 모든 런타임 구성 설정을 전달할 수 있다. 이 커맨드들의 하위 집합은 흐름 제어(플로우 컨트롤; 아래 나열된 캘리퍼 페이즈를 직접 제어하기 위함)을 위한 것이다:

  • start
  • init
  • install
  • test
  • end

정확한 플래그 사용을 통해 위 페이즈를 뛰어넘거나 한 페이즈만을 수행할 수 있다. 예를 들어, --caliper-flow-only-test 플래그를 사용함으로써 캘리퍼 타겟이 될 수 있는 기존 네트워크를 가지는 것이 일반적이다.

NPM으로 설치하기


캘리퍼는 @hyperledger/caliper-cli NPM package로 퍼블리싱되었다. 이것은 모든 지원되는 어댑터를 한번에 설치하는 기능을 지원한다.

Versioning Semantics


캘리퍼 설치 설명 전에 CLI 패키지의 Versions 페이지를 보자. 태그 및 버전의 목록을 볼 수 있을 것이다. NPM이 낯설다면 버전을 소스 코드의 특정한 버전(duh)의 불변하는 포인터로 생각하자.
태그는 특정 버전에 대한 변화가능한 포인터이다. 그래서 태그는 가리키는 곳을 바꿀 수 있다.

하지만 이것이 왜 중요할까? 캘리퍼가 아직 릴리즈 전 라이프 사이클에 머물러 있기 때문이다(< v.1.0.0). 이것은 사소한 버전 범프조차 브레이킹 체인지를 만들 수 있다는 것을 뜻한다. 그리고 프로젝트에 캘리퍼를 사용하는 경우 캘리퍼를 설치하는 방법에 따라 놀라움을 겪을 수 있다는 것을 뜻한다.

참고

캘리퍼가 v.1.0.0에 도달할 때 까지 NPM으로 설치를 할 때 명시적인 버전 넘버를 사용해라. 즉, 지금은 NPM의 필수 방해일 뿐인 latestunstable 플래그는 잊어버리자.
나중에 볼 수 있듯, 도커 이미지를 위한 이런 플래그를 제공하지 않는다.

이제 플래그를 무시하고 마주칠 두 종류의 버전 넘버를 보자 :

  • 0.2.0 : 이 형식의 버전 넘버는 해당 릴리즈가 관리자에 의해 안정적인 것으로 여겨진다는 것을 의미한다. 이런 버전은 calipercaliper-benchmarks 리포지토리 양쪽 모두에 관련된 깃헙 태그를 가진다. 더해서, 문서 페이지의 매칭 버전을 통해 마지막 안정적 버전이 게시된다. 그러므로 이슈가 생길 때는 다른 버전을 정렬했는지 확인하길 바란다.
  • 0.4.0-unstable-20200206065953 : 이런 버전 "넘버"는 모든 merged pull request에 대해 게시되는 불안정한 릴리즈이고, 궁극적으로는 안정적인 버전이 될 것이다(예: 0.4.0). 이 방법으로 언제나 저장소의 마스터 브랜치와 관련된 NPM(그리고 도커)에 접근할 수 있다. 안정적인 릴리즈가 되기 전에 버그를 찾고 수정해 보자!

참고

가장 최신 unstable 릴리즈는 언제나 관련 리포지토리의 최신 버전과 문서 페이지의 vNext에 해당된다.

사전 요구사항


NPM에서 CLI를 설치하기 위해 아래 도구가 필요하다 :

  • node-gyp, python2, make, g++, git (설치 과정 동안 패키지를 가져오고 컴파일하기 위해)
  • Node.js v8.X LTS 또는 v10.X LTS (캘리퍼 실행을 위해)
  • Docker와 Docker Compose (로컬 예제 또는 도커 이미지를 통한 사용에 필요하다)

로컬 NPM 설치


참고

이것은 프로젝트에 캘리퍼를 설치하는 추천 방법이다. 프로젝트 의존성을 로컬로 유지하는 것은 여러 캘리퍼 프로젝트 설정을 쉽게 만든다. 글로벌 의존성은 새 벤치마크를 실행할 때마다 리빌딩되어야 한다(올바른 글로벌 의존성인지 확실히 하기 위해서이다).

  1. NPM프로젝트 디테일을 npm init (또는 npm init -y)로 설정한다. 설정은 워크스페이스에서 한다(package.json 파일 등을 아직 갖고 있지 않다면).
  2. 다른 NPM 패키지들과 마찬가지로 캘리퍼 CLI를 설치한다. 버전 넘버를 지정하는 것을 추천한다 (예: @hyperledger/caliper-cli@0.4.0)
  3. CLI를 요구되는 플랫폼 SDK와 바인딩한다(예: 패브릭과 1.4.0 SDK)
  4. 로컬 CLI 바이너리(npm사용)를 적절한 파라미터와 함께 호출한다. 이 단계를 원하는 패브릭 1.4.0 벤치마크만큼 반복한다.

한번에 적으면 다음과 같다:

user@ubuntu:~/caliper-benchmarks$ npm init -y
user@ubuntu:~/caliper-benchmarks$ npm install --only=prod \
    @hyperledger/caliper-cli@0.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper bind \
    --caliper-bind-sut fabric:1.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager \
    --caliper-workspace . \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

매니저 프로세스를 런칭할 때 자동으로 바인딩이 수행되도록 할 수 있다(캘리퍼 런처 매니저의 추가 파라미터에 참고하자) :

user@ubuntu:~/caliper-benchmarks$ npm init -y
user@ubuntu:~/caliper-benchmarks$ npm install --only=prod \
    @hyperledger/caliper-cli@0.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager \
    --caliper-bind-sut fabric:1.4.0 \
    --caliper-workspace . \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

참고

--only=prod 파라미터를 2단계에서 지정하는 것은 모든 플랫폼에 대한 디폴트 최신 SDK 의존성이 설치되지 않게 하기 위해서이다. 명시적인 바인딩을 수행하기 때문에(그리고 단일 플랫폼만을 위해서 수행하는 것이기 때문에), 이 방법은 추천되는 접근방식이고 저장공간과 시간을 절약할 수 있다.

참고

언제나 SUT버전, 바운드 SDK, 사용하는 아티팩트가 일치하는지 확인해라.

글로벌 NPM 설치


참고

캘리퍼 CLI를 글로벌로 설치하는 이유가 있는지 확인하자. 추천되는 접근 방식은 로컬 설치이다. 그렇게 하면 프로젝트가 독립적이고, 각각 다른 SUT(또는 다른 SUT 버전)을 타겟으로 삼는 여러 프로젝트를 (여러 디렉토리에) 쉽게 설정할 수 있다. 의존성을 글로벌 설치 또는 리빌딩하는 것은 까다로울 수 있다.

로컬 설치와 비교해 몇몇 마이너한 차이가 있다:
1. package.json 파일이 필요하지 않다.
2. 설치, 바인딩, 구현 단계를 어디서든 수행할 수 있다(즉, 작업공간만 지정하면 된다).
3. CLI를 글로벌하게 설치할 필요가 있다(-g 플래그).
4. 바인딩 단계에서 패키지를 글로벌하게 설치해야 한다(--caliper-bind-args 파라미터).
5. npx 커맨드를 생략할 수 있다. caliperPATH에 포함될 것이기 때문이다.

user@ubuntu:~$ npm install -g --only=prod @hyperledger/caliper-cli@0.4.0
user@ubuntu:~$ caliper bind \
    --caliper-bind-sut fabric:1.4.0 \
    --caliper-bind-args=-g
user@ubuntu:~$ caliper launch manager \
    --caliper-workspace ~/caliper-benchmarks \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

참고

글로벌 설치를 위해서는 디렉토리를 작업공간으로 바꿀 필요가 없다. 단순히 --caliper-workspace ~/caliper-benchmarks를 지정할 수 있다. 하지만 이 방법으로는 아티팩트의 상대 경로에 대한 커맨드라인의 자동 완성 기능을 활용할 수 없다.

NPM 설정에 따라, 사용자가 home 디렉토리 이외 공간에 대한 쓰기 권한이 필요할 수 있다. 이는 종종 접근 거부 에러를 일으킨다. 이 문제를 우회하기 위해서 여기를 참고할 수 있다.

도커 이미지 사용하기


캘리퍼는 hyperledger/caliper 도커 이미지로 퍼블리싱되었다. 이것은 모든 지원되는 어댑터에 단일 포인트 사용을 제공한다. 이 이미지는 가능한 작은 이미지 사이즈를 유지하기 위해 node:10.16-alpine 이미지를 기반으로 한다.

이미지의 중요한 properties는 다음과 같다:

  • 워킹디렉토리: /hyperledger/caliper/workspace
  • 커맨드는 (기본 이미지에서 생성되는) node 사용자에 의해 실행된다.
  • 환경변수 CALIPER_WORKSPACE/hyperledger/caliper/workspace로 설정된다.
  • entry point는 글로벌하게 설치된 caliper 라이브러리다.
  • 환경변수 CALIPER_BIND_ARGS-g로 설정된다. 그래서 바인딩 단계도 글로벌하게 이루어진다.
  • 기본 커맨드는 --version으로 설정된다. 이것은 이미지를 사용할 때 오버라이딩된다.

이는 다음과 같은 의미를 갖는다:
1. 로컬 워크스페이스를 /hyperledger/caliper/workspace 컨테이너 디렉토리에 마운트하는 것을 추천한다. 기본 CALIPER_WORKSPACE 환경변수 값이 이 위치를 가리키고 있으므로, 이것을 명시적으로 설정할 필요가 없어 수정해야 하는 설정이 하나 줄어든다.
2. launch managerlaunch worker중 실행할 커맨드를 선택해야 한다. 정확한 구문은 도커 및 Docker-compose 예제를 확인하자.
3. NPM 설치 바인딩 단계는 여전히 필요하다. 어떤 커맨드를 사용하든, 필요한 바인딩 파라미터만 설정하면 된다. 이를 수행하는 가장 쉬운 방법은 CALIPER_BIND_SUT 환경변수를 통하는 것이다.
4. 런칭된 매니저 또는 워커에 필요한 파라미터를 설정해야 한다. 가장 쉬운 방법은 CALIPER_BENCHCONFICALIPER_NETWORKCONFIG 환경변수를 사용하는 것이다.

컨테이너 시작하기


(위에서 추천한 방법에 따라) 캘리퍼 컨테이너를 실행하는 방법은 다음과 같다:
1. 필요한 이미지 버전을 선택한다.
2. 로컬 워킹 디렉토리를 컨테이너 디렉토리로 마운트한다.
3. 필요한 바인딩 및 구동 파라미터를 설정한다.

참고

최신(또는 기타) 태그는 지원되지 않는다. 즉, 명시적으로 원하는 이미지 버전을 지정해야한다: hyperledger/caliper:0.4.0. 이것은 NPM 패키지 설정에 추천되는 접근 방식과 같다.

이를 함께 모아서, 명확성을 위해 여러 줄로 나누고 컨테이너 이름을 caliper로 지정하면 다음과 같다:

user@ubuntu:~/caliper-benchmarks$ docker run \
    -v $PWD:/hyperledger/caliper/workspace \
    -e CALIPER_BIND_SUT=fabric:1.4.0 \
    -e CALIPER_BENCHCONFIG=benchmarks/scenario/simple/config.yaml \
    -e CALIPER_NETWORKCONFIG=networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml \
    --name caliper hyperledger/caliper:0.4.0 launch manager

참고

위 네트워크 구성 파일은 로컬 도커 기반 패브릭 네트워크를 스핀업하기 위한 시작 스크립트를 포함하고 있는데, 이 형식에서는 동작하지 않는다. 따라서 시작 및 종료 스크립트를 확실히 제거하고 노드 엔드포인트를 원격 주소로 바꿔야 한다.

docker-compose 사용하기


위 커맨드는 docker-compose.yaml 파일로 변환했을 때 더 읽기 쉽다:

version: '2'

services:
    caliper:
        container_name: caliper
        image: hyperledger/caliper:0.4.0
        command: launch manager
        environment:
        - CALIPER_BIND_SUT=fabric:1.4.0
        - CALIPER_BENCHCONFIG=benchmarks/scenario/simple/config.yaml
        - CALIPER_NETWORKCONFIG=networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
        volumes:
        - ~/caliper-benchmarks:/hyperledger/caliper/workspace

docker-compose.yaml 파일이 위치한 디렉토리로 이동하고 단순히 실행하면 된다:

docker-compose up

소스로 로컬에 설치하기


참고

이 섹션은 pull request 이전에 캘리퍼 코드베이스를 수정하고 변경 사항을 로컬에서 실험하려는 개발자를 위한 것이다. 변화를 올바르게 전파하려면 테스트하고 싶은 수정 작업을 수행할 때마다 아래 단계를 수행해야 한다.

캘리퍼 코드베이스를 수정하는 워크플로우는 일반적으로 다음 단계들로 구성된다:
1. 리포지토리 부트스트래핑
2. 코드 수정 및 테스트
3. 패키지 변화를 로컬에 퍼블리싱
4. 도커 이미지 빌드

캘리퍼 리포지토리 부트스트래핑


리포지토리의 기본 의존성을 설치하고 다른 패키지 간 cross-reference를 해결하기 위해, 반드시 아래 커맨드들을 리포지토리 디렉토리 루트에서 실행해야 한다:
1. npm i : Lerna와 라이선스 체킹 패키지같은 development-time dependencies를 설치한다.
2. npm run repoclean : 리포지토리에 있는 모든 패키지의 node_modules 디렉토리를 정리한다. 새로 복사된 리포지토리에는 필요하지 않다.
3. npm run bootstrap : 리포지토리에 있는 모든 패키지의 dependencies를 설치하고, 모든 패키지 간 cross-dependencies를 연결시킨다. 설치를 마칠 때 까지 시간이 걸릴 것이다. ctrl+c로 중단할 경우 package.json 파일을 먼저 복원시킨 후 npm run bootstrap을 다시 실행한다.

또는 한 줄로 실행한다:

user@ubuntu:~/caliper$ npm i && npm run repoclean -- --yes && npm run bootstrap

주의

위 커맨드 중 어떤 것이든 sudo로 실행하지 말아야 한다. 부트스트랩 프로세스가 실패한다.

코드 테스팅


변경사항을 테스트하는 가장 쉬운 방법은 CI 프로세스를 로컬에서 구동시키는 것이다. 현재 CI 프로세스는 특정 어댑터들의 벤치마크를 동작시킨다. BENCHMARK 환경변수를 플랫폼 이름으로 설정하고 리포지토리 루트 디렉토리에서 아래 스크립트를 작동시킴으로써 테스트들을 일으킬 수 있다:

user@ubuntu:~/caliper$ BENCHMARK=fabric ./.travis/benchmark-integration-test-direct.sh

아래 플랫폼 테스트가 가능하다(즉, 아래 값들이 유효한 BENCHMARK 값이다):

  • besu
  • ethereum
  • fabric
  • fisco-bcos

스크립트는 다음 테스트들을 수행한다 (그리고 성공적인 pull request에도 필수적이다):

  • Linting checks
  • Licence header checks
  • Unit tests
  • Running sample benchmarks

다른 예시를 작동시키고 싶을 경우, 어떤 로컬 퍼블리싱 없이 packages/caliper-cli 디렉토리에서 CLI에 직접 접근할 수 있다.

참고

이 케이스에서 SDK 의존성은 고정되어 있다 (바인딩 단계가 이 접근방식에서는 지원되지 않는다). 그리고 그것들을 해당 패키지의 package.json 파일에서 확인 및 변화시킬 수 있다. 이 경우 리포지토리는 다시 부트스트랩되어야 한다.

user@ubuntu:~/caliper$ node ./packages/caliper-cli/caliper.js launch manager \
    --caliper-workspace ~/caliper-benchmarks \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

로컬 NPM 리포지토리에 퍼블리싱


수정된 코드베이스를 위한 NPM 퍼블리싱 및 설치 단계는 로컬 NPM 프록시 서버 Verdaccio를 통해 테스트할 수 있다. 이를 수행하기 위한 단계는 다음과 같다:
1. 퍼블리싱을 위한 로컬 Verdaccio 서버를 시작한다.
2. 로컬 및 수정 가능한 캘리퍼 리포지토리에서 Verdaccio 서버로 패키지를 퍼블리싱한다.
3. Verdaccio 서버로부터 CLI를 설치하고 바인딩한다.
4. 통합 테스트 또는 샘플 벤치마크를 구동한다.

packages/caliper-publish 디렉토리는 다음 단계들을 쉽게 관리하기 위한 내부 CLI를 가지고 있다. 그러므로 아래 섹션의 커멘드들은 반드시 packages/caliper-publish 디렉토리에서 실행되어야 한다:

user@ubuntu:~/caliper$ cd ./packages/caliper-publish

주의

아래 CLI 커맨드들과 서브커맨드들에 대한 더 자세한 내용을 알아보려면 --help 플래그를 사용하자.

Verdaccio 시작하기


로컬 Verdaccio 서버를 설치하고 시작하기 위해서는 아래 커맨드를 실행한다:

user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js verdaccio start
...
[PM2] Spawning PM2 daemon with pm2_home=.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/user/projects/caliper/packages/caliper-tests-integration/node_modules/.bin/verdaccio in fork_mode (1 instance)
[PM2] Done.
┌───────────┬────┬──────┬────────┬────────┬─────────┬────────┬─────┬───────────┬────────┬──────────┐
│ App name  │ id │ mode │ pid    │ status │ restart │ uptime │ cpu │ mem       │ user   │ watching │
├───────────┼────┼──────┼────────┼────────┼─────────┼────────┼─────┼───────────┼────────┼──────────┤
│ verdaccio │ 0  │ fork │ 115203 │ online │ 0       │ 0s     │ 3%  │ 25.8 MB   │ user   │ disabled │
└───────────┴────┴──────┴────────┴────────┴─────────┴────────┴─────┴───────────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

이제 Verdaccio 서버가 http://localhost:4873를 리스닝한다.

패키지 퍼블리싱하기


Verdaccio가 구동되면 아래 커맨드를 실행해 모든 캘리퍼 패키지를 로컬로 퍼블리싱할 수 있다:

user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js npm --registry "http://localhost:4873"
...
+ @hyperledger/caliper-core@0.4.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-core@0.4.0-unstable-20200206065953
...
+ @hyperledger/caliper-fabric@0.4.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-fabric@0.4.0-unstable-20200206065953
...
+ @hyperledger/caliper-cli@0.4.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-cli@0.4.0-unstable-20200206065953

로그에 보이는 동적 버전 번호를 기록해 두어야 한다. Verdaccio로부터 수정된 캘리퍼 버전을 설치하기 위해 필요하다 (unstable 태그 또한 NPM에 존재하므로, Verdaccio가 로컬 버전 대신 해당 버전을 가져올 수 있다).

퍼블리시된 패키지는 버전에 초-정밀(second-precision) 타임스탬프를 가지고 있기 때문에, Verdaccio 서버를 재시작하거나 패키지 충돌을 걱정할 필요 없이 즉시 변경사항을 리퍼블리싱할 수 있다.

패키지 기반 테스트 구동하기


패키지가 로컬 Verdaccio 서버에 퍼블리싱되고 나면 일반적인 NPM 설치 접근 방식을 사용할 수 있다. 유일한 차이점은 기본 퍼블릭 NPM 레지스트리 대신 로컬 Verdaccio 레지스트리를 설치 소스로 지정한다는 것이다.

user@ubuntu:~/caliper-benchmarks$ npm init -y
user@ubuntu:~/caliper-benchmarks$ npm install --registry=http://localhost:4873 --only=prod \
    @hyperledger/caliper-cli@0.4.0-unstable-20200206065953
user@ubuntu:~/caliper-benchmarks$ npx caliper bind --caliper-bind-sut fabric:1.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager \
    --caliper-workspace . \
    --caliper-benchconfig benchmarks/scenario/simple/config.yaml \
    --caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml

주의

캘리퍼 패키지에 대해서만 로컬 레지스트리를 사용했다. 바인딩은 퍼블릭 NPM 레지스트리를 통해 일어난다. 더해서, npx와 새로 설치된 CLI 바이너리를 통해 명령을 수행했다(즉, CLI 코드 파일을 직접 호출하지 않는다).

도커 이미지 빌딩


수정된 패키지가 로컬 Verdaccio 서버에 퍼블리싱되면 도커 이미지를 리빌딩할 수 있다. Dockerfilepackages/caliper-publish 디렉토리에 있다.

도커 이미지 리빌딩을 위해 아래를 실행한다:

user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js docker
...
Successfully tagged hyperledger/caliper:manager-unstable-20200206065953
[BUILD] Built Docker image "hyperledger/caliper:manager-unstable-20200206065953"

이제 이전 섹션에서 설명한 대로 도커 기반 벤치마킹을 진행할 수 있다.

주의

로컬로 퍼블리싱한 패키지 작업이 끝나면 아래 방법을 통해 정리할 수 있다:

user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js verdaccio stop

라이선스

The Caliper codebase is released under the Apache 2.0 license. Any documentation developed by the Caliper Project is licensed under the Creative Commons Attribution 4.0 International License. You may obtain a copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/.

0개의 댓글

관련 채용 정보