sanghunjo921 / ticketing-nest

최대 60만명의 동시 접속자가 티켓을 조회하고 최대 6만명의 동시 접속자가 티켓을 예매하거나 구매하는 서비스의 백엔드 파트입니다.
0 stars 0 forks source link

로드테스트 client 개선 #52

Closed sanghunjo921 closed 6 months ago

sanghunjo921 commented 6 months ago

목표

부하 테스트에 최적화된 client를 사용하여 locust를 통한 부하 테스트에서 클라이언트 측 에러를 최소화시킵니다.

문제상황

현재 쓰고 있는 client는 locust의 default인 python-requests를 사용하고 있는데 해당 클라이언트는 내부적으로 urlib3 pool manager를 사용하고 있습니다. 해당 풀 매니저는 커넥션을 재사용하며 사용되지 않은 소켓을 너무 많이 생성하지 않도록 커넥션을 내부적으로 제한하기 때문에 부하 테스트에 적합하지 않습니다. 이런 이유로 해당 클라이언트를 통한 부하테스트 시 클라이언트측 에러로 인해 정확한 서버 성능 측정이 어렵습니다.

태스크

통과조건 (Acceptance Criteria; AC)

sanghunjo921 commented 6 months ago

loucst에서 제공하는 faster client 사용 후 부하 테스트 결과

sanghunjo921 commented 6 months ago

구매 엔드포인트의 경우 faster client를 사용해도 실패율이 동일함

원인 분석을 위해 kibana에 쌓인 로그들을 보다가 duplicate key violation 부분 발견

sanghunjo921 commented 6 months ago
스크린샷 2024-04-16 오후 10 55 46 스크린샷 2024-04-16 오후 10 55 53 스크린샷 2024-04-16 오후 10 55 58

더 극단적인 상황을 테스트하기 위해 더 많은 유저로 조회에 대한 부하테스트 결과 총 2875229 건 중 5번 실패했는데 RetriesExceeded('http://localhost:80/ticket', 1, original=[Errno 60] Operation timed out) 에러라 locust측 에러로 보여짐