DevOps./Infra

Grafana k6 사용하여 부하테스트 하는 방법 1

PI.314 2022. 12. 5. 00:22

부하테스트를 진행하기전에 어떠한 테스트들이 있고, 테스트를 위한 설정 값들은 무엇이 있는지 알아보자.

 

Smoke Test

  • 최소 부하 상태에서 시스템에 오류가 발생하는지 확인하는 테스트
    • VUser: 1~2로 구성

Load Test

적절한 부하를 발생시켜 통계적으로 의미있는 수치를 측정하는 테스트

  • 발생시키는 부하는 실제 시스템에 적용될 예상 트래픽이어야 한다
  • 서비스의 평소 트래픽과 최대 트래픽 상황의 성능 테스트
    • 평균 VUser
    • 최대 VUser
  • 부하 테스트의 목표는 애플리케이션이 향후 예상되는 로드를 관리할 수 ​​있도록 데이터베이스, 하드웨어, 네트워크 등과 같은 애플리케이션의 모든 구성 요소에 대한 상한을 결정한다.

Stress Test

시스템이 과부하 상태에서 어떻게 작동하는지를 검사하는 테스트

  • 무조건 문제가 발생할 수 밖에 없는 테스트
  • 점진적으로 부하를 증가시켜 한계점 확인
  • 한계점은 변곡점이라고 생각할 수도 있고, 실제 에러가 발생한 지점이라고 볼 수도 있음

테스트 설정값 구하기

1. 목표 rps 구하기

  1. 우선 예상 1일 사용자 수(DAU)를 정해봅니다. -> 8,000명
  2. 피크 시간대의 집중률을 예상해봅니다. (최대 트래픽 / 평소 트래픽) -> 100GB / 10GB = 10
  3. 1명당 1일 평균 접속 혹은 요청수를 예상해봅니다. 50회
  4. 이를 바탕으로 Throughput을 계산합니다.
  • Throughput : 1일 평균 rps ~ 1일 최대 rps
    • 1일 총 접속 수 = 1일 사용자 수(DAU) x 1명당 1일 평균 접속 수
      • 400,000 = 8,000명 x  50회
    • 1일 평균 rps = 1일 총 접속 수 / 86,400 (초/일)
      • 4.629 = 400,000 요청 / 86,000초
    • 1일 최대 rps = 1일 평균 rps x (최대 트래픽 / 평소 트래픽) 
      • 46.29 = 4.629 x (100GB / 10GB)
  • Latency : 일반적으로 100ms 이하로 잡는 것이 좋다.
    • 50ms

2. VUser 구하기

  • Request Rate: measured by the number of requests per second (RPS)
    • 요청 속도: 초당 요청 수로 측정됨
  • VU: the number of virtual users
    • 가상 사용자 수
  • R: the number of requests per VU iteration
    • VU 반복당 요청 수
  • T: a value larger than the time needed to complete a VU iteration
    • VU 반복을 완료하는 데 필요한 시간
T = (R * http_req_duration) (+ 1s) ; 내부망에서 테스트할 경우 예상 latency를 추가한다

VUser = (목표 rps * T) / R
  • 가령, 두개의 요청 (R=2)이 있고, 왕복시간이 0.5s, 지연시간이 1초라고 가정할 때 (T=2), 계산식은 아래와 같다.

VU = (300 * 2) / 2 = 300

 

VUser 구하는 공식 이해하기

  • VU 반복을 완료하는 데 필요한 시간 = (VU 반복당 요청 수 x http 요청지속시간) + Latency
  • 가상 사용자 수 = (목표 RPS * VU 반복을 완료하는 데 필요한 시간) / 요청 개수
  • 목표 RPS = (가상 사용자 수 * 요청 개수) / VU 반복을 완료하는 데 필요한 시간

3. 테스트 기간

  • 일반적으로 Load Test는 보통 30분 ~ 2시간 사이로 권장합니다. 부하가 주어진 상황에서 DB Failover, 배포 등 여러 상황을 부여하며 서비스의 성능을 확인합니다.