1. Intro
Locust는 오픈 소스 부하 테스트 도구입니다. Python으로 시나리오를 작성하여 웹 서비스 성능을 측정할 수 있고, 이벤트 기반 모델을 사용하여 수천 명의 사용자를 시뮬레이션할 수 있습니다. Locust는 사용자 친화적인 웹 인터페이스를 제공하여 테스트의 진행 상황을 모니터링하고, 결과를 분석할 수 있게 합니다.
2. Locust settings
Install ( poetry & locust )
pip install poetry
poetry init # poetry 초기화
poetry add locust
Bash
복사
Locust code
from locust import HttpUser, task, between, TaskSet
class UserTasks(TaskSet):
token = "[JWT]"
@task
def get_users(self):
self.client.get(
url="/api/v1/users",
headers={"Authorization": f"Bearer {self.token}"}
)
class Users(HttpUser):
wait_time = between(1, 2)
host = "https://[HOST-URL]"
tasks = [UserTasks]
Python
복사
3. Testing
Spec 1 (Load balancing 적용)
Locust settings
AWS Specs & Load balancers
•
Instances : c6i.xlarge(4CPU & 8GiB) x 2
•
Application Load Balancers :
Result
Locust result : Response 350ms ~ 380ms
AWS CPU : MAXIMUM 49% ~ 50%
Spec 2 (Load balancing 미적용)
Locust 세팅은 동일하게 했습니다. 유저 수가 동일하되, 성능의 차이가 어떻게 나타나는지 확인하기 위함입니다.
Locust settings
AWS Specs & Load balancers
•
Instances : c6i.xlarge(4CPU & 8GiB) x 1
•
Application Load Balancers :
Result
Locust result : Response 860ms ~ 910ms
AWS CPU : MAXIMUM 74% ~ 78%
4. Conclusion
Locust를 활용하여 ALB와 연결한 EC2 Instance 가용성 테스트를 해보았습니다. 단순 GET 메소드의 API를 조회하였을 때 단일 c6i.xlarge에서는 최대 TPS(Traffic per seconds)가 약 550정도로 예상되었습니다. 하지만 동일한 instance를 하나 더하여 로드밸런싱을 적용하여 트래픽을 분산시켰을 때 TPS가 약 1500 가까이 될 것으로 예상되었습니다. 단순 2배가 아니라 2.85배의 성능을 보여주었습니다.