Runtime Configuration

HH·2022년 1월 9일
0

Hyperledger Caliper

목록 보기
10/12

Runtime Configuration

개요


캘리퍼는 유연하고 계층적인 구성 메커니즘을 런타임 관련 설정에 제공하기 위해 nconf 패키지에 의존한다. 계층적 구성이란 런타임 설정이 다양한 소스 및 위치에서 설정되거나 오버라이딩 될 수 있으며, 그들 간에 우선순위가 있다는 뜻이다.

일반적으로, 설정은 특정 값과 관련된 단순한 문자열 키이다. 하지만, 설정을 사용하는 계층에서 모듈의 위치를 따르는 방식으로 키를 구성하는 것이 추천된다. 아래 키 예시를 고려해 보자:

caliper-fabric-timeout-invokeorquery

키는 설정의 목적을 구분하기 쉽도록 여러 분리된 부분으로 구성되어 있다: 이것은 캘리퍼에서, 패브릭 커넥터에 의해 사용되며, 타임아웃 관련 설정이고, 트랜잭션 호출 또는 쿼리의 타임아웃에 사용하는 타임아웃을 지정한다. 캘리퍼의 모든 설정 키는 동일한 컨벤션을 따른다.

엄지의 법칙에 따라(경험적으로) 생각해보면, 소문자(어쩌면 숫자들)을 사용하고 위계는 대시(-)를 분리 기호로 사용해서 표시되어야 한다.

캘리퍼에 의해 사용되는 모든 설정은 caliper- 문자열 접두사를 가진다. 이 접두사는 캘리퍼 모듈의 내부 설정을 위한 네임스페이스 역할을 한다. 이것은 이름 충돌을 방지하기도 하는데, 이는 구성 메커니즘이 다양한 소스에서, 예를 들어 하부 SDK 모듈이나 워크로드 모듈을 목적으로 한, 가능한 모든 설정을 분석하기 때문이다.

모든 가능한 런타임 설정은 마지막 섹션을 보자.

소스 설정


캘리퍼는 런타임 설정이 설정되고 오버라이딩 될 수 있는 아래 소스들 및 위치들을 지원한다. 최상위 우선순위부터 나열한다:
1. 메모리
2. 커맨드 라인 매개변수
3. 환경변수
4. 프로젝트 수준 구성 파일
5. 유저 수준 구성 파일
6. 머신 수준 구성 파일
7. 대체 및 기본 구성 파일

단순화을 위해, 위 순서를 다음과 같이 생각할 수 있다: 설정이 사용 시점과 가까울수록 설정값의 우선순위가 높다.

인 메모리 설정


어떤 구성요소가(내부 구성요소 혹은 플러그인) (구성 API를 사용해) 런타임으로 설정된다면, 그 값은 다른 소스 및 위치에 있는 어떤 같은 설정보다 우선된다.

단순 구성 API는 @hyperledger/caliper-core 패키지의 ConfigUtil 모듈에 의해 제공된다. 이것은 단순한 get, set 메서드에 의해 export 된다:

  • get(key:string, fallbackValue:any) => any

    주어진 키와 관련된 설정값을 리턴한다. 설정이 어떤 소스에서도 정해지지 않았다면 fallbackValue가 반환된다.

  • set(key:string, value:any)

    주어진 키와 관련된 값을 설정한다. 이것은 다른 소스들에 의해 설정된 값을 오버라이딩한다.

예:

const { ConfigUtil } = require('@hyperledger/caliper-core');

// retrieves a setting for your module, if not set, use some default
const shouldBeFast = ConfigUtil.get('mymodule-performance-shoudbefast', /*default:*/ true);

if (shouldBeFast) { /* ... */ } else { /* ... */ }

위 코드는 플러그인 모듈이 어떻게 쉽게 캘리퍼 구성 메커니즘에 영향을 미칠 수 있는지를 보여주기도 한다. ymodule-performance-shoudbefast 설정이 구성 API를 통해 쿼리되기 때문에, 다양한 소스로부터 이것을 자동으로 설정하는 것이 가능해진다 (자세한 내용은 다음 섹션을 보자).

즉, 모듈에 유연한 런타임 설정을 더하려면 필요할 때 구성 API를 통해 해당 쿼리를 (원하는 기본 값과 대체값으로) 설정하기만 하면 된다.

커맨드라인 설정


서드 파티 코드(예: 캘리퍼나 워크로드 모듈) 동작에 영향을 미치고 싶을 경우, 일반적으로 소스 코드의 설정을 덮어쓰지 못한다(그리고 하고 싶지 않다). 서트파티 및 사전 패키지된 어플리케이션 동작 수정을 위한 표준적인 방법은 커맨드라인 argument를 통한 설정을 제공하는 것이다.

캘리퍼를 CLI를 통해 시작할 때, 런타임 설정을 아래 방법으로 오버라이딩 할 수 있다:

caliper launch manager \
    --caliper-workspace yourworkspace/ \
    --caliper-benchconfig yourconfig.yaml \
    --caliper-networkconfig yournetwork.yaml \
    --mymodule-performance-shoudbefast=true

argument들은 소문자로 변환되고 모든 _-로 대체된다. 그러므로 위 커맨드라인은 아래와 같이 사용할 수도 있다:

caliper launch manager \
    --caliper-workspace yourworkspace/ \
    --caliper-benchconfig yourconfig.yaml \
    --caliper-networkconfig yournetwork.yaml \
    --MyModule_Performance_ShoudBeFast=true

두 방법 다 mymodule-performance-shoudbefast키에 booleantrue를 할당할 것이다.

nconf가 값을 자동으로 일반적인 타입으로 해석하므로, truefalse 값은 boolean으로 해석되고 (get 함수를 통해 반환된)다는 것에 주의하자. 이는 또한 integer와 floating point 숫자값을 가질 수 있다.

truefalse 값을 명시적으로 설정하지 않고도 boolean 값을 플래그에 지정할 수 있다.

  • 키를 true로 지정한다:
  caliper launch manager \
      --caliper-workspace yourworkspace/ \
      --caliper-benchconfig yourconfig.yaml \
      --caliper-networkconfig yournetwork.yaml \
      --mymodule-performance-shoudbefast
  • no- 접두사를 이용해 false로 지정한다:
  caliper launch manager \
      --caliper-workspace yourworkspace/ \
      --caliper-benchconfig yourconfig.yaml \
      --caliper-networkconfig yournetwork.yaml \
      --no-mymodule-performance-shoudbefast

커맨드라인 arguments들은 다음 섹션들에서 정해진 설정을 덮어쓸 수 있다.

환경변수


캘리퍼가 스크립트 환경의 일부분인 경우 캘리퍼에 커맨드라인 argument들을 전달해 스크립트를 수정하는 것이 성가실 수 있다. 이런 경우 일반적인 접근 방식은 환경 변수를 사용하는 것이다.

환경변수를 사용한 예시는 다음과 같다:

export MYMODULE_PERFORMANCE_SHOULDBEFAST=true

# calling some script containing the following command
caliper launch manager \
    --caliper-workspace yourworkspace/ \
    --caliper-benchconfig yourconfig.yaml \
    --caliper-networkconfig yournetwork.yaml

환경변수 설정의 표준 표기법을 주의하자: 대문자가 _로 나뉘어진다. 캘리퍼는 커맨드 라인 argument와 동일한 변환을 수행한다: 변수 이름은 소문자로 변환되고 _-로 대체된다. 그러므로 위 설정은 mymodule-performance-shoudbefast 키에 불리언 값 true설정한 것과 같다.

구성파일


사용자가 다수의 런타임 설정을 변경하고 싶을 수 있다. 커맨드라인이나 환경변수 사용은 성가시고 읽기 어려울 수 있다. 또한, 어떤 경우에는 구성이 CLI 호출 위치 주변에 내장되는 것 보다 별도의 프로젝트 아티팩트(예: 버전 컨트롤이 가능하도록)가 되는 것이 바람직하다.

구성 파일 사용은 관리하기 쉬운 방법으로 여러 설정을 오버라이딩하는 일반적인 방법이다. 캘리퍼는 설정 계층에 구성 파일을 삽입할 수 있는 여러 구성 "위치"를 제공한다. 이 위치들 또한 계층 구성 메커니즘의 "가까운 것이 이기는" 법칙을 따른다.

또한, YAML 기반 구성 파일을 사용하면 구성이 자체 문서화되고 자기충족적(self-contained)이 될 수 있도록 주석을 사용할 수 있다.

YAML파일의 키 이름에서는 추가 변환이 수행되지 않는다. 각 객체 계층으로부터 플랫 문자열 키를 가져오기 위해 '-'로 연결하기만 하면 된다.

그러므로 계층적 설정은 다음과 같이 이루어진다:

mymodule:
  performance:
    shouldbefast: true

이것은 mymodule-performance-shouldbefast키에 true를 지정한 것으로 파싱된다.

프로젝트 수준


캘리퍼 벤치마크 프로젝트에서 언제나 오버라이딩되는 설정 그룹이 있다면, 그것들을 프로젝트 수준 구성 파일로 지정하는 것이 좋다. 이 파일은 일반적으로 기본 구성 파일 (과 커스텀 사용자 모듈과 관련된 커스텀 설정)에 정의된 하위 설정들로 구성된다.

이 프로젝트 수준 구성 파일은 두 가지 방식으로 계층에 포함될 수 있다:

  • 워크스페이스 디렉토리의 caliper.yaml 파일에서 설정을 정의한다.
  • 또는 앞서 설명한 우선 순위가 더 높은 위치 중 하나(예: 커맨드라인 argument 또는 환경변수)를 사용하여 caliper-projectconfig 설정 키를 통해 구성 파일 경로를 명시적으로 설정한다.
  • 커맨드 라인 접근방법:
    caliper launch manager \
    --caliper-workspace yourworkspace/ \
    --caliper-benchconfig yourconfig.yaml \
    --caliper-networkconfig yournetwork.yaml \
    --Caliper-ProjectConfig mypath/project1-config.yaml
  • 환경변수 접근방법:
    export CALIPER_PROJECTCONFIG=mypath/project1-config.yaml
    caliper launch manager \
        --caliper-workspace yourworkspace/ \
        --caliper-benchconfig yourconfig.yaml \
        --caliper-networkconfig yournetwork.yaml

프로젝트 수준 설정은 아래 설명될 설정들을 오버라이딩 할 수 있다.

사용자 수준


여러 캘리퍼 벤치마크 프로젝트에서 동일한 설정을 오버라이딩 하고 있다면 공통 설정을 사용자 수준 구성 파일로 발췌하는 것을 추천한다. 사용자 수준 구성 파일을 계층에 포함시키기 위해서는 그 경로를 위에서 설명한 우선순위가 높은 위치 중 하나를 사용해 caliper-userconfig 설정키로 지정한다.

  • 커맨드 라인 접근방법:
      caliper launch manager \
      --caliper-workspace yourworkspace/ \
      --caliper-benchconfig yourconfig.yaml \
      --caliper-networkconfig yournetwork.yaml \
      --Caliper-UserConfig ~/.config/my-caliper-config.yaml
  • 환경변수 접근방법:
      export CALIPER_USERCONFIG=~/.config/my-caliper-config.yaml
      caliper launch manager \
        --caliper-workspace yourworkspace/ \
        --caliper-benchconfig yourconfig.yaml \
        --caliper-networkconfig yournetwork.yaml
  • 구성 파일 접근방법 (프로젝트 수준 구성 파일):
      caliper:
        userconfig: ~/.config/my-caliper-config.yaml
    # additional settings

머신 수준


여러 사용자가 동일한 워크스테이션을 사용하고, 캘리퍼 프로젝트 및 유저 간 공통 설정을 공유하기 원한다면 머신 수준 구성 파일을 계층에 포함시킬 수 있다. 이것은 위에서 설명한 우선순위 높은 위치 중 하나를 사용하여 caliper-machineconfig 설정키를 통해 경로를 지정할 수 있다.

  • 커맨드 라인 접근방식:
      caliper launch manager \
      --caliper-workspace yourworkspace/ \
      --caliper-benchconfig yourconfig.yaml \
      --caliper-networkconfig yournetwork.yaml \
      --Caliper-MachineConfig /etc/config/caliper.yaml
  • 환경변수 접근방식:
    export CALIPER_MACHINECONFIG=/etc/config/caliper.yaml
    caliper launch manager \
        --caliper-workspace yourworkspace/ \
        --caliper-benchconfig yourconfig.yaml \
        --caliper-networkconfig yournetwork.yaml
  • 구성 파일 접근방식 (프로젝트 또는 유저 수준 구성 파일):
    caliper:
        machineconfig: /etc/config/caliper.yaml
    # additional settings

기본 구성


기본/대체 구성 파일은 합리적인 대체 값들과 캘리퍼 모듈에 의해 사용되는 각 설정들에 대한 문서를 정의하는 캘리퍼 관련 패키지와 함께 제공된다. 이 구성 파일은 지원되는 설정 위치 중 가장 낮은 우선순위를 가진다.

가능한 설정


현재 지원되는 런타임 구성 설정은 자체 문서화된 기본 구성 파일을 언제나 참조하자.

기본설정


설명
caliper-benchconfig테스트 워커(들), 테스트 라운드, 모니터를 기술하는 벤치마크 구성파일로의 경로
caliper-networkconfigSUT와 상호작용하기 위해 필요한 정보들을 포함한 네트워크 구성 파일로의 경로
caliper-machineconfig머신 수준 구성 파일 경로. 워크스페이스의 상대경로일 수 있다.
caliper-projectconfig프로젝트 수준 구성 파일 경로. 워크스페이스의 상대경로일 수 있다.
caliper-userconfig사용자 수준 구성 파일 경로. 워크스페이스의 상대경로일 수 있다.
caliper-workspace모든 구성 정보를 가지고 있는 워크스페이스 디렉토리
caliper-progress-reporting-enabled캘리퍼 매니저 프로세스에서 트랜잭션 완료 진행률 표시를 활성화하는지 지정하는 boolean 값
caliper-progress-reporting-interval캘리퍼 진행 업데이트 빈도를 지정하기 위해 사용하는 숫자 값(ms)

바인딩 설정


설명
caliper-bind-args바인딩 커맨드(예: npm install)에 전달하는 추가 매개변수
caliper-bind-cwd바인딩 커맨드(예: npm install)에 사용할 CWD(현재 워킹디렉토리)
caliper-bind-file기본 파일을 오버라이딩할 커스텀 바인딩 구성 파일 경로
caliper-bind-sut<SUT type>:<SDK version> 형식으로 지정하는 바인딩할 SUT

리포팅 설정


설명
caliper-report-charting-hue차트 색배합(color scheme)을 구성하기 위한 HUE 값
caliper-report-charting-scheme차트 색상 성에 사용되는 색배합 메서드
caliper-report-charting-transparency차트에 사용되는 투명도 [0..1]
caliper-report-optionsfs.writeFile에 전달되는 추가 객체
caliper-report-path생성되는 리포트 파일의 절대 또는 워크스페이스부터의 상대 경로
caliper-report-precision리포트 수치의 정밀도(유효 숫자)

로깅 설정


설명
caliper-logging-formats-align동일한 위치에 정렬하기 위해 메시지 앞에 탭 구분 기호를 추가한다.
caliper-logging-formats-attributeformat-\<attribute>로그 메시지 속성 <attribute>에 포맷팅 문자열을 지정한다.
caliper-logging-formats-json로그가 JSON 형식으로 직렬화(be serialized)되어야 함을 가리킨다.
caliper-logging-formats-label모든 메시지에 지정된 라벨을 붙인다. 분산된 워커 시나리오에서 유용하다.
caliper-logging-formats-pad로그 수준 문자열이 동일한 길이가 되도록 채운다(pad).
caliper-logging-formats-timestamp특정한 형식으로 메시지에 타임스탬프를 붙인다.
caliper-logging-formats-colorize-all모든 로그 메시지 속성이 채색되어야 함을 가리킨다.
caliper-logging-formats-colorize-\<attribute>메시지 속성 <attribute> 가 채색되어야 함을 가리킨다.
caliper-logging-formats-colorize-colors-\<level><level> 수준에서 로그 메시지 색상을 설정한다.
caliper-logging-targets-\<target>-enabled<target>이 활성화되는지 여부를 설정한다.
caliper-logging-templateplaceholders를 통해 메시지 구조를 지정한다.

워커 관리 설정


설명
caliper-worker-communication-method매니저와 워커 간 통신 타입을 나타낸다.
caliper-worker-communication-address분산된 워커 관리를 위해 사용되는 MQTT 브로커 주소
caliper-worker-pollinterval새 사용가능한 워커 폴링 간격(ms)
caliper-worker-remote워커가 분산 모드로 작동하는지를 나타낸다.

벤치마크 단계 설정


설정
caliper-flow-only-end네트워크 구성 파일에서 종료 커맨드 스크립트만 수행할지 여부를 나타낸다.
caliper-flow-only-init벤치마크 초기화(init) 단계만 수행할지 여부를 나타낸다.
caliper-flow-only-install벤치마크에서 스마트 컨트랙트 설치 단계만 수행할지 여부를 나타낸다.
caliper-flow-only-start네트워크 구성파일에서 시작 커맨드 스크립트만 수행할지 여부를 나타낸다.
caliper-flow-only-test벤치마크의 테스트 단계만 수행할지를 나타낸다.
caliper-flow-skip-end네트워크 구성파일 종료 커맨드 스크립트를 건너뛸지 여부를 나타낸다.
caliper-flow-skip-init벤치마크의 초기화 단계를 건너뛸지를 나타낸다.
caliper-flow-skip-install벤치마크의 스마트 컨트랙트 설치 단계를 건너뛸지를 나타낸다.
caliper-flow-skip-start네트워크 구성 파일의 시작 커맨드 스크립트를 건너뛸지를 나타낸다.
caliper-flow-skip-test벤치마크의 테스트 단계를 건너뛸지를 나타낸다.

인증 설정


설정
caliper-auth-prometheus-username기존 프로메테우스 서버로 인증하는 데 사용하기 위한 기본 인증 사용자이름
caliper-auth-prometheus-password기존 프로메테우스 서버로 인증하기 위한 기본 인증 비밀번호
caliper-auth-prometheuspush-username기존 프로메테우스 푸쉬 게이트웨이로 인증하는 데 사용하기 위한 기본 인증 사용자이름
caliper-auth-prometheuspush-password기존 프로메테우스 푸쉬 게이트웨이로 인증하기 위한 기본 인증 비밀번호

패브릭 어댑터 설정


설정
caliper-fabric-countqueryasload쿼리를 워크로드로 셀지 여부를 나타낸다. 즉, 생성될 리포트가 쿼리를 포함할지를 나타낸다.
caliper-fabric-gateway-eventstrategy사용할 이벤트 전략을 설정한다.
caliper-fabric-gateway-localhost패브릭 게이트웨이 API내부에서 로컬호스트를 기본값으로 사용할지를 나타낸다.
caliper-fabric-gateway-querystrategy사용할 쿼리 전략을 설정한다.
caliper-fabric-gateway-enabled패브릭 게이트웨이 기반 SDK API를 사용할지 여부를 가리킨다.
caliper-fabric-latencythreshold이벤트 소스의 주어진 백분율을 기반으로 보고된 트랜잭션 커밋 시간을 결정한다.
caliper-fabric-loadbalancing자동 로드밸런싱이 적용되는 방법을 결정한다.
caliper-fabric-overwritegopathGOPATH 환경변수를 임시로 워크스페이스 디렉토리로 설정할지 여부를 가리킨다.
caliper-fabric-sleepafter-createchannel채널 생성 후 휴면 시간(ms)
caliper-fabric-sleepafter-joinchannel채널 가입 후 휴면 시간(ms)
caliper-fabric-sleepafter-instantiatecontract컨트랙트 인스턴스화 후 휴면 시간(ms)
caliper-fabric-timeout-contractinstantiate컨트랙트 인스턴스화의 보증 부분에 대한 타임아웃 시간(ms)
caliper-fabric-timeout-contractinstantiateevent컨트랙트 인스턴스화 결과 이벤트 수신에 대한 타임아웃 시간(ms)
caliper-fabric-timeout-invokeorquery트랜잭션 호출 또는 쿼리에 사용하는 기본 타임아웃(ms)
caliper-fabric-verify-proposalresponse수신한 제안 리스폰스를 검증할지 여부를 가리킨다.
caliper-fabric-verify-readwritesets보증자가 반환한 읽기-쓰기 세트가 일치하는지를 검증할지 여부를 나타낸다.

라이선스

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개의 댓글