Zettelkasten

Cache Stampede 방어 전략 - Locking, PER, SingleFilght, SWR이 있다.

·수정 2026.04.23·수정 1

요약

  • Cachestampede는 DB에 장애를 일으킬 수 있음
  • 이를 막기 위한 4가지 방법이 있으며, 각 방법은 최적화 하고자 하는 성질(가용성, 일관성, 유저 경험)에 따라 다르게 적용되어야함

본문

  • 캐시 만료 시점에, DB로 수 많은 병렬 요청이 몰리는 현상
  • Cache Stampede(Thundering Herd Problem)
  • 평소에 캐시 덕분에 잠잠하던 DB가 100%를 찍고 사망하는 경우가 있음
  • ex)
    • Target: 아이폰 16 사전 예약
    • T = 0s ~ 59s: 캐시 Hit, DB 부하 0
    • T= 60s 만료
    • T=60.1s DB 종료

방어전략

  1. Locking(Consistency)
    • Mutex를 활용한 전략
    • 수많은 요청중 하나만 락을 획득하게 되고 나머지는 캐시가 채워지기까지 대기함
    • Winner: DB조회 -> 캐시 갱신 -> Lock 해제
    • Loser: 대기 후 캐시 재 조회
    • 금융, 결제, 재고
  2. PER(Probabiliistic Early Recomputation, 확률적 조기 재계산), (Availability)
    • 만료 시간이 다가올 수록 확률적으로 미리 갱신을 시도함
    • Lock Free, Early, X-Fetch(Gap 기반 알고리즘)
    • 초고트래픽
  3. SingleFlight: 요청을 하나로 뭉쳐서(Efficiency)
    • 동일한 키에 대한 동시 요청들을 하나의 실행 그룹(Flight)로 묶어서 실행
    • 일반적인 조회
  4. SWR(Stale While Revalidate), User Experience
    • 낡은 데이터를 보여줌
    • 캐시 갱신을 백그라운드에서 함, 잠깐 쪽
    • UX 중요

참고