Вопрос с собеседования · System design

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

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

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

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

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