Skip to content

[coupon-consumer] Consumer 안정성 확보를 위한 Redis RateLimiter 서킷 브레이커 및 Fallback 전략 적용 #69

@devFancy

Description

@devFancy

Description

Please describe the feature to be implemented.

현재 CouponIssueConsumer는 트래픽 제어를 위해 Redis 기반의 RRateLimiter를 사용하고 있습니다. 하지만 rateLimiter.acquire(1) 로직이 Redis에 강하게 결합되어 있어, 다음과 같은 문제점이 예상됩니다.

  • SPOF: Redis 서버 장애/지연 시 Consumer 스레드가 블로킹되거나 예외가 발생하여, 정상적인 쿠폰 발급 로직까지 마비됨.
  • 장애 전파: Redis 타임아웃으로 인해 Kafka의 max.poll.interval.ms를 초과할 경우, 리밸런싱이 빈번하게 발생하여 전체 처리량이 급감할 위험이 있음.

이를 해결하기 위해 Resilience4j CircuitBreaker를 도입하여 Redis 장애 시 시스템을 보호하고, Local Rate Limiter를 Fallback으로 적용하여 최소한의 트래픽 제어를 유지한 채 가용성을 확보하고자 합니다.

  • AS-IS: Redis 장애 시 acquire() 실패 -> Consumer 중단 또는 무한 에러 로그
  • TO-BE: Redis 장애 감지 시 Circuit Open -> Local Rate Limiter(Resilience4j) 로 자동 전환하여 처리 지속

Tasks

  • build.gradle에 Resilience4j 의존성 추가
  • Redis RateLimiter 호출 구간을 감싸는 AOP 기반 서킷 브레이커 적용
  • 서킷 오픈 시 실행될 Fallback 메서드 구현
  • Redis 장애 상황을 가정한 테스트 및 Fallback 동작 검증

Estimated Time

  • Minimum: 4-5H

Reference

Metadata

Metadata

Assignees

Labels

featureImplement new features or introduce new technologies.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions