본문 바로가기
BlockChain

[Hyperledger Caliper] Caliper

by 손정빈 2019. 4. 15.
728x90
반응형

Caliper는 미리 정의된 Use Case로 다양한 블록체인 솔루션을 테스트하고 일련의 성능 테스트 결과를 얻을 수 있는 블록체인 성능 벤치 마크 프레임 워크입니다.

Caliper 프로젝트가 나오게 된 이유는 다양한 블록체인 솔루션들이 등장하고 있지만 일관되며 중립적인 규칙을 가지고 서로 다른 블록체인 솔루션에 대해 성능 평가를 제공해주는 도구가 없기에

위와 같은 이슈를 해결하기 위하여 다양한 솔루션에 대해서 중립적이고 일관된 규칙을 가지고 테스트를 하기위한 툴로 Hyperledger Caliler 프로젝트가 등장하게 되었습니다.

 

여기서 언급되는 중립적이고 일관된 규칙은 PSWG를 통해 정의된 규칙을 의미하고 있는데.

PSWG는 The Performance & Scalability Working Group의 줄임말로 블록체인 및 블록체인 관련 기술의 성능 및 확장성에 관련된 주요 지표를 논의하고 연구하는 단체입니다. 

 

현재 Caliper에서 지원해주고 있는 솔루션은 아래와 같으며

  • fabric 
  • Sawtooth
  • iroha
  • composer
  • burrow

 

또한 Caliper에서 현재 지원해주고 있는 성과지표에 대해서는 아래와 같습니다.

  • 성공률 (Transaction rate)
  • 트랜잭션 / 읽기 처리량 (Transaction / Read throughput)
  • 트랜젝션 / 읽기 대기 시간 (최소, 최대, 평균, 백분율)
  • 리소스 소비 (CPU, 메모리, 네트워트IO )

 

Hyperledger Performance 용어 정리에 대한 문서입니다. 

https://docs.google.com/document/d/1DQ6PqoeIH0pCNJSEYiw7JVbExDvWh_ZRVhWkuioG4k0/edit#

트랜젝션과 읽기의 차이점은 상태값의 변화 유무라고 합니다.

추가적으로 Caliper에서 TPS에 대해서 계산하는 방법은 다음과 같습니다.

각 Tx에 대해 제출 시관과 커밋시간(Tx가 원장에서 커밋되거나 실패가 발생한 시간)을 기록하며, 기록을 통해 전송률을 계산합니다.

(Succ + Fail) / (last submitting time - first submitting time)으로 계산하게 됩니다.

처리량은 성공적인 Tx에 대해서만 계산하게 됩니다. Succ / (last submitting time - first submitting time)

 

솔루션과 성과지표에 대해서 개발자가 직접적으로 솔루션 추가 / 성과지표 추가가 가능하며 차후 버젼이 업데이트 되면서 지원되는 블록체인 솔루션과 성과지표가 추가 될 것으로 예상 됩니다.

 

 

위의 그림을 보게 된다면 총 3가지의 Layer가 존재합니다. Benchmark Layer, Interface & Core Layer, Adaptation Layer

 

Adapatation Layer

3개의 계층 중 Caliper에서 가장 핵심 구성계층은 다양한 블록체인 솔루션을 Caliper 프레임워크에 맞게 통합/변환해주는 Adapatation Layer입니다.

여기서 Adapter는 Caliper NBI를 해당 블록체인 프로토콜로 변환시켜주는 역할을 수행하는데 SUT(BlockChain system under test)마다 구현되며 해당 블록체인의 기본 SDK 또는 RESTful API를 사용하여 구현 되었습니다.

그러므로 특정 블록체인 솔루션을 Caliper를 통해 테스트 하기 위해서 해당 솔루션에 맞는 Adapter를 구현하여야 합니다.

Caliper NBI(North Bount Interface)는 스마트계약서를 설치하거나, 계약서를 호출하거나, 원장에 쿼리 상태를 조회하는 등의 백엔드 블록체인 시스템과 상호작용하는 작업을 포함하는 

공통 블록체인 인터페이스 집합을 의미합니다.

 

Interface & core Layer

인터페이스 & 코어 계층은 핵심 기능을 구현하고 NBI를 제공합니다. 현재 제공되어지는 NBI는 아래와 같습니다.

  • 블록체인 운영 인터페이스 (Caliper NBI) : 백엔드 블록체인에 스마트 계약 전개, 계약 호출, 원장에서 상태 조회 등의 작업을 포함합니다.
  • 리소스 모니터 : CPU, 메모리, 네트워트 IO 등 백엔드 블록체인 시스템의 리소스 소비 상태를 가져오고 모니터를 시작,중지 하는 작업을 포함합니다.
  • 성능 분석기 : 미리 정의된 통계(TPS, 지연, 성공 비율 등) 및 밴치 마크 결과를 읽는 작업이 포함됩니다.
    주요 통게는 블록체인 NBI를 호출하는 동안 기록이되며, 트랜잭션이 생성된 시간 및 커밋된 시간, 트랙잰션의 결과 등이 포함됩니다.
  • 보고서 생성기 : HTML 형식의 테스트 보고서를 생성하는 포함

추가적으로 개발자가 직접 NBI에 대해서 추가/수정/삭제가 가능하기에 필요한 것이 있으면 직접 구현을 할 수 있습니다.

 

Benchmark Layer

밴치마크 계층은 일반적으로 블록체인에 대해 구현 된 테스트가 포함되어 있습니다. 각 테스트에는 백엔드 블록체인 네트워크 테스트 인수를 정의하는 구성 파일이 있으며, 

이 테스트는 블록체인 시스템의 성능을 테스트 하는데 직접적으로 사용되어집니다.

또한 개발자가 프레임워크를 이해하고 자체 테스트를 신속하게 구현할 수 있도록 기본 벤치마크 엔진이 구현되어 있습니다.

백엔드 블록체인 네트워크와 테스트 인수에 대해서 따로 예제를 통해 작성하여 올려놓았습니다. 추가적으로 참조하시길 바랍니다.

백엔드 블록체인 네트워크 설정 파일은 Fabric-v1.4 기준이며 테스트 인수는 Simple이라는 예제코드를 분석한 내용입니다.

 

Caliper Benchmark Engine에 대해서 이야기 해보겠습니다. 크게 마스터와 클라이언트로 나눠지게 됩니다.

Master

  • 마스터에는 크게 3가지 단계를 포함하는 기본 테스트 흐름으로 구현되어 있습니다.
    • 준비 단계 : 이 단계에서 마스터는 블록체인 구성 파일을 사용하여 내부 블록체인 개체를 만들고 초기화하며 구성에 지정된 스마트계약을 배포하고 모니터 개체를 시작하여 백엔드 블록체인 
      시스템의 리소스를 모니터링 합니다.
    • 테스트 단계 : 마스터는 벤치 마크 구성 파일에 따라 테스트를 수행하기 위해 루프를 시작합니다. 작업은 정의 된 작업 부하에 따라 생성되고 클라이언트에 할당됩니다. 클라이언트의 성능 통계 반환은
      나중에 분석 할 수 있도록 저장됩니다.
    • 보고 단계 : 각 테스트 라운드의 모든 고객의 통계가 HTML 형식의 보고서가 자동으로 생성됩니다. 

 

Clients

  • Local Client
    • Local Mode에서 마스터는 node.js 클러스트 모듈을 사용하여 여러 로컬 클라이언트(하위 프로세스)를 fork하여 실제 테스트 작업을 수행합니다. 
    • 총 workload는 분할되어 하위 프로세스에 똑같이 할당됩니다. 하위 프로세스는 일시적으로 생성된 컨텍스트를 사용하여 블록체인 클라이언트 역할을 하여 백엔드 블록체인 시스템과 상호작용 합니다.

클러스트 : 여러개의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합을 의미합니다.

  • Zookeeper
    • 여러개의 Zookeeper 클라이언트가 독립적으로 시작됩니다. Zookeeper 클라이언트는 출시 후에 자체 등록을하고 테스트 작업을 기다립니다. 

Zookeepr : 분산 어플리케이션을 위한 분산 관리 서비스 입니다.

 

사용자 정의 테스트 모듈

  • 테스트 모듈은 실제로 트랜잭션을 생성하고 제출하는 함수를 구현해야합니다. 그래야만 개발자는 자체 테스트 로직을 구연하고 벤치 마크 엔진과 통합 할 수 있습니다.
    아래의 3가지 함수를 구현하고 내보내야하며, 모든 함수는 promise 객체를 반환 해야 합니다.
    • init - 벤치 마크 구성파일에서 읽은 사용자 정의 인수뿐만 아니라 주어진 블록체인 객체 및 컨텍스로 각 테스트 라운드가 시작될 때 클라이언트에 의해 호출됩니다. 블록체인 객체와 컨텍스트는 나중에 사용하기위해
      저장해야하며 여기에 다른 초기화 작업을 구현 할 수 있습니다.
    • run - 실제 트랜잭션은 Caliper의 블록체인 API를 사용하여 여기에 생성되어 제출되어야 합니다. 클라이언트는 작업 부하에 따라 반복적으로 이 함수를 호출하게 됩니다. 각 호출에서 하나의 트랜잭션만 제출하는 것이
      반드시 꼭 한개일 필요는 없습니다. 매번 여러 트랜잭션이 제출되면 실제 작업 부하는 구성된 작업 부화와 다를 수 있습니다. 이 함수는 비동기식으로 실행되어야 합니다.
    • end - 각 테스트 라운드가 끝날 때 마다 Call 하는 것으로 이 함수에 Clear 작업을 구현해야합니다.

 

Promise는 자바스크립트 비동기 처리에 사용되는 객체로 '특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 특성'을 가진 객체를 의미합니다. 

주로 서버에서 받아온 데이터를 화면에 표시 할 때 사용된다고 합니다. 

좀더 자세한 내용은 직접 찾아보시길 바랍니다. ㅎㅎ

반응형

'BlockChain' 카테고리의 다른 글

[Medium] 오픈 면접 질문  (0) 2019.04.25

댓글