Кеширование
Cache stampede: тест с выбором ответа
Шесть вопросов через весь юнит. Ни один из них не про определение — каждый отражает решение, которое вы принимаете прямо во время инцидента, когда БД горит, а вам нужно выбрать митигацию, область действия которой действительно совпадает с формой стада.
Убедитесь, что вы связываете форму всплеска stampede с правильной митигацией: что сворачивает стадо внутри процесса, что — стадо всего флота, что не требует координации, что убирает ожидание, и какой режим отказа не победить одним только слоем кеша.
Главная страница закеширована с TTL=60 с и поглощает 5 000 RPS. Тот же эндпоинт без кеша тоже видит 5 000 RPS. Почему версия с кешем способна вызвать аварию, которой никогда не будет без кеша?
Флот из 50 нод использует только in-process single-flight. На границе TTL приходят 100 000 одновременных промахов, равномерно распределённых. Сколько rebuild-запросов достигнет БД и почему?
Нужно защитить два ключа: сверхгорячую главную, читаемую тысячи раз в секунду, и холодный персональный отчёт, читаемый раз в ~30 с с TTL=60 с. Какая митигация подходит какому ключу?
Кеш на основе lock и кеш со stale-while-revalidate оба сводят нагрузку на БД на границе TTL к одному rebuild. В чём ключевая разница, которую чувствует пользователь?
Сервис профилей кеширует лукапы на 5 минут. Атакующий шлёт 100 000 запросов/с по случайным несуществующим user ID. Защита позитивных ключей (lock + single-flight) ничего не делает. Почему и как чинить?
Stampede длиной 10 секунд закончился четыре часа назад, а БД всё ещё прибита к 100% CPU с пустым кешем. Почему система не восстановится сама и что нужно для восстановления?
Сквозная линия юнита — это упражнение на сопоставление: форма всплеска stampede (полная скорость трафика, сконцентрированная в один момент истечения) определяет, какая митигация подходит. Single-flight бесплатно сворачивает стадо внутри процесса; distributed lock сворачивает стадо всего флота ценой round-trip; XFetch обновляет горячие ключи до истечения без координации; SWR отдаёт устаревшее и обновляет в фоне ради нулевого ожидания; negative caching останавливает усиление miss-storm; а как только stampede опрокидывает систему в metastable failure на ретраях, ни один слой кеша в одиночку её не вернёт — только внешний kill-сигнал.