피드로 돌아가기
Dev.toBackend
원문 읽기
DB Rate Limiter 도입으로 Redis 장애 시 DB 붕괴 방지 및 가용성 확보
Database Rate Limiting: The Missing Piece After a Circuit Breaker
AI 요약
Context
Circuit Breaker 도입 후 Redis 장애 시 모든 트래픽이 Fallback 경로인 Database로 집중되는 병목 현상 발생. DB 설계 용량을 초과하는 요청 유입으로 인해 시스템 전체가 연쇄적으로 붕괴하는 위험성 존재.
Technical Solution
- Circuit Breaker Open 상태에서 DB 호출 직전에 DB Rate Limiter를 배치한 계층적 방어 구조 설계
- API Gateway가 인지하지 못하는 서비스 내부의 DB 의존성 및 장애 상태를 반영하기 위해 Application 레벨에서 Rate Limiter 구현
- Token Bucket 알고리즘을 적용하여 DB가 수용 가능한 안전 임계치 이상의 요청을 즉시 거부하는 Fail-fast 전략 채택
- 분산 환경에서 각 Application Server에 DB 전체 용량의 일부를 할당하여 합산 QPS가 DB 한계치를 넘지 않도록 제어
- Local Cache 확인 후 Rate Limiter를 거쳐 DB에 접근하는 단계적 필터링 로직 구현
Impact
- Redis 장애 시 100K req/sec의 트래픽 중 DB 수용 가능 범위인 5,000 QPS만 허용하여 DB 생존성 유지
실천 포인트
- Circuit Breaker의 Fallback 경로가 DB인 경우, 해당 경로에 Rate Limiter가 설정되었는지 확인 - 전역 제한이 아닌 인스턴스별 할당량 설정을 통해 DB 총 처리 용량(Total Capacity) 산정 및 분배 - API Gateway 수준의 제한이 아닌, 실제 DB 호출 직전의 Application 레이어에서 제어 로직 배치