Distributed Cache 도입기 (3): RDB 조회 90% 감소시키기
백엔드
Distributed Cache 도입기 (3): RDB 조회 90% 감소시키기
두줄요약
BillSetting 조회 부하를 줄이기 위해 로컬 캐시와 Redis 글로벌 캐시를 시도했지만 각각 한계와 병목을 겪었습니다. 이후 Redis Pub/Sub 기반 분산 캐시로 전환해 RDB 조회를 93% 줄였습니다.
문제 상황
- BillSetting 조회가 대부분의 API 권한 확인 과정에 포함되며 하루 6천만 건 이상, RDB 쿼리 1500 TPS 수준의 부하 발생
- Caffeine 로컬 캐시는 인스턴스별 히트율 편차, Cold Start, 짧은 TTL 만료로 근본적 한계 존재
- Redis 글로벌 캐시는 단일 Redis에 조회가 집중되며 CPU 70%까지 상승하는 병목 발생
해결 방법
- 각 인스턴스는 로컬 캐시를 유지하고, 데이터 변경 시 Redis Pub/Sub로 invalidate 메시지만 동기화하는 분산 캐시 적용
- TTL을 5초에서 24시간으로 확대해 캐시 만료 미스를 크게 줄이고, Pub/Sub 장애와 수동 DML 대비 안전장치로 TTL 유지
- 적용 결과 RDB 조회를 1500 TPS에서 100 TPS 이하로 줄여 약 93% 감소
