피드로 돌아가기
Dev.toBackend
원문 읽기
Redis Token Bucket 기반 외부 API 호출 제어로 429 에러 및 IP 차단 원천 봉쇄
Defend External APIs: Redis Token Bucket in Laravel
AI 요약
Context
병렬 Queue Worker Pool의 동시 요청 급증으로 인한 외부 벤더 API Threshold 초과 발생. 단순 요청 증가가 429 Too Many Requests 응답 및 서버 IP 차단으로 이어져 전체 데이터 동기화 파이프라인이 중단되는 구조적 결함 보유.
Technical Solution
- 분산 환경 내 토큰 상태 동기화를 위한 Redis 기반 중앙 집중형 Token Balance Pool 구축
- 단순 Time-window 방식의 전면 차단 대신 일정한 Refill Rate를 통한 부드러운 트래픽 흐름 제어
- 최대 30개의 Burst Capacity를 허용하여 일시적인 트래픽 급증에 유연하게 대응하는 구조 설계
- 토큰 부재 시 최대 5초간 Worker를 Block 하여 불필요한 Queue 재시도 횟수 감소
- 토큰 획득 성공 시에만 HTTP Mutation을 수행함으로써 외부 벤더의 Rate Limit 규정 준수 보장
- 실패 시 15초 후 재시도하는 Graceful Back-off 전략을 통해 시스템 안정성 확보
실천 포인트
- 분산 환경의 Rate Limiting 구현 시 로컬 메모리가 아닌 Redis 등 공유 저장소 사용 여부 확인 - Fixed Window 방식과 Token Bucket 방식의 Burst 처리 차이점을 고려하여 알고리즘 선택 - 외부 API 호출 전 Atomic한 토큰 획득 프로세스가 선행되었는지 검토 - API 제한 초과 시 즉각적인 실패가 아닌 적절한 Block 및 지수적 백오프(Exponential Back-off) 적용 여부 점검