2026-05-12

ADR-001: инвалидация edge-кэша через signed purge URLs

#ADR #CDN #архитектура

Контекст

У нас 12 кампусов клиентов, каждый со своим origin и набором edge-точек присутствия. Когда контент меняется (редактор публикует новый кейс, админ обновляет цену) — нужно прицельно сбросить кэш только для затронутых ключей, без полного flush. Полный flush на пике = ~38 сек проседания LCP по всем тенантам.

Варианты

  • A. Tag-based invalidation через webhook на CDN (Cloudflare/Fastly). Требует enterprise-тариф у Cloudflare.
  • B. TTL-only — короткий TTL (30 сек), без явной инвалидации. Простота, но согласованность видна с задержкой.
  • C. Push на каждый edge через broker (Kafka → edge workers). Сложность инфраструктуры.
  • D. Signed purge URLs — клиент сам инициирует purge с HMAC-подписью. Без enterprise CDN, минимум зависимостей.

Решение

Вариант D. Backend-сервис генерирует одноразовый URL вида /__purge/<tenant>/<keys>?sig=<HMAC>. Edge worker валидирует подпись и сбрасывает локальный кэш по ключам. TTL подписи — 60 сек, защита от replay.

Последствия

  • Плюс: работает на любом CDN, который поддерживает workers (Cloudflare, Fastly, bunny.net).
  • Плюс: latency инвалидации ~150 мс по миру.
  • Минус: нужно реализовать coordinated purge при multi-region — иначе кэш одной точки отстаёт.
  • Минус: rotating HMAC ключей сложнее, чем у тег-based решения.

← все заметки