피드로 돌아가기
Rate Limiting Like a Jedi: Mastering the Token Bucket with Redis
Dev.toDev.to
Backend

Redis Lua script 기반 Token Bucket 도입으로 분산 환경 Rate Limiting 구현

Rate Limiting Like a Jedi: Mastering the Token Bucket with Redis

Timevolt2026년 6월 16일8intermediate

Context

개별 서버 메모리를 이용한 Local Counter 방식의 한계로 인한 트래픽 제어 실패 상황. 인스턴스 확장 시 제한 수치가 배수로 증가하며, 재시작 시 카운터가 초기화되는 정합성 결여 문제 발생.

Technical Solution

  • Redis를 Single Source of Truth로 활용한 글로벌 트래픽 뷰 확보
  • Token Bucket 알고리즘 적용을 통한 일정한 Refill Rate 유지 및 Burst Traffic 허용 설계
  • Redis Lua Script 사용으로 토큰 확인 및 차감 과정의 Atomicity 보장 및 Race Condition 제거
  • Floating-point 기반 토큰 저장 방식으로 정밀한 Refill Rate 계산 구현
  • Bucket Capacity 기반의 자동 TTL 설정을 통한 불필요한 키 메모리 최적화
  • 유연한 Key 설계를 통한 User-ID, API-Key, IP별 맞춤형 제한 체계 구축

- 분산 환경에서 Rate Limiter 설계 시 Local State 배제 및 External Store 검토 - Check-and-Set 로직 구현 시 Lua Script를 통한 원자성 확보 여부 확인 - 단순 Window 방식보다 Burst 대응이 가능한 Token Bucket 알고리즘 고려 - 정밀한 초당 요청 제한이 필요한 경우 정수형이 아닌 실수형(float) 데이터 타입 사용

원문 읽기