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