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

Кеширование

Уровни кэша: чтение заголовков и трейса

Суть Читай реальные заголовки Cache-Control, trace-заголовки ответа и слоистый путь hit/miss, затем выбирай поведение и фикс с наибольшим рычагом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Баги кэша диагностируются в заголовках ответа и пер-слойном трейсе, а не на диаграмме. Прочитай заголовок, предскажи, что делает каждый слой, и выбери фикс, который senior делает первым.

Цель

Отработай цикл, который ты гоняешь на каждом инциденте с кэшем: прочитай директивы Cache-Control и trace-заголовки, спустись по стеку слоёв за запросом и найди, какой слой лжёт, прежде чем трогать TTL.

Сниппет 1 — заголовок ответа

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: private, no-store
Викторина

Инженер добавляет этот заголовок к персонализированному эндпоинту /me, затем спрашивает, почему hit ratio у CDN равен 0% и нагрузка на origin не упала. Что верно?

Сниппет 2 — trace-заголовки

HTTP/1.1 200 OK
Age: 240
Cache-Control: public, max-age=300
CF-Cache-Status: HIT
X-Cache: MISS from reverse-proxy
Викторина

Пользователь сообщает об устаревших данных через 4 минуты после записи. Читая эти заголовки из одного ответа, что заключаешь?

Сниппет 3 — слоистый путь hit/miss

client → CDN edge → reverse proxy → app (Redis) → Postgres
         miss        miss            HIT (Redis)   —
Викторина

Запрос промахивается мимо CDN и reverse proxy, но попадает в Redis на app-слое. Для in-region схемы какова грубая картина задержек и о чём она говорит?

Сниппет 4 — stale-while-revalidate

Cache-Control: public, max-age=60, stale-while-revalidate=600
Викторина

Высоконагруженная лента, терпимая к лёгкому устареванию, переходит на эту директиву, и p99 резко падает без роста всплесков нагрузки на origin. Почему это работает?

Итог

Поведение кэша читается в заголовках и трейсах. Директивы Cache-Control решают, какие слои могут хранить ответ — no-store запрещает всем, private запрещает общим кэшам вроде CDN — поэтому персонализированный эндпоинт корректно показывает 0% hit ratio у CDN. Пер-слойные trace-заголовки (CF-Cache-Status, X-Cache, Age) позволяют пройти стек и найти устаревшую копию: HIT у CDN внутри max-age, переживший запись, значит, что CDN не был очищен. Попадание глубоко в стеке значит, что каждый слой над ним добавил miss-хоп, поэтому проверь, окупает ли себя каждый слой. А stale-while-revalidate отдаёт устаревшую копию мгновенно при фоновом обновлении, срезая p99 и сглаживая нагрузку на origin для терпимых к устареванию чтений.

Продолжить восхождение ↑Уровни кэша: поставь кэш туда, где он окупается
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.