Hyperledger Caliper
Last updated
Last updated
Hyperledger Caliper는 미리 정의된 Use Case로 다양한 블록체인 솔루션을 테스트하고 일련의 성능 테스트 결과를 얻을 수 있는 블록체인 성능 벤치 마크 프레임 워크를 의미한다.
지원해 주고 있는 하이퍼레저 계열 솔루션(프로젝트): Fabric , Sawtooth, iroha, composer, burrow, besu
성능 측정 대상이 되는 솔루션과 측정 지표에 대해서 개발자가 직접적으로 추가 가능하도록 구현되어 있으며, 차후 버전이 업데이트되면 지원되는 프로젝트와 측정 지표가 추가될 것으로 예상된다.
성공률(Success rate)
트랜잭션/읽기 처리량(Transaction/Read throughput)
트랜잭션 처리량 = Total committed transactions / Total time in seconds @ #committed nodes
커밋된 총 트랜잭션 수 = (총 트랜잭션 수 - 유효하지 않은 총 트랜잭션 수)
읽기 처리량(RPS, reads per second): 읽기 및 쿼리 기능 처리 수/초
트랜잭션/읽기 대기 시간(Transaction/Read latency(minimum, maximum, average, percentile))
트랜잭션 대기 시간 = (Confirmation time @ network threshold) – submitting time
블록체인을 구성하는 모든 노드에서 측정되어야 하며, 평균 및 표준 편차를 계산하여 제공할 수 있어야 함
읽기 대기 시간 = Read Response Time - Read Request Time
리소스 소비: CPU, Memory, Network IO,…..
성능 측정 지표에 대한 연구는 PSWG(Hyperledger Performance and Scale Working Group)에서 맡고 있으며, 더 자세한 내용은 https://www.hyperledger.org/wp-content/uploads/2018/10/HL_Whitepaper_Metrics_PDF_V1.01.pdf 에서 확인할 수 있다.
Hyperledger Caliper는 Benchmark Layer, Interface & Core Layer, Adaptation Layer 3가지 layer로 구성되어 있다.
Benchmark Layer: 블록체인에 대해 구현된 테스트 케이스 + Benchmark Engine
각 테스트에는 백엔드 블록체인 네트워크와 테스트를 정의하는 구성 파일이 있으며, 이 테스트는 블록체인 시스템의 성능을 테스트하는데 직접적으로 사용됨
개발자가 프레임워크를 이해하고 자체 테스트를 신속하게 구현할 수 있도록 기본 벤치마크 엔진이 구현되어 있음
Interface & Core Layer: 성능 측정 도구 내 핵심 기능과 NBI를 지원하는 계층
블록체인 운영 인터페이스 (Blockchain NBI) : 스마트 컨트랙트 배포, 호출, 원장으로부터 쿼리 상태를 가져오는 등의 기능을 수행
리소스 모니터 : CPU, 메모리, 네트워크 I/O 등 백엔드 블록체인 시스템의 리소스 소비 상태 조회
성능 분석기 : 블록체인 NBI를 호출하는 동안 기록한 성능 측정 결과를 출력
보고서 생성기 : HTML 형식의 테스트 보고서를 생성
Adaptation Layer: 측정 대상이 되는 다양한 블록체인 솔루션을 Caliper 프레임워크에 맞게 통합/변환해주는 계층
Adapter는 Caliper NBI를 측정 대상 블록체인 솔루션에 따라 변환해주는 역할을 수행하는데 SUT(BlockChain System Under Test)마다 구현되며 해당 블록체인이 사용하는 기본 SDK 또는 RESTFUL API를 사용함
초기화 : 이 단계에서 마스터는 블록체인 구성 파일을 사용하여 내부 블록체인 개체를 만들고 초기화하며 구성에 지정된 스마트 컨트랙트(체인코드)를 배포하고 블록체인 시스템 리소스를 모니터링
테스트 : 마스터는 벤치 마크 구성 파일에 따라 테스트를 수행(스케줄에 따라 반복 수행). 작업은 정의된 작업 부하에 따라 생성되고 클라이언트에 할당
보고 : 각 테스트 라운드의 진행에 따른 성능 측정 결과가 HTML 형식의 보고서로 자동 생성
Local Client
Workload는 분할되어 하위 프로세스에 똑같이 할당되고 하위 프로세스는 일시적으로 생성된 컨텍스트를 사용하여 블록체인 클라이언트 역할을 수행, 블록체인 시스템과 상호작용
Zookeeper: 여러개의 Zookeeper 클라이언트가 독립적으로 시작되어 테스트 작업을 수행
v0.2.0부터 zookeeper client는 사용하지 않음 (https://github.com/hyperledger/caliper/releases/tag/v0.2.0?fbclid=IwAR0lPbKlwGCPdBk6PTdrUtkaYaWHQsyuAcUP9VkjkkC9D-aSf4sSHY7Lexk)
사용자 정의 테스트 모듈(User Defined Test Module)
init(): 벤치 마크 구성파일에서 읽은 사용자 정의 인수 뿐만 아니라 주어진 블록체인 객체 및 컨텍스트로 각 테스트 라운드가 시작될 때 클라이언트에 의해 호출되는 기능
run(): 스마트 컨트랙트가 호출되어 트랜잭션이 생성되고 Caliper의 API에 따라 성능 측정을 수행
end(): 각 테스트 라운드가 끝날 때 마다 호출하는 함수. 테스트에 따른 리소스 및 컨텍스트 해제