티스토리 뷰
[Blockchain 네트워크 구성] Apache JMeter를 이용한 Hyperledger fabric-rest API 성능 테스트
miiingo 2018. 7. 20. 14:02JMeter 실행
JMeter 설치
임의의 디렉토리에 JMeter 4.0을 설치합니다. 여기에서는 사용자의 Downloads
디렉토리에 설치합니다.
압축 파일을 해제하기만 하면 JMeter를 실행할 수 있습니다.
# JMeter 설치
cd ~/Downloads
sudo wget http://apache.mirror.cdnetworks.com//jmeter/binaries/apache-jmeter-4.0.tgz
tar -xf apache-jmeter-4.0.tgz
rm -f apache-jmeter-4.0.tgz
JMeter 플러그인 설치
JMeter 압축 파일을 해제한 디렉토리에서 lib/ext
디렉토리 내에 jmeter-plugins-manager-1.1.jar
을 설치합니다.
cd ~/Downloads/apache-jmeter-4.0/lib/ext
wget -O jmeter-plugins-manager-1.1.jar http://search.maven.org/remotecontent?filepath=kg/apc/jmeter-plugins-manager/1.1/jmeter-plugins-manager-1.1.jar
JMeter 실행
JMeter 압축 파일을 해제한 디렉토리에서 apache-jmeter-4.0/bin
디렉토리로 이동해 JMeter를 실행합니다.
# JMeter 실행
cd apache-jmeter-4.0/bin
./jmeter
JMeter 플러그인 설정
JMeter 실행 화면 상단의 메뉴 바에서 Options > Plugins Manager (has upgrades)
를 클릭합니다.
그런 다음, Custom Thread Groups
, 3 Basic Graphs
, 5 Additional Graphs
플러그인을 적용합니다.
-
Available Plugins
탭 클릭 -
Custom Thread Groups
,3 Basic Graphs
,5 Additional Graphs
체크박스 선택 -
Apply Changes and Restart JMeter
클릭
그러면, JMeter가 다시 시작됩니다.
※ 각 플러그인에는 다음과 같은 리스너들이 들어있습니다.
3 Basic Graphs
- Active Threads Over Time
- Response Time Over Time
- Transactions per Second
5 Additional Graphs
- Bytes Throughput Over Time
- Connection Times Over Time
- Hits per Second
- Response Codes per Second
- Response Latencies Over Time
JMeter 기본환경설정
Test Plan 설정
Test Plan에 테스트 진행 계획을 다음과 같이 입력합니다.
- Name:
Honeybee Plan
- Comments:
Honeybee blockchain network performance test plan
화면 중간 부분의 'Add
' 버튼을 클릭해 User Defined Variables
(사용자 정의 변수)를 설정합니다. 이 변수는 Thread Group 등과 같은 모든 하위 요소에서 사용할 수 있습니다.
- Name:
SERVER
, Value:localhost
- Name:
LOOPCOUNT
, Value:20
Thread Group 추가
JMeter 화면 왼쪽에서 Test Plan에 대해 오른쪽 버튼을 클릭해 Thread Group
을 추가합니다.
Thread Group 설정
Thread Group의 Thread Properties
을 다음과 같이 설정합니다.
- Number of Threads (users) :
350
- Ramp-Up Period (in seconds) :
1
- Loop Count :
${LOOPCOUNT}
Number of Threads
의 값으로 가상의 유저 수를 지정할 수 있습니다. 여기에서는 350개로 설정합니다.
Ramp-Up Period
는 Number of Threads에서 지정한 수만큼 Thread 가 실행되기까지 걸리는 시간입니다. 여기에서는 350개의 Thread가 1초 이내에 모두 실행되도록 합니다.
Loopback Count는 위의 Test Plan에서 설정한 변수인 LOOPCOUNT 값, 20을 사용합니다.
이 Thread Group은 350개의 스레드가 1초 이내에 모두 실행되어 각각의 스레드에서는 이후에 설정하게 될 동작(HTTP Request 등)을 20번씩 반복합니다.
Sampler 추가 - HTTP Request
Sampler는 JMeter에서 제공하는 테스트 액션입니다. JMeter 화면 왼쪽에서 Thread Group을 마우스 오른쪽 버튼으로 클릭한 다음, Add > Sampler
아래에서 원하는 Sampler를 선택하면 됩니다. 여기서는 HTTP Request
를 선택합니다.
Sampler는 테스트 결과를 파일로 저장할 뿐 화면에 보여주지는 않습니다. 결과를 그래프나 도표로 보기 위해서는 Listener를 추가해야 합니다.
HTTP Request 설정
HTTP Request Sampler > Basic
탭의 Web Server
섹션을 다음과 같이 설정합니다.
- Protocol [http] :
http
- Server Name or IP :
127.0.0.1
- Port Number :
4000
HTTP Request Sampler > Advanced
탭의 Client implementation
섹션을 다음과 같이 설정합니다.
- Implementation :
HttpClient4
Config Element 추가 - HTTP Header Manager
JMeter 화면 왼쪽에서 HTTP Request를 마우스 오른쪽 버튼으로 클릭한 다음, Add > Config Element > HTTP Header Manager
를 선택합니다.
HTTP Header Manager 설정
화면 하단의 Add
버튼을 클릭해 자신이 구성한 REST API가 정상적으로 수행될 수 있도록 필요한 Header를 설정합니다.
- Name:
Content-Type
, Value:application/json
- Name:
Accept
, Value:application/json
- Name:
Authorization
, Value:Bearer <JWT 토큰 값>
Listener 추가
처리상황 및 결과를 보기 위하여 리스너를 추가합니다.
JMeter 화면 왼쪽에서 Thread Group을 마우스 오른쪽 버튼으로 클릭한 다음, Add > Listener
아래에서 원하는 Listener를 선택하면 됩니다.
View Results Tree
실제로 주고받는 데이터 및 상세한 상태를 확인하기 위해 View Results Tree 리스너를 추가합니다.
View Results Tree 리스너는 각각의 요청, 응답, 실제 데이터를 상세히 보여줍니다.
Summary Report
종합적인 데이터 확인을 위해 Summary Report 리스너를 추가합니다.
Transactions per Second
TPS 확인
Response Time Over Time
의미있는 결과를 보기 위해서 플러그인으로 제공되는 Response Time Over Time 리스너를 추가합니다.
Response Time Over Time 그래프에서 중간에 튀는 구간이 있는 것은 응답시간이 확 늘어나는 구간이 있다는 의미입니다.
Active Threads Over Time
사용자수
Bytes Throughput Over Time
N/W 사용량
Transaction Throughput vs Threads
동시접속 사용자 수에 따른 전송데이터량을 보려면 Transaction Throughput vs Threads 리스너를 추가합니다.
Response Times vs Threads
동시접속 사용자 수에 따른 응답시간의 변화를 보려면 Response Times vs Threads 리스너를 추가합니다.
사용자가 늘수록 응답시간이 늘어난다면, 아파치의 성능에 비해 로직이 무거워서 리소스 반환이 늦으므로 튜닝이 필요하다고 볼 수 있습니다.
체인코드 설치 및 인스턴스화
테스트를 위해 체인코드를 블록체인 네트워크에 설치 및 인스턴스화합니다.
ccexcc 체인코드 설치 및 인스턴스화
org1의 cli 컨테이너에서 다음 명령을 실행합니다.
peer chaincode install -l node -v 1.0 -n ccexcc -p /opt/gopath/src/github.com/chaincode/ccexcc/node/
CORE_PEER_ADDRESS=peer1.org1.honeybee.com:7056 peer chaincode install -l node -v 1.0 -n ccexcc -p /opt/gopath/src/github.com/chaincode/ccexcc/node/
peer chaincode instantiate -o orderer.org1.honeybee.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/honeybee.com/orderers/orderer.org1.honeybee.com/msp/tlscacerts/tlsca.honeybee.com-cert.pem -C honeybeechannel -n ccexcc -v 1.0 -c '{"Args":[""]}' -P "OR ('org1MSP.member','org2MSP.member','org3MSP.member','org4MSP.member','org5MSP.member','org6MSP.member')"
fabric-rest API 성능 테스트
POST 성능 확인
POST 명령에 대한 성능을 확인하기 위해 HTTP Request Sampler > Basic
탭의 HTTP Request
섹션을 다음과 같이 설정합니다.
- Method :
POST
- Path :
/channels/honeybeechannel/chaincodes/ccexcc
- Content encoding :
UTF-8
Body Data 탭에는 다음 코드를 입력합니다.
{
"peers": ["org1/peer0"]
, "fcn": "registerFarm"
, "args":["FARM01","농장01","경기도","닭","테스트","1964-05-20"]
}
그런 다음, 상단의 Start
버튼을 클릭해 테스트를 시작합니다.
GET 성능 확인
GET 명령에 대한 성능을 확인하기 위해 HTTP Request Sampler > Basic
탭의 HTTP Request
섹션을 다음과 같이 설정합니다.
- Method :
GET
- Path :
/channels/honeybeechannel/chaincodes/ccexcc?args=%5B%22FARM01%22%5D&fcn=readAsset&peer=org1%2Fpeer0
그런 다음, 상단의 Start
버튼을 클릭해 테스트를 시작합니다.
JMeter 결과 확인
View Results in Tree
Summary Report
Summary Report의 데이터를 통해 평균 TPS를 측정할 수도 있습니다. TPS는 Transactions per Second의 약자로 초당 처리하는 트랜잭션의 갯수를 의미합니다.
TPS = 스레드 개수 / 평균 응답시간
Summary Report에서 Average 값이 평균 응답시간이고, 단위는 milisecond입니다.
위의 결과에서 스레드 개수는 350개로 설정하였고, 평균 응답시간이 13.958초이므로 평균 TPS는 350 / 13.958인 약, 25 TPS가 됩니다.
메모리 8G에 듀얼코어인 VMware에서 실행하였기때문에 TPS가 비교적 낮게 측정되었습니다.
View Results in Table
Response Time Graph
Transactions per Second
Response Time Over Time
Active Threads Over Time
Bytes Throughput Over Time
'Blockchain > Blockchain 네트워크 구성' 카테고리의 다른 글
[blockchain-explorer] Blockchain-explorer 실행 PORT 변경 (0) | 2018.11.12 |
---|---|
[Blockchain 네트워크 구성] Chaincode instantiate / upgrade 시 “timeout expired” 오류 해결 방법 (0) | 2018.08.30 |
[Blockchain 네트워크 구성] Peer-to-Peer 연결 오류 해결 (0) | 2018.07.19 |
[Blockchain 네트워크 구성] Hyperledger Fabric v1.2 Private Data 저장 오류 해결 (0) | 2018.07.13 |
[Blockchain 네트워크 구성] Hyperledger Fabric v1.2에서 Private Data 저장 및 조회 (0) | 2018.07.13 |
- Total
- Today
- Yesterday
- 빅데이터 강의
- Hyperledger Fabric v1.1
- 하이퍼레저 패브릭
- 코테
- 하이퍼레저 페브릭
- 블록 체인
- 암브로셔스
- ubuntu
- 코딩테스트
- 알고리즘
- 직딩잇템
- 빅데이터 교육
- DOCs
- 빅데이터
- 코딜리티
- 하이퍼레저 인디
- 기초 of 기초 데이터 개념
- 어서와 데이터는 처음이지
- Hyperledger Fabric
- ambrosus
- Hyperledger Indy
- Private Data
- Hyperledger Fabric v1.2
- 블록체인
- Blockchain
- 빅데이터 기초
- 문제풀이
- codility
- javascript
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |