본문 바로가기

IT/Block Chain(Hyperledger)

Hyperledger Caliper 개요

 Hyperledger Caliper

유형 : 도구

상태 : 인큐베이션


 개요

 왜 캘리퍼를 써야 하는가?(Why Caliper?)

블록체인 솔루션의 성능은 블록체인 사용자의 가장 중요한 기능 중 하나입니다. 그러나 현재 중립적이고 일반적으로 수용되는 규칙 집합을 기반으로 서로 다른 블록체인 솔루션에 대한 성능 평가를 제공하는 일반적인 도구는 없습니다.

다양한 시나리오에서 서로 다른 블록체인 구현의 성능에 대한 보고서가 있지만 일반적으로 허용되는 블록체인 벤치마킹 도구는 없습니다. Hyperledger Caliper는 블록체인 프레임 워크를위한 벤치마크 도구[1]이며 벤치마킹 대상으로 작동하는 블록체인 구현에 의존합니다.

Hyperledger Caliper는 TPS (Transactions Per Second), 트랜잭션 대기 시간, 리소스 사용률 등과 같은 다양한 성능 지표를 포함하는 보고서를 생성합니다. Caliper에서 만든 결과는 다른 Hyperledger 프로젝트에서 프레임 워크를 빌드할 때 사용되며, 사용자의 특정 요구에 적합한 블록체인 구현을 선택하는 데 도움이 됩니다.

현재 제안된 모든 블록체인 프레임워크 또는 플랫폼에는 고유한 장점이 있습니다. 이러한 다양성에 비추어 볼 때, 우리는 일반적인 벤치마킹 도구가 없다는 것이 문제점이라 생각했습니다. 범용 벤치마크 도구가 필요하다고 생각하는 이유는 세 가지입니다.

  • 소스 코드가 부족합니다. 서로 다른 프로젝트에 대한 성능 보고서가 있지만 소스 코드를 제공하지 않기 때문에 평가를 검증하기가 어렵고 다른 프로젝트에서 동일한 평가를 수행하는 것이 불가능합니다.
  • 성능 지표 (예 : TPS, 대기 시간, 리소스 사용률 등)에 대한 일반적인 정의는 없습니다. Hyperledger 성능 및 확장성 작업 그룹 (PWSG, The Hyperledger Performance & Scalability Working Group(PWSG))은 이러한 정의를위한 이상적인 곳입니다. Hyperledger Caliper는 구현을 유지하기위한 좋은 출발점이자 장소입니다.
    • 성능표시를 위해 자주 쓰이는 TPS를 활용하여, 스마트 컨트렉의 복잡성을 줄이는 것이 가장 중요한 사항입니다. 이러한 스마트 컨트렉이 얼마나 간단하든 관계없이 다른 시험용 스마트 컨트렉을 사용하는 벤치마크는 결과에 부주의하게 영향을 미칩니다.
  • 벤치마킹에는 일반적으로 사용되는 벤치마크 사용 사례가 없습니다. 사용자는 유스 케이스에 대해 궁금해하고 적절한 유스 케이스와 함께 사용자가 성능 지표뿐만 아니라 블록체인 자체를 이해하도록 도와줍니다. 벤치마킹을 위한 유스 케이스는 토론에 개방되어 있으며 참여를 환영합니다.

Hyperledger Caliper는 판단을하기위한 것이 아니며 벤치마크 결과를 게시하지 않지만 사용자를위한 벤치마크 도구를 제공합니다. 사용자는 테스트 환경이 공개되지 않는 한 Caliper가 테스트한 결과를 주장해서는 안됩니다. Hyperledger Caliper 프로젝트는 Hyperledger PWSG에서 정의한 정의, 지표 그리고 용어를 참조합니다.

캘리퍼의 기술적 세부 사항(Technical details of Caliper)

Hyperledger Caliper의 핵심 구성 요소는 여러 블록체인 솔루션을 Caliper 프레임 워크에 통합하기 위해 도입된 어댑테이션 계층입니다.

어댑터는 SUT (blockchain system under test)마다 구현되며, 어댑터는 Caliper NBI[2]를 해당 블록체인 프로토콜로 변환합니다. Caliper NBI는 스마트 컨트렉을 설치하거나, 계약서를 호출하거나, 원장에게서 쿼리 상태를 가져 오는 등의 백엔드 블록체인 시스템과 상호 작용하는 작업을 포함하는 공통 블록체인 인터페이스 세트입니다. NBI는 업스트림 응용 프로그램에 여러 블록체인 시스템에 대한 테스트를 작성하는 데 사용할 수 있습니다. 자세한 내용은 Hyperledger Caliper의 설명서를 참조하십시오.

지금은 Hyperledger Fabric, Hyperledger Sawtooth 그리고 Hyperledger Iroha가 범위에 있으며 다른 블록체인 솔루션의 통합을 위한 토론과 투고는 환영합니다.

누가 캘리퍼에서 일할 것인가?(Who will work on Caliper?)

Hyperledger 커뮤니티의 PSWG와의 공동 작업은 Hyperledger Caliper의 성공에 매우 중요하며 PSWG 회의 중 Caliper에 관한 정기적인 토론을 제안합니다. 캘리퍼는 벤치마크 환경을 제한하지 않지만, 자신의 유스 케이스에 따라 사용자의 선택에 맡길 것입니다. Huawei, Hyperchain, Oracle, Bitwise, Soramitsu, IBM 및 부다페스트 기술 대학 (University of Technology and Economics)의 개발자 모두가 프로젝트에 참여하고 있습니다. 더 많은 유즈케이스는 항상 환영받습니다.

Caliper 시작하기(Getting started with Caliper)

Hyperledger Caliper는 커뮤니티에 많은 Hyperledger 프레임 워크를 실행할 수있는 벤치마크 툴을 제공합니다. 커뮤니티의 도움으로 우리는 성과 지표 및 벤치마크 유스 케이스의 정의에 지속적으로 노력할 것입니다. 이 프로젝트의 성공 여부는 벤치마크 도구로 사용하는 커뮤니티 내의 많은 사용자에 달려 있습니다.

github에서 Hyperledger Caliper에 참여할 수 있습니다. (곧 제공 될 예정입니다.) https://github.com/hyperledger/caliper Rocket.Chat의 #caliper 채널 및 hyperledger-caliper 메일링 리스트를 통해 Hyperledger Caliper 커뮤니티에 가입 할 수도 있습니다. 항상 그렇듯이 개발자는 github, Rocket.Chat, wiki 또는 메일 링리스트를 통해 다른 프로젝트에 대한 우리의 노력에 동참할 것을 권장합니다. Twitter에서 Hyperledger를 따르거나 질문이 있으시면 info@hyperledger.org로 이메일을 보내주십시오.

캘리퍼 github

(https://github.com/hyperledger/caliper)

캘리퍼 사양(Caliper Introduction)

현재 지원되는 블록체인 솔루션 :

  • fabric v1.0+ (최신 버전은 v1.1.0)
  • Sawtooth 1.0+
  • Iroha (develop branch @fcc2f7c8ceaee4f7654c3b216d65b8906a35f633)

Hyperledger Composer도 지원됩니다. Composer 성능 테스트를 참조하십시오..

현재 지원되는 성과 지표 :

  • 성공률 (Transaction rate)
  • 트랜잭션 / 읽기 처리량 (Transaction / Read throughput)
  • 트랜잭션 / 읽기 대기 시간 (최소, 최대, 평균, 백분위 수) (Transaction Read latency(minimum, maximum, percentile))
  • 리소스 소비 (CPU, 메모리, 네트워크 IO, ...) (Resource consumption(CPU, Memory, Network IO, ...))

정의 및 해당 측정 방법을 찾으려면 [PSWG 링크 추가]를 참조하십시오.


 빌드하기(Build)

선결요건

다음 도구가 설치되어 있는지 확인하십시오.

  • NodeJS 8.X
    $ node -v
    
    #미설치시, 아래의 명령어 실행
    $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
    $ sudo apt-get install -y nodejs
    $ #설치확인
    $ node -v
    ## v8.11.2
    
  • node-gyp[1]
    $ node-gyp -v
    
    #미설치시, 아래의 명령어 실행
    $ sudo npm install -g node-gyp
    
    $ #설치확인
    $ node -v
    ## v3.6.2
    
  • Docker
    $ docker -v
    
    # Docker version 18.03.1-ce, build 9ee9f40
    
  • Docker-compose
    $ docker-compose -v
    # docker-compose version 1.11.2, build dfed245
    

로컬에서 종속 항목을 설치하려면 caliper 폴더에서 npm install을 실행하십시오.

블록체인 SDK 설치

  • Fabric
    • 저장소를 사용하여 설치
      • npm을 실행하여 루트 폴더에 fabric-ca-client 패브릭 클라이언트 설치
         ## 루트폴더 이동
        $ cd /opt/gopath/src/github.com/hyperledger/caliper
        
         ## fabric-ca-client, fabric-client 설치
        $ npm install fabric-ca-client fabric-client
        
        # 설치여부 확인
        $ npm list -g --depth=0
        ## /usr/lib
        ##├── fabric-ca-client@1.0.8
        ##├── node-gyp@3.6.2
        ##└── npm@5.6.0
        
      • v1.1.0과 같은 이전 버전의 패브릭을 테스트하려면 호환되는 클라이언트 SDK를 설치해야합니다.
        $npm install fabric-ca-client@1.1.0 fabric-client@1.1.0

 벤치마크 실행하기(Run benchmark)

모든 사전 정의된 벤치마크는 벤치마크 폴더에서 찾을 수 있습니다. 첫 번째 벤치마크를 시작하려면 루트 폴더에서 실행하십시오.

## node benchmark/simple/main.js -c [본인의_config.json] -n [본인의_네트워크.json]
$ node benchmark/simple/main.js -c config-fabric.json -n fabric.json
  • -c : 벤치마크의 설정 파일을 지정합니다. 사용하지 않으면 config.json이 기본값으로 사용됩니다.
  • -n : 테스트중인 블록체인 네트워크의 설정 파일을 지정합니다. 사용하지 않을 경우 benchmark 설정 파일에 파일 주소를 지정해야합니다.

일부 예제 SUT는 네트워크 폴더에 제공되며 구성 파일에 부트 스트랩 명령을 설정하여 테스트 전에 자동으로 시작할 수 있습니다 (아래 예시)

{
  "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)"
  }
}

command.start에 정의된 스크립트는 테스트 전에 호출되고 command.end에 정의된 스크립트는 모든 테스트가 끝난 후에 호출됩니다. 그것들을 사용하여 준비 작업이나 정리 작업을 정의할 수 있습니다.

자체 블록체인 네트워크로 테스트를 실행할 수도 있습니다. 네트워크 구성이 제공되어야하며 해당 파일 경로는 구성 파일의 blockchain.config에 지정되어야 합니다.

노트:

  • 벤치마크를 실행할 때 SUT에 트랜잭션을 생성하고 제출하기 위해 하나 이상의 블록체인 클라이언트가 사용됩니다. 시작된 클라이언트 수 및 테스트 작업 부하는 구성 파일을 사용하여 정의할 수 있습니다.
  • HTML 보고서는 테스트 후에 자동으로 생성됩니다.

대안(Alternative)

npm 스크립트를 사용하여 벤치마크를 실행할 수도 있습니다.

  • npm run list: 사용 가능한 모든 벤치마크 리스트
    $ npm run list
    
    > caliper@0.1.0 list /home/hurf/caliper
    > node ./scripts/list.js
    
    Available benchmarks:
    drm
    simple
    
  • npm test: 특정 설정 파일로 벤치마크 실행
    $ npm test -- simple -c ./benchmark/simple/config.json -n ./benchmark/simple/fabric.json
    
    > caliper@0.1.0 test /home/hurf/caliper
    > node ./scripts/test.js "simple" "-c" "./benchmark/simple/config.json" "-n" "./benchmark/simple/fabric.json"
    ......
    

분산 클라이언트로 벤치마크 실행(테스트중)(Run benchmark with distributed clients (experimental))

이러한 방식으로 여러 클라이언트를 동일한 호스트에서 실행하여 동일한 벤치마크를 실행할 수 있습니다.

  1. ZooKeeper 서비스 실행
  2. node ./src/comm/client/zoo-client.js zookeeper-server 명령어를 실행하거나 npm run startclient -- zookeeper-server 명령어를 실행하여 대상 시스템에서 클라이언트를 개별적으로 시작합니다. 클라이언트를 시작하기 전에 대상 시스템 간의 시간 동기화를 실행해야합니다. 예시:
    $ npm run startclient -- 10.229.42.159:2181
    
    > caliper@0.1.0 startclient /home/hurf/caliper
    > node ./src/comm/client/zoo-client.js "10.229.42.159:2181"
    
    Connected to ZooKeeper
    Created client node:/caliper/clients/client_1514532063571_0000000006
    Created receiving queue at:/caliper/client_1514532063571_0000000006_in
    Created sending queue at:/caliper/client_1514532063571_0000000006_out
    Waiting for messages at:/caliper/client_1514532063571_0000000006_in......
    
  3. 구성 파일의 클라이언트 유형 설정을 'zookeeper'로 수정하십시오. 예시:
    "clients": {
      "type": "zookeeper",
      "zoo" : {
        "server": "10.229.42.159:2181",
        "clientsPerHost": 5
      }
    }
    
  4. 평소대로 모든 시스템에서 벤치마크를 시작하십시오.

노트:

  • Zookeeper는 클라이언트를 등록하고 메시지를 교환하는 데 사용됩니다. 시작된 클라이언트는 /caliper/clients/ 아래에 새로운 znode를 추가합니다. 벤치마크에서는 디렉토리를 점검하여 얼마나 많은 클라이언트가 있는지 알아보고 작업 부하에 따라 각 클라이언트에 작업을 할당합니다.
  • 클라이언트 간에는 자동 시간 동기화가 없습니다. 예를 들어 'ntpdate'를 사용하여 대상 시스템 간의 시간을 수동으로 동기화해야합니다.
  • 블록체인 구성 파일은 클라이언트를 실행하는 시스템에 있어야하며 파일의 상대 경로 (캘리퍼 폴더에 상대적인)는 동일해야합니다. 구성에있는 모든 참조 파일도 있어야합니다.

자신의 벤치마크 작성(Write your own benchmarks)

Caliper는 애플리케이션이 백엔드 블록체인 시스템과 상호 작용할 수 있도록 노드 경계 NBI (North Bound Interfaces)[1]세트를 제공합니다. NBI에 대해 배우려면 src/comm/blockchain.js(https://github.com/hyperledger/caliper/blob/master/src/comm/blockchain.js)를 확인하십시오. NBI를 다른 블록체인 프로토콜로 변환하기 위해 다중 어댑터가 구현됩니다. 따라서 개발자는 한 번 벤치마크를 작성하고 다른 블록체인 시스템으로 실행할 수 있습니다.

일반적으로 새로운 캘리퍼 벤치마크를 작성하려면 다음을 수행해야합니다.

  • 테스트하려는 시스템에 대한 스마트 컨트렉 작성
  • 캘리퍼 NBI를 사용하여 테스트 플로우를 작성하십시오. Caliper는 새로운 테스트를 쉽게 통합 할 수 있도록 플러그 형 및 구성 가능한 기본 벤치마크 엔진을 제공합니다. 자세한 내용은 벤치마크 엔진(https://github.com/hyperledger/caliper/blob/master/docs/Architecture.md#benchmark-engine)을 참조하십시오.
  • 백엔드 네트워크 및 벤치마크 인수를 정의하는 구성 파일을 작성하십시오.

디렉토리 구조(Directory Structure)

디렉토리 설명
/benchmark 블록체인 벤치마크 샘플
/docs 문서
/network 테스트중에 있는 미리 정의된 블록체인 네트워크를 배포하는 데 사용되는 부팅 구성 파일.
/src 프레임워크의 소스코드
/src/contract 다른 블록체인 시스템을 위한 스마트 컨트렉

기여 방법(How to contribute)

기여 페이지(https://github.com/hyperledger/caliper/blob/master/CONTRIBUTING.md)를 확인하십시오.

라이센스(License)

캘리퍼 코드베이스는 Apache 2.0 라이센스에 따라 배포됩니다. Caliper Project에서 개발한 모든 문서는 Creative Commons Attribution 4.0 International License에 따라 사용이 허가됩니다. 귀하는 http://creativecommons.org/licenses/by/4.0/에서 CC-BY-4.0이라는 라이센스 사본을 얻을 수 있습니다.


출처: https://www.hyperledger.org/blog/2018/03/19/measuring-blockchain-performance-with-hyperledger-caliper



'IT > Block Chain(Hyperledger)' 카테고리의 다른 글

Minikube에 블록체인 네트워크 배포하기  (0) 2019.05.09
Caliper 구조  (0) 2018.08.28
Steem 그리고, Steemit 정의  (1) 2017.12.28
Hyperledger Composer  (0) 2017.12.28
BlockChain 기초 개념  (0) 2017.12.28