Search

AWS EC2 + ALB 환경에서 트래픽 분산, Locust 테스트

카테고리
Back-end
태그
AWS
Python
게시일
2024/05/17
수정일
2024/07/12 04:05
시리즈
AWS-Study
1 more property

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배의 성능을 보여주었습니다.