부하 테스트 전 알아야 할 사전 지식
performence test 설정
- perfomance test를 생성할 수 있는 페이지
- Test Name : 해당 테스트를 지정하는 이름
- Agent : 테스트에 사용할 Agent 갯수 지정. 현재 max가 1개 이지만 위 Docker를 통해 Agent를 생성하는 과정을 통해 갯수를 늘릴 수 있음
- Vuser per agent : Agent 별 Vuser의 수, 테스트할 사용자의 수
- Script : 테스트할 Script
- Duration : 테스트를 수행하는 시간
- Ramp-Up : 조금씩 사용자를 늘려나갈 때 사용
- 늘어나는 사용자의 숫자를 프로세스이기 때문에 Ramp-Up 기능을 사용하려면 프로세스 숫자가 높아야 함
- x축: 시간흐름, y축: 동시접속자
- ex) 초기 대기시간:2, Ramp-Up 주기: 2000 -> 즉, 2초마다 2개의 프로세스가 생성
- Initial Count : 초기 Process/Thread 수
- Increment Step : Process/Thread를 몇 개씩 증가시킬 건지
- Intial Sleep Time : 초기 대기 시간
- Interval : 얼마 주기로 증가시킬 건지
performence test 결과
- TPS, MTT를 확인 할 수 있다.
- 첫번째 그래프 (TPS)
- nGrinder의 TPS는 Test Per Seconds의 약자로 초당 몇 번의 테스트가 일어났는지를 의미
- 이상적으로 TPS는 VUser가 증가하는 것에 비례해서 증가
- 어느 시점에 TPS가 더 이상 증가하지 않게 되는데 이 지점에 도달하는 순간 사용자의 응답시간에 영향을 줌
- 이런 경우 scale up이나 scale out으로 TPS를 증가시킬 수 있음
- 두번째 그래프 (MTT)
- nGrinder의 MTT는 평균 테스트 시간 그래프로 한 번의 요청부터 응답까지 몇 초가 걸렸는지를 의미
테스트 종류
- Smoke test
- 최소 부하 상태에서 시스템에 오류가 발생하는지 확인하는 테스트
- VUser: 1 ~ 2
- Load test
- 서비스의 평소 트래픽과 최대 트래픽 상황에서 기능이 정상 동작하는지 확인하는 테스트
- 평소 트래픽과 최대 트래픽의 VUser를 계산 후 시나리오를 검증
- 결과에 따라 개선하며 테스트를 반복
- Stress test
- 최대 사용자 혹은 최대 처리량인 경우의 한계점을 확인하는 테스트
- 에러가 발생할 때까지 VUser를 계속 추가
- 테스트 이후 시스템이 수동 개입 없이 자동 복구되는지 확인
VUser 계산
- Load test 시 성능 목표를 정하기 위해서는 VUser를 계산해야 함
- VUser를 구하기 위해서는 아래와 같은 지표들이 필요
- DAU(일일 활동 사용자 수)
- 피크시간대 집중률(최대 트래픽 / 평소 트래픽)
- 1명당 1일 평균 요청 수
VUser 계산 예시
- 한달 방문자 210만, DAU를 210만/30(한달)로 계산하여 7만명으로 잡고 계산
- 피크시간대 집중률은 저녁 시간대에 늘어날 것으로 예상, 최대 트래픽과 평소 트래픽의 차이가 크게는 없을 것이라고 생각하여 3배, 1명당 1일 평균 요청 수는 14로 가정하고 진행
- 지표 세팅
- DAU(일일 활동 사용자 수): 70000
- 피크시간대 집중률(최대 트래픽 / 평소 트래픽): 3
- 1명당 1일 평균 요청 수: 14
- throughput(1일 평균 rps ~ 1일 최대 rps)을 계산
- DAU * 1명당 1일 평균 접속수 = 1일 총 접속수 → 70000 * 14 = 980000
- 1일 총 접속수 / 86400(초 / 일) = 1일 평균 rps → 980000 / 86400 = 약 11.3
- 1일 평균 rps * (최대 트래픽 / 평소 트래픽) = 1일 최대 rps → 11.3 * 3 = 약 34
- 즉 throughput은 11.3(1일 평균 rps) ~ 34(1일 최대 rps)
- VUser를 계산
- VUser: (목표 rps * T) / R
- R: 시나리오에 포함된 요청의 수
- T: 시나리오 완료 시간보다 큰 값(VUser 반복을 완료하는데 필요한 시간보다 큰 값)
- T = (R * 왕복시간(http_req_duration)) + 지연시간
- 왕복 시간 = 얼마 안에 끝나야 하는지
- 요청의 수는 7, http_req_duration을 0.5s, 지연시간을 1s로 설정한다면
- R = 7
- T = (7 * 0.5) + 1 = 4.5
- 평소 트래픽 VUser: (11.3 * 4.5) / 8 = 약 7
- 최대 트래픽 VUser: (34 * 4.5) / 8 = 약 22
- VUser: (목표 rps * T) / R
다음
- 성능 목표 설정