1 분 소요

마스터 노드와 워커 노드를 사용한 테스트

하나의 노드에서만 트래픽을 발생시키는 경우에는 서버의 컴퓨팅 자원 한계로 인하여 대량의 트래픽을 생성하는 데 제약이 있습니다.
이러한 한계를 극복하기 위해 locust는 마스터-워커 구조를 제공하고 있습니다.
실습은 위에서 진행한 Rate Limiting 테스트를 여러 노드를 사용하여 부하를 넣는 방식

  • 환경 구성

    간단한 실습을 위해 하나의 예제를 locust 명령어로 실행

docker-compose 기술을 사용하여 여러개의 로컬 컨테이너를 활용.
(1대의 master node와 3대의 worker node로 구성) 컨테이너간 통신을 위해 위에서 사용한 파일의 HOST 주소를 localhost에서 현재 컴퓨터 private ip로 바꿔주는 작업이 필요.

  • ratelimit server program ratelimit은 30으로 설정한 springboot 기반 java 소스

gitlab repository

# rate_limit_test.py
from locust import HttpUser, task, between

HOST="http://localhost:8080"

class RatelimitTest(HttpUser):
    host = HOST
    
    @task
    def test(self):
        with self.client.get('/', name="rate_limit_test", catch_response=True) as response:
            if response.status_code == 429:
                print("Ratelimit overflow")
            
                print(
                    f"[STATUS={response.status_code}] "
                    f"[TIME={response.elapsed.total_seconds():.3f}s] "
                    f"[BODY={response.text.strip()}]"
                )
            else:
                print(f"[STATUS={response.status_code}] ")
    
    wait_time = between(1,1)

Locust 실행 및 접속 - cli

Locust 실행

  • 예제1 정책: 초당 30 요청 허용, burst 50

적용 대상: “/”

429 시 “Too Many Requests” 반환

  • 예제2 정책: 초당 30 요청 허용, burst 50

적용 대상: /click/*, /counts, /reset

429 시 “Too Many Requests” 반환

# 작성된 python파일으로 이름 변경 (rate_limit_test.py)
locust -f rate_limit_test.py

자신의 browser에서 localhost:8089 로 접속하여 아래의 항목에 값을 설정하여 시작합니다.

Number of users - 테스트를 수행하는 동안 생성될 가상 사용자의 총 수
Ramp-up - 부하를 점진적으로 증가시킬 사용자의 수

Number of users: 40 Ramp-up : 1

Locust 실행 및 접속 - docker

  • 컨테이너 실행
docker-compose up
  • 컨테이너 종료
    docker-compose down
    
# docker-compose.yml
version: '3'
services:
  locust-master:
    image: locustio/locust
    command: >
      --master --web-host 0.0.0.0 --master-bind-host 0.0.0.0 --master-bind-port 5557 -f /mnt/rate_limit_test.py
    ports:
      - "8089:8089"
    networks:
      - locust-network
    volumes:
      - ./rate_limit_test.py:/mnt/rate_limit_test.py  # 테스트 파일 마운트

  locust-worker-1:
    image: locustio/locust
    command: >
      --worker --master-host locust-master --master-port 5557 -f /mnt/rate_limit_test.py
    networks:
      - locust-network
    volumes:
      - ./rate_limit_test.py:/mnt/rate_limit_test.py

  locust-worker-2:
    image: locustio/locust
    command: >
      --worker --master-host locust-master --master-port 5557 -f /mnt/rate_limit_test.py
    networks:
      - locust-network
    volumes:
      - ./rate_limit_test.py:/mnt/rate_limit_test.py

  locust-worker-3:
    image: locustio/locust
    command: >
      --worker --master-host locust-master --master-port 5557 -f /mnt/rate_limit_test.py
    networks:
      - locust-network
    volumes:
      - ./rate_limit_test.py:/mnt/rate_limit_test.py

networks:
  locust-network:
    driver: bridge

참조

댓글남기기