K6를 이용한 트래픽 성능 테스트
2024. 1. 9. 16:11ㆍTechnology[DevOps]
[ 이번 게시글에서 구현할 사항 ]
- 트래픽을 어느정도까지 버틸 수 있는 지 K6를 이용해 트래픽 성능 테스트를 합니다.
1. 테스트할 JS 파일을 작성합니다.
import http from 'k6/http';
import { check, group, sleep, fail } from 'k6';
export let options = {
stages: [ // 테스트 단계, 아래에 설정된대로 테스트가 진행된다.
{ duration: '1m', target: 100 }, // 먼저 1분 동안 VUser 1에서 100까지 서서히 올린다.
{ duration: '3m',target: 100 }, // Vuser 100에서 3분간 유지한다.
{ duration: '1m', target: 200 }, // 다시 1분간 100에서 200까지 서서히 올린다.
{ duration: '3m',target: 200 }, // Vuser 200에서 3분간 유지한다.
{ duration: '1m', target: 300 }, // 다시 1분간 200에서 300까지 서서히 올린다.
{ duration: '3m',target: 300 }, // Vuser 300에서 3분간 유지한다.
{ duration: '1m', target: 400 }, // 다시 1분간 300에서 400까지 서서히 올린다.
{ duration: '3m',target: 400 }, // Vuser 400에서 3분간 유지한다.
{ duration: '1m', target: 500 }, // 다시 1분간 400에서 500까지 서서히 올린다.
{ duration: '3m',target: 500 }, // Vuser 500에서 3분간 유지한다.
{ duration: '1m', target: 0 }, //1분 동안 Vuser 0으로 내려온다.
],
thresholds: { // 부하 테스트가 언제 성공했다고 할 수 있는지
http_req_duration: ['p(95)<138'], // 전체 요청의 95%가 138ms 안에 들어오면 성공
},
};
const BASE_URL = '[테스트할 서버의 URL]';
function getPath(){
let pathRes = http.get(`${BASE_URL}/test`); // get요청을 진행하고 결과를 리턴
check(pathRes, { // 결과를 체크
'success to get response': (res) => res.status === 200,//응답 상태코드가 200이면 성공
});
}
export default function () {//이 default 함수만 테스트동안 계속 실행, 나머지는 1번만
getPath(); // 경로 검색 페이지를 Get요청하고
};
2. K6 다운로드 ( Ubuntu )
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
3. K6 실행
k6 run load.js
4. Autoscaling
5. 로드밸런싱이 되는지 확인합니다.
@PostMapping(value = "/", consumes = MediaType.APPLICATION_JSON_VALUE)
public String test2(@RequestBody RequestPayload requestPayload) {
// 원하는 처리 수행
System.out.println("requestPayload.getRequestID() : " + requestPayload.getRequestID());
return "test2 is running";
}
Spring에서 요청받은 requestID를 로그에 출력하게끔 설정하고나서
kubectl logs [확인할 pod의 NAME] -n ingress-nginx
위 명령어로 pod의 로그를 확인하면
위 사진처럼 정상적으로 request를 pod간 분산처리하고 있음을 확인할 수 있습니다.
[ 참고자료 ]
'Technology[DevOps]' 카테고리의 다른 글
Kubernetes 환경 구축 ( Ubuntu ) - 5 (1) | 2024.01.20 |
---|---|
Kubernetes 환경 구축 ( Ubuntu ) - 4 (1) | 2024.01.17 |
Kubernetes 환경 구축 ( Ubuntu ) - 3 (1) | 2024.01.09 |
Kubernetes 환경 구축 ( Ubuntu ) - 2 (1) | 2024.01.06 |
Kubernetes 환경 구축 ( Ubuntu ) - 1 (2) | 2024.01.04 |