JAVA/프로젝트

쿠폰 선착순 발급 이벤트 - locust 설정, docker-compose.yml 작성

whyHbr 2024. 11. 28. 23:50
728x90
반응형

최상단 프로젝트에 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이다. 
  • 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

docker desktop
locust

worker 가 3대가 되었다. 

 

유저를 나눠 가지고 있고

RPS 도 상승한 것을 볼 수 있다. 

 

 

 

728x90