레이트 리미터는 호출 자체를 제한하고, 서킷 브레이커는 API 가 응답 안하면 정해진 Fallback 을 호출해 장애 전파를 방지한다는 차이점이 있다.
쉽게 레이트 리미터는 앞단에서 먼저 체크, 서킷 브레이커가 뒷단에서 후 처리한다라고 생각하자.
차이점
Rate Limiter:
- 목적: 과도한 요청 제한
- 상태: Stateless
- 척도: 요청 수/시간
Circuit Breaker:
- 목적: 장애 전파 방지
- 상태: Stateful (Closed/Open/Half-Open)
- 척도: 실패율, 응답시간
Late Limiter
[클라이언트들] [Rate Limiter] [서버]
📱 →
📱 → 🚥 (초당 100개) → 💻
📱 →
📱 → ❌ (초과 요청 거부)
초당 100개 요청 허용, 초과 시 429 에러 반환
Circuit Breaker
1. 정상 상태 (CLOSED)
[서비스 A] → ✅ → [서비스 B]
[서비스 A] → ✅ → [서비스 B]
[서비스 A] → ✅ → [서비스 B]
2. 장애 발생 (서비스 B 응답 지연)
[서비스 A] → ⏳ → [서비스 B]
[서비스 A] → ⏳ → [서비스 B]
[서비스 A] → ⏳ → [서비스 B]
3. Circuit OPEN (차단)
[서비스 A] → ❌ → [서비스 B]
↓
[대체 응답]
[CLOSED] → 장애율 50% 초과 → [OPEN]
↑ ↓
└──── 복구 성공 ← [HALF-OPEN]
사용 예시들
// 1. 결제 시스템
[주문 API] → [Rate Limiter] → [결제 서비스] → [Circuit Breaker] → [PG사]
100 TPS 최대 50 TPS 장애율 30% 이상시
대체 결제수단으로 전환
// 2. 외부 배송조회 API
[배송조회 요청] → [Rate Limiter] → [배송조회 서비스] → [Circuit Breaker] → [택배사 API]
고객요청 시간당 1000건 응답시간 3초 초과시
캐시된 최종 배송상태 반환
// 3. 실시간 재고 확인
[재고확인] → [Rate Limiter] → [재고서비스] → [Circuit Breaker] → [창고 API]
매장요청 초당 500건 장애시 로컬 캐시데이터 사용
'개발 > 백엔드' 카테고리의 다른 글
빠르게 GraphQL 기본 개념 정리 (1) | 2025.01.06 |
---|---|
Redis Serializer 비교 (0) | 2024.12.31 |
Spring Circuit Breaker (1) | 2024.12.30 |
Spring Rate Limiter (1) | 2024.12.26 |
Spring Kafka 기본 설정 및 실행 (2) | 2024.12.25 |