awesome-everything EN
↑ Обратно к восхождению

Кеширование

Инвалидация кэша: воспроизведи и закрой гонку

Суть Практический проект — воспроизведи гонку set-after-delete и TTL-стампиду в маленьком cache-aside-сервисе, затем закрой их double-delete, jitter и измеренной стратегией записи, доказывая каждый фикс числами до/после.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 240 min

Читать про гонку set-after-delete — не то же самое, что заставить её срабатывать по требованию, а затем убить. Построй маленький cache-aside-сервис, загони параллельных читателя и писателя в гонку, пока не увидишь устаревшие данные на каждом прогоне, затем примени фиксы юнита, пока процент несогласованности не упадёт в ноль — с доказательством на каждом шаге.

Цель

Преврати модель консистентности юнита в воспроизводимый стенд: спровоцируй гонку set-after-delete и синхронизированную TTL-стампиду, затем закрой каждую правильным рычагом (double-delete или лизы, jitter, выбранная стратегия записи) и проверь числами до/после, а не рассуждением.

Проект
0 из 7
Цель

Построй cache-aside-сервис поверх Postgres + Redis, воспроизведи гонку set-after-delete и TTL-стампиду детерминированно, затем закрой обе и докажи фиксы измеренными числами процента несогласованности и нагрузки на origin — до и после.

Требования
Критерии приёмки
  • Таблица до/после: процент несогласованности set-after-delete (база против double-delete против лиз), измеренный на одном прогоне стенда — не оценённый.
  • Таблица до/после для стампиды: пик origin qps на истечении с фиксированным TTL против jitter + single-flight, в одном сценарии прогрев-и-истечение.
  • Доказательство, что delete-on-write держит TTL-страховку: симулируй упавший DEL (пропусти его) и покажи, что TTL ограничивает окно несвежести, затем покажи, что удаление TTL оставляет значение устаревшим бесконечно.
  • Абзац-разбор, утверждающий для каждой аварии, какой рычаг её закрыл и почему ты выбрал его вместо альтернатив (например double-delete против лиз против write-through) с учётом стоимости и требования read-your-writes.
Senior-стретч
  • Добавь on-call-runbook: как распознать репорт set-after-delete (правка откатывается на ~TTL, не воспроизводится локально), шаги триажа и лестницу приоритета фиксов (сначала jitter и TTL-страховка, затем double-delete/лизы, затем write-through).
  • Добавь write-behind-вариант и намеренно убей узел до асинхронного сброса, чтобы продемонстрировать, как окно durability теряет выглядящую закоммиченной запись — затем покажи durable-очередь, закрывающую его.
  • Добавь нормализацию cache key: запрос с шумными параметрами (utm_*, порядок параметров) и покажи обвал hit rate, затем исправь ключ, чтобы включал только влияющие на ответ параметры, и измерь восстановление hit rate.
  • Добавь probabilistic early refresh поверх jitter и покажи, что он перестраивает горячие ключи до истечения, выравнивая подъём origin сильнее, чем jitter в одиночку.
Итог

Это цикл, который ты запустишь в каждом реальном инциденте консистентности кэша: воспроизведи аварию детерминированно, прежде чем верить любому фиксу, выбери рычаг под ситуацию (jitter и TTL-страховка для стампид и пропущенных purge, double-delete или лизы для гонки set-after-delete, write-through, когда read-your-writes не обсуждается) и проверь числами до/после под идентичной нагрузкой. Сделав это однажды на игрушечном сервисе, превращаешь продакшен-версию — где устаревшие данные это откатившийся профиль пользователя — в мышечную память.

Продолжить восхождение ↑Что такое cache stampede и почему он делает всё хуже
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.