Skip to content

BE[refactor]-Redis장애시_복구_전략 #285

@dyk000825

Description

@dyk000825

이벤트 기능 Redis 장애시 복구 전략

간단 설명

  • Redis는 인메모리 저장소로 속도는 빠르지만 데이터 휘발성 있음
  • 투표 중 좋아요 수는 Redis에서만 저장됨.
  • Redis가 죽거나 장애 발생 시 좋아요 데이터 유실 없이 복구 가능해야 함

상세 설명

방안 1: Kafka + In-Memory Cache 기반 Fallback

  • Redis에 저장되는 좋아요 이벤트를 Kafka에도 동시에 보내고, 장애 발생 시 Kafka 데이터를 소비하여 in-memory cache에 임시 저장
  • 서버 메모리를 통해 랭킹/좋아요 수 계산 및 사용자에게 제공
  • Redis 완전 장애 시에도 실시간에 가까운 데이터 제공 가능

방안 2: Redis Sentinel/Cluster 기반 고가용성 구성

  • Redis를 Sentinel 또는 Cluster로 구성하여 장애 발생 시 자동 failover 또는 replica 전환으로 Redis를 계속 사용 가능하게 함
  • Redis 자체적으로 대응하여 서비스 중단 최소화, 사용자에게는 변화 없음
  • 하지만 구성 복잡, 장애 감지 및 전환까지 수초 딜레이 발생
  • 중단된 동안의 이벤트 기능은 불가능?

방안 3: Kafka + Fallback + Sentinel/Cluster

  • Redis의 고가용성 구성(Sentinel/Cluster)으로 빠른 장애 복구
  • 동시에 좋아요 이벤트를 Kafka로도 전송하여 이벤트 로그를 저장
  • 장애 전환이 완료되기 전(수 초 내)에는 서버 In-Memory Cache에서 실시간으로 데이터 응답
  • 장애 복구 후 Kafka 로그를 기반으로 Redis 재적재 가능

방안 4: In-Memory Cache 단독 장애 대응

  • Redis와 동시에 서버 메모리 캐시에 좋아요 수를 저장하고, Redis 장애 시 메모리 캐시로 랭킹 및 좋아요 수 처리
  • Redis 장애 중에도 메모리 캐시를 이용해 좋아요 수/랭킹 집계 및 사용자에게 실시간 응답
  • 다중 서버 환경에서 캐시 일관성 유지 어려움 -> 지금은 단일 서버라 괜찮을지도?
  • 영속성이 없음 -> 일부 유실 가능성

Metadata

Metadata

Assignees

Labels

BE백엔드 관련 이슈♻️refactor리팩토링 할 때 (기능에 영향 주지 않음)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions