도수리
전 직장 동료, 친구 등과 함께 제대로 각 잡고 사이드 프로젝트를 하고 있다.
이 참에 광고를 좀 하자면, 도수리라는 서비스를 개발, 운영 중이다.
도수리는 도수치료를 제공하는 전국 병원의 가격, 의료진, 치료 후기를 볼 수 있는 플랫폼으로, 커뮤니티 또한 제공하여 실 사용자들이 사진이 포함된 솔직한 후기를 등록하고 공유할 수 있는 서비스이다.
부하 테스트
사이드 프로젝트 답게, 서버 비용의 압박을 몸으로 직접 느끼고 있다. 자연스럽게 ec2 인스턴스도 최대한 작은걸 쓰고 있는데, 대신 오토스케일링을 걸어서 트래픽이 몰리면 인스턴스를 늘리도록 세팅해두었다.
그렇다고 해도 인스턴스를 추가로 띄우는 작업은 비교적 무거운 작업이기 때문에 시간이 어느정도 소요될 수 밖에 없고, 그 전에는 기존 인스턴스가 몸빵을 해줘야 한다.
이러한 이유로, 기본 인스턴스가 얼만큼의 트래픽을 버텨줄 수 있는지 locust 를 통해 테스트 해보려고 한다.
사용법은 워낙 간단하다.
pip 명령어로 설치를 해주고,
pip install locust
스크립트는 아래와 같이 간단하게 작성할 수 있는데, 자세한 사용법은 locust 의 man page를 참고하자.
from locust import HttpUser, task
class TrafficTest(HttpUser):
@task
def test_landing_api(self):
self.client.get("/test/api")
locust 명령어를 실행하면 8089 포트로 아래와 같이 테스트를 실행할 수 있는 대시보드가 뜬다.
Number of users는 최대 유저 수
Spawn rate는 한번에 유저가 생성되는 수
Host 부하 테스트할 서버 주소
100의 Number of users, 1의 Spawn rate 테스트를 해본 결과 아래와 같이 차트로 추세를 확인할 수 있었다.
1의 Spawn rate로 인해 동시에 요청하는 유저의 수가 1, 2, 3, ..., 100 으로 점차 증가했고, 증가함에 따라 리스폰스 타임이 지속적으로 늘어나 동접 유저가 17명이 됐을 때 부터는 api 응답이 평균적으로 1초가 넘게 걸리는 것이 보인다. 이 시점부터 유저들이 불편함을 느끼지 않을까 싶다.
해당 시점의 ec2 모니터링 지표를 보면, 사실 CPU가 70% 넘게 피크를 치고 있는건 아닌데 Network I/O 에서 부하가 걸리는것 같기도 하다.
이 지표를 가지고 오토 스케일링의 민감도를 조절해서 유저의 불편함을 줄이도록 인프라 구성을 잘 해봐야 겠다 하는 생각은 드는데, 동시에 기본으로 떠 있는 인스턴스가 동접자 몇 명 까지 몸빵을 해줄 수 있어야 할까 하는 부분에 대해서는 잘 모르겠다.
지금 당장 트래픽이 많이 몰리지는 않으니 큰 무리는 없으나, 서비스가 성장함에 따라 지속적으로 고민해야할 부분인듯 하다.
임시 방편으로 트래픽이 몰리면 알람이 오도록 Cloud Watch 구성은 해두었으니, 추이를 지켜보자.
서비스 운영하는게 이렇게 어려울 줄이야. 근데 그 만큼 재밌기도 하다.
Referecnes
도수리
도수 통증치료 병원정보는 도수리
www.dosuri.site
Locust.io
An open source load testing tool. Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
locust.io
https://docs.locust.io/en/stable/
Locust Documentation — Locust 2.15.1 documentation
© Copyright . Revision 350d3041.
docs.locust.io
부하테스트 - Locust (설치 및 스크립트 작성)
들어가며 파이썬으로 작성된 Locust라는 툴을 설치해서 사용하는 방법을 알아보고 웹 애플리케이션에 부하 테스트를 적용해본다. 참고 사항: locust는 영어로 메뚜기라는 뜻인데, 이 툴에서 부하를
wookkl.tistory.com
'Python' 카테고리의 다른 글
Python - RabbitMQ, AMQP 다루기 with pika (0) | 2023.03.05 |
---|---|
Python - pythonic한 코드 작성(feat. 이직 후기) (0) | 2022.08.21 |
Python - with문 (feat.면접 회고) (0) | 2022.08.08 |
Python - 커스텀 정렬 (0) | 2021.11.02 |
Django - 다른 서버에 api 요청하기 (0) | 2021.10.14 |