최상단 프로젝트에 load-test 패키지를 만든다. 여기서 테스트 스크립트를 관리할 것.
docker.compose 파일 또한 작성해준다.
version: '3.7'
services:
master:
image: locustio/locust #locust image 사용
ports:
- "8089:8089"
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile-hello.py --master -H http://host.docker.internal:8080 # 테스트 할 .py 파일 지정. local8080 (= coupon-api) 에서 실행.
worker:
image: locustio/locust
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile-hello.py --worker --master-host master
locust 이미지를 사용한다.
8089 포트에서 실행한다.
실행할 파일: locustfile-hello.py (테스트 스크립트)
8080 (coupon-api) 에 대해 테스트한다. = coupon-api 를 테스트 한다
worker: 부하를 생성한다.
테스트 스크립트를 작성한다.
from locust import task, FastHttpUser
class HelloWorld(FastHttpUser):
connection_timeout = 10.0 #
network_timeout = 10.0 # 10초만 기다림
@task
def hello(self):
self.client.get("/hello")
cd load-test
load-test에 접근해
docker -compose up -d
도커를 실행한다.
8089 포트에 들어가 Locust 가 잘 나오는지 확인 하면 된다.
Number of users: 요청 보낼 유저의 수
Ramp up: number of users 가 생성되기 까지 생성에 대한 비율, 초당 유저수.
100으로 설정 한다면 100명으로 시작 -> 1초 뒤 200명.. 최종적으로 1000명까지 올라간다.
Advanced options: 테스트가 진행될 run time 을 지정하면 된다.
2024-11-28 17:00:07 master-1 | [2024-11-28 08:00:07,470] b005db192125/INFO/locust.runners: Sending spawn jobs of 1000 users at 100.00 spawn rate to 1 ready workers
2024-11-28 17:00:16 worker-1 | [2024-11-28 08:00:16,814] 80be0a147565/WARNING/root: CPU usage above 90%! This may constrain your throughput and may even give inconsistent response time measurements! See https://docs.locust.io/en/stable/running-distributed.html for how to distribute the load over multiple CPU cores or machines
2024-11-28 17:00:16 master-1 | [2024-11-28 08:00:16,919] b005db192125/WARNING/locust.runners: Worker 80be0a147565_e370491f3b06432d8197bb25d38e5e64 (index 1) exceeded cpu threshold (will only log this once per worker)
2024-11-28 17:00:16 master-1 | [2024-11-28 08:00:16,986] b005db192125/INFO/locust.runners: All users spawned: {"HelloWorld": 1000} (1000 total users)
2024-11-28 17:00:16 worker-1 | [2024-11-28 08:00:16,814] 80be0a147565/WARNING/root: CPU usage above 90%! This may constrain your throughput and may even give inconsistent response time measurements! See https://docs.locust.io/en/stable/running-distributed.html for how to distribute the load over multiple CPU cores or machines
- worker의 CPU 사용량이 설정된 임계값을 초과했다는 경고이다.
- CPU 사용량이 높아서 worker의 성능이 제한되고 있다는 점을 알리고 있다.
- Total Requests for second: RPS(Request Per Second) 를 나타낸다
- RPS: 시스템이 1초간 얼마나 많은 요청을 처리할 수 있는지.
- 1초에 1000개의 요청을 처리 할 수 있다면 RPS 는 1000이다.
- RPS: 시스템이 1초간 얼마나 많은 요청을 처리할 수 있는지.
- Response Times: 응답 시간
- Number of Users: 유저의 수
worker 는 부하를 만든다.
현재 worker 는 부하를 제대로 생성하지 못하고 있다. 본인이 부하에 걸려버림.
API 서버에서는 요청을 더 받을 수 있는데 worker에서 부하 생성을 제대로 하지 못해 RPS 를 신뢰할 수 없어진다.
-> worker 의 수를 늘려 user의 수를 분산해 부하를 발생시키면 문제점이 해소될 것이다.
docker-compose up -d --scale worker=3
위 명령어를 사용해 worker를 3대로 늘린다.
PS C:\Project\coupon\load-test> docker-compose up -d --scale worker=3
time="2024-11-28T23:33:03+09:00" level=warning msg="C:\\Project\\coupon\\load-test\\docker-compose.yml: `version` is obsolete"
[+] Running 4/4
✔ Container load-test-worker-1 Started 1.6s
✔ Container load-test-master-1 Running 0.0s
✔ Container load-test-worker-3 Started 1.1s
✔ Container load-test-worker-2 Started
worker 가 3대가 되었다.
유저를 나눠 가지고 있고
RPS 도 상승한 것을 볼 수 있다.
'JAVA > 프로젝트' 카테고리의 다른 글
쿠폰 선착순 발급 이벤트 - 동시성 이슈 해결. MySql lock (0) | 2024.11.30 |
---|---|
쿠폰 선착순 발급 이벤트 - 동시성 이슈 해결 synchronized (1) | 2024.11.30 |
쿠폰 선착순 발급 이벤트 - MySql, Docker 설정, 포트 충돌 해결. (0) | 2024.11.28 |
쿠폰 선착순 발급 이벤트 - 기획, ERD,프로젝트 세팅 (0) | 2024.11.27 |
배포 자동화 - jenkins를 통해 만든 .jar 파일 운영 환경 서버에 배포하기 (0) | 2024.11.26 |