본문 바로가기

개발/백엔드

Late Limiter vs Circuit Breaker

레이트 리미터는 호출 자체를 제한하고, 서킷 브레이커는 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