피드로 돌아가기
Dev.toBackend
원문 읽기
Local Token Bucket 도입으로 P99 Latency 12ms에서 1ms 미만으로 단축
Building a Real‑Time Notification System: Why a Simple Token Bucket Beats Fancy Alternatives
AI 요약
Context
Kafka 클러스터를 통한 대규모 이벤트 처리 중 트래픽 스파이크 발생 시 다운스트림 워커의 과부하 및 공격적인 Throttling 발생. 기존의 Centralized Redis 기반 Rate Limiter 구조는 모든 요청마다 네트워크 왕복이 필요하여 Redis 지연 시 시스템 전체로 장애가 전파되는 Single Point of Failure 문제를 야기함.
Technical Solution
- 결정 주체를 Producer에 인접하게 배치한 Local Token Bucket 기반의 분산 Rate Limiting 구조 설계
- TryConsume 메서드 내 Refill-on-access 패턴을 적용하여 타이머 틱에 의존하지 않는 정밀한 토큰 갱신 구현
- Redis와의 주기적 Sync(5초 단위)를 통해 로컬 버킷의 Drift를 보정하고 전체 쿼터의 일관성 유지
- Hot Path에서 Redis 의존성을 완전히 제거하여 네트워크 장애 시에도 Local Bucket으로 Graceful Degradation 보장
- Fixed Window Counter의 고질적 문제인 Window Reset 시점의 Burst 트래픽을 Token Bucket의 Capacity 제한으로 평탄화
실천 포인트
- Rate Limiter 설계 시 중앙 집중식 저장소의 네트워크 Latency가 서비스 병목인지 확인 - 분산 환경에서 Local Cache + Background Sync 구조를 통한 Failure Domain 격리 검토 - Fixed Window 방식의 Reset Spike 문제가 시스템 안정성에 영향을 주는지 분석 - Critical Path에서 외부 의존성을 제거하고 Fallback 전략이 정의되었는지 점검