Вопрос с собеседования · Базы данных

Что такое cache stampede?

MiddleRedis и кэшированиеRedis
Ещё спрашивают так:
  • Что такое thundering herd в кэше?
Коротко

Давка — популярный ключ истёк или кэш перезапустился, и множество запросов одновременно идут в базу за одним значением.

  • Разброс TTL — ключи не истекают синхронно
  • Single flight — пересчитывает один запрос (блокировка SET NX), остальные ждут или берут старое
  • Stale-while-revalidate — отдать устаревшее, обновить в фоне; ранний пересчёт до истечения

А ещё Холодный старт кэша — прогрев и ограничитель нагрузки на базу

Подробно

Как возникает. Популярный ключ (главная страница, конфигурация, товар дня) читают тысячи раз в секунду. Когда он истекает, все запросы в эту секунду промахиваются и идут в базу за одним и тем же. База получает сотни одинаковых тяжёлых запросов и может не выдержать. То же при массовом истечении ключей с одинаковым TTL и при перезапуске кэша.

Приёмы:

  • разброс TTL — ttl + random(0..10%): истечения разнесены во времени;
  • single flight — при промахе запрос пытается взять блокировку SET lock:key 1 NX EX 5; получивший идёт в базу и обновляет кэш, остальные ждут коротко и перечитывают кэш (или получают предыдущее значение). В одном процессе — объединение запросов в памяти (singleflight в Go, Caffeine.get(key, loader));
  • stale-while-revalidate — хранить значение дольше TTL с меткой свежести: после «мягкого» истечения отдавать старое и обновлять в фоне;
  • ранний вероятностный пересчёт — чем ближе истечение, тем выше шанс, что запрос обновит значение заранее (XFetch);
  • прогрев после перезапуска и ограничитель параллельных запросов к базе.

Что хотят услышать

  • Механизм давки и когда она случается.
  • Несколько приёмов защиты и их сравнение.
  • Холодный старт кэша — плюс.

Частые ошибки

  • Одинаковый TTL у всех ключей.
  • Блокировка без таймаута: упавший держатель вешает всех.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Очистка кэша при перезапуске приложения
  • ✗Кэш переполняется из-за большого TTL и начинает вытеснять самые горячие ключи
  • ✓Много запросов разом промахиваются по горячему ключу и идут в БД
  • ✗Шифрование данных, лежащих в кэше

Что спросят дальше

  • Что такое hot key?
  • Как Redis SET NX PX помогает lock-у?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования