Cache stampede (также известная как thundering herd problem) происходит, когда закэшированный элемент истекает и несколько одновременных запросов обходят кэш, все обращаясь к базе данных, чтобы обновить одни и те же данные. Это может перегрузить бэкенд и вызвать каскадные сбои.
Locking / Mutex: Только один запрос может получить свежие данные из базы данных. Все остальные либо ждут, либо временно получают устаревшие данные до тех пор, пока кэш не обновится.
Probabilistic Early Expiration: Вместо фиксированного TTL запросы имеют небольшой случайный шанс обновить кэш до того, как он официально истечёт. Это размазывает нагрузку на обновление во времени, а не запускает всё разом.
Randomized TTL: Добавь небольшое случайное смещение к времени истечения для записей кэша, например:
TTL = base_ttl + random(0, jitter_range)
Это предотвращает одновременное истечение нескольких ключей.
Background Refresh: Отдельный фоновый процесс заблаговременно обновляет кэш до истечения, гарантируя, что кэш никогда не окажется пустым под нагрузкой.
Request Coalescing: Дублирующиеся in-flight запросы к одному и тому же ключу объединяются в единственный запрос к upstream, сокращая лишние обращения к базе данных.
Лучший подход зависит от того, насколько твоя система может терпеть устаревшие данные и задержки. В большинстве production систем комбинация mutex lock с probabilistic early expiration обеспечивает надёжную и практичную защиту от cache stampede.
Cache stampede происходит, когда одна закэшированная запись истекает и один запрос пользователя обращается к БД для её обновления, вызывая временное падение производительности.
Новый — ещё не проверен сообществом
Вы