게임 동접 통계 API 장애조치

0

문제

Scale out 설정에도 불구하고, 게임 추가 오픈으로 인해 동접 통계 API가 스파이크성 트래픽을 견디지 못하고 어플리케이션이 다운되는 이슈


원인

Redis Multi 명령어 사용 및 비즈니스 로직의 동기식 처리로 인한 지연 발생 및 Redis Connection Pool 고갈


분석

Sentry 알림을 통해 장애 상황을 인지하고, APM을 통해 병목이 발생한 지점 파악


해결

  1. API 호출에 대한 병목 구간을 확인하고, 해당 비즈니스 로직 비동기 처리 (@Async) → APM 상의 요청에 대한 응답 지연은 발생안되는 것을 확인
  2. 비즈니스 로직은 Redis 호출 기능만 있었기 때문에 Redis Monitor 명령어를 활용하여, Multi 명령어의 트랜잭션 때문에 Redis의 커넥션 풀이 고갈나는 상황을 인지
  3. Lettuce 공식 문서에 따르면 Redis는 단일 Thread이기 때문에 Connection Pool을 사용해도 성능에 큰 효과를 주지 않기 때문에 무의미한 connection pool 대신 single connection으로 변경
  4. Multi 명령어 실행전 setAutoFlushCommand(false) 옵션을 추가하여 Transaction을 제어하도록 변경하여 multi 명령어 사용에 대한 병목 구간을 해결해 프로덕션 환경까지 배포하여 장애에 대한 조치를 완료 하였습니다. (feat. 문서)
profile
어제보다 오늘이 더 나은 개발자

0개의 댓글