Как оценить, насколько кэш разгружает базу, и что будет, если он упадёт?
- Что такое hit ratio и почему 90% и 99% — большая разница?
- Что делать с холодным кэшем после перезапуска?
- Как защититься от падения кэша?
Нагрузка на базу = поток × доля промахов. Рост hit ratio с 90% до 99% снижает нагрузку на базу в 10 раз. Обратная сторона: если база рассчитана только на промахи, падение кэша — это авария.
- Hit ratio зависит от размера кэша, распределения запросов (Ципф) и TTL
- Холодный старт: после перезапуска все запросы — промахи; прогревать постепенно
- Защита: база должна пережить хотя бы часть нагрузки без кэша, ограничители, деградация
А ещё Отрицательное кэширование: запоминать и «не найдено», иначе несуществующие ключи всегда бьют в базу
Подробно
Арифметика. При потоке 50 000 RPS и hit ratio 90% в базу идёт 5 000 RPS, при 99% — 500, при 99,9% — 50. Последние девятки дают самый большой эффект на базу, но достаются всё дороже по памяти.
От чего зависит hit ratio:
- распределение популярности — запросы к контенту обычно следуют закону Ципфа: небольшая доля ключей получает основную долю запросов. Поэтому кэш на 1–5% данных часто даёт 80–95% попаданий, а дальше рост медленный;
- размер кэша относительно рабочего набора;
- TTL — короткий TTL снижает попадания даже при достаточной памяти;
- политика вытеснения и защита от сканирования;
- ключи — разные ключи для одного и того же (параметры в разном порядке, лишние поля) дробят кэш.
Время ответа. Средняя задержка = hit × t_кэша + miss × t_базы. При кэше 1 мс и базе 20 мс: 90% → 2,9 мс, 99% → 1,2 мс.
Опасность зависимости от кэша. Со временем база начинает держать только промахи, и её «оптимизируют» под эту нагрузку. Если кэш упал или перезапустился пустым (холодный), в базу пойдёт в 10–100 раз больше запросов — и она ляжет, после чего не прогреть и кэш. Как защищаться:
- база рассчитана хотя бы на заметную часть нагрузки без кэша, или перед ней ограничитель параллелизма (лучше отказать части, чем всем);
- кэш с репликами и постоянством (Redis replica, Sentinel/Cluster), а не один экземпляр;
- постепенный прогрев: снять дамп горячих ключей и загрузить, или пускать трафик на новый узел кэша порциями;
- схлопывание запросов — при промахе по одному ключу в базу идёт один запрос, остальные ждут его;
- двухуровневый кэш — локальный в памяти сервиса на секунды гасит горячие ключи даже при недоступном общем;
- устаревшие данные при ошибке — отдать прошлое значение, если обновить не удалось (stale-if-error).
Отрицательное кэширование. Запросы к несуществующим ключам (опечатки, боты, атака перебором id) — всегда промахи. Кэшировать «не найдено» на короткое время или ставить фильтр Блума перед базой.
Метрики: hit ratio по типам ключей, задержка кэша и базы, вытеснения (evictions), память, число ключей; алерт на падение hit ratio — ранний сигнал проблем.
Пример
Поток 40 000 RPS, база выдерживает 6 000 RPS.
hit 95% → 2 000 RPS в базу — запас трёхкратный.
Кэш перезапустился пустым → 40 000 RPS в базу → отказ.
Решение: прогрев из дампа ключей + ограничитель 5 000 RPS к базе + локальный кэш на 5 с.Что хотят услышать
- Нагрузка на базу через долю промахов, эффект последних девяток.
- От чего зависит hit ratio: распределение, размер, TTL, ключи.
- Риск падения или холодного кэша и способы защиты.
- Отрицательное кэширование — плюс.
Частые ошибки
- Считать кэш «необязательной оптимизацией», когда база без него уже не справится.
- Не кэшировать отсутствие данных.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Hit ratio не зависит от TTL и размера кэша
- ✓Нагрузка на базу = поток × доля промахов кэша
- ✗Рост hit ratio с 90% до 99% снижает нагрузку на базу примерно на 9%
- ✗После перезапуска кэш сразу работает с прежним hit ratio
Что спросят дальше
Связанные вопросы
- Популярный ключ истекает, и сотни параллельных запросов одновременно уходят в базу за одним значением. Какие приёмы защищают от этого? Middle
- Зачем нужно кэширование и какие у него главные риски? Junior
- Как устроен LRU-кэш и какие ещё бывают политики вытеснения? Middle
- Что делать с горячими ключами, на которые приходится непропорционально большая нагрузка? Senior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.