직접 운영 환경에서 사용중인 RDS 에 부하 테스트를 하기엔 리소스적으로 부담이 많이 가기에, 로컬에서 사용중인 DB를 RDS 성능과 최대한 유사하게 세팅하였습니다.
docker compose -f docker-compose.k6.yml up -d prometheus postgres postgres-exporter influxdb grafana
docker compose -f docker-compose.k6.yml run --rm k6 \\
run -o influxdb=http://influxdb:8086/k6 /k6/auth/auth.test.js
docker-compose.k6.yml
prometheus:
image: prom/prometheus:latest
container_name: prometheus
command:
- --config.file=/etc/prometheus/prometheus-local.yml
volumes:
- ./prometheus/prometheus-local.yml:/etc/prometheus/prometheus-local.yml:ro
ports:
- "9091:9090"
networks:
- monitoring
postgres-exporter:
image: prometheuscommunity/postgres-exporter
container_name: postgres-exporter
environment:
DATA_SOURCE_NAME: "postgresql://root:[email protected]:5433/mumuk?sslmode=disable" // 주의
depends_on:
- postgres
ports:
- "9188:9187"
networks:
- monitoring
Local DB 를 모니터링하기 위해 컨테이너를 추가하였다. 대시보드나 Prometheus 관련 설정들은 굳이 적지 않겠습니다..
지표 | RPS 10 | RPS 20 | RPS 40 | RPS 60 | RPS 80 |
---|---|---|---|---|---|
총 요청 수 (http_reqs) | 950 (7.87/s) | 1,879 (15.58/s) | 3,723 (30.90/s) | 5,585 (46.29/s) | 7,194 (59.53/s) |
로그인 건수 | 735 | 1,484 | 2,969 | 4,455 | 5,744 |
회원가입 건수 | 195 | 375 | 734 | 1,110 | 1,430 |
평균 응답시간 (http_req_duration) | 89.45 ms | 79.49 ms | 87.31 ms | 107.50 ms | 2.75 s |
p95 응답시간 | 144.90 ms | 102.02 ms | 131.49 ms | 238.17 ms | 7.01 s |
최대 응답시간 | 375.93 ms | 316.33 ms | 380.75 ms | 612.80 ms | 15.38 s |
에러율 (http_req_failed) | 0% | 0% | 0% | 0% | 0.01% |
데이터 수신량 | 1.3 MB | 2.5 MB | 5.0 MB | 7.5 MB | 9.7 MB |
이건 위 글에서 측정했었던 테스트 결괏값이고, 이제부터 RPS 를 점차 올려가며 병목 지점과 DB 최적화 포인트를 찾을 것이다.