Hot key hết hạn đúng giây. 2000 request miss → 2000 query DB giống hệt. DB gục; cache không kịp set lại. Gần thundering herd đội lốt cache.
Demo ý tưởng (đồng loạt miss vs single-flight): stampede vs coalesce.
Vì sao xảy ra
- TTL cứng cùng một timestamp cho mọi key nóng.
- Không lock/coalesce khi miss.
- Retry/stampede chồng retry.
Chữa
- Single-flight / request coalescing per key: 1 miss → 1 compute, caller khác await cùng Promise.
- Soft TTL / stale-while-revalidate: phục vụ stale ngắn, một path refresh.
- Jitter expiry: TTL ± random để không hết hạn đồng loạt.
- Probabilistic early refresh: trước hết hạn, thỉnh thoảng refresh.
- Bound in-flight compute per key.
Một câu
Miss đồng loạt đắt hơn miss lẻ — coalesce trước khi đập
DB.
TTL cứng không jitter là hẹn giờ stampede.