Получить доступ

Почему инвалидацию кэша считают одной из самых сложных задач и что помогает на практике?

MiddleКэширование и CDN
Ещё спрашивают так:
  • Как инвалидировать кэш?
  • Почему кэш показывает старые данные?
Коротко

Сложно из-за зависимостей: кэшированное значение собрано из нескольких сущностей, и отследить все ключи, затронутые изменением строки, трудно.

  • Короткий TTL ограничивает расхождение без всякого отслеживания
  • Версия в ключе: новые данные — новый ключ, старые вытесняются сами
  • Инвалидация по событиям изменений (CDC), удаление вместо перезаписи

А ещё Разделять данные по требуемой свежести

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

  • Причина сложности — производные значения и карта зависимостей.
  • Практические приёмы: TTL, версии в ключах, события.
  • Удаление ключа вместо перезаписи.

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

  • Строить сложную схему точечной инвалидации там, где хватило бы короткого TTL.
  • Массово сбрасывать кэш под нагрузкой без защиты от лавины.

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

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

Показать варианты и ответ
  • ✓Трудно узнать, какие именно ключи затронуло изменение; помогают короткий TTL, версионирование ключей и инвалидация по событию изменения данных
  • ✗Кэши технически не поддерживают удаление записей
  • ✗Инвалидация требует остановки приложения
  • ✗Проблема решается полным отключением кэша при любом изменении

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

  • Как версионирование ключа избавляет от явного удаления?
  • Чем защищаются от лавины запросов после инвалидации?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем