Как принудительно сбросить кэш на CDN?

«Как принудительно сбросить кэш на CDN?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принудительный сброс кэша CDN — стандартная операция при развертывании обновлений. Я использую несколько подходов в зависимости от провайдера и задачи:

1. Полная инвалидация (Purge Everything) Используется при крупных релизах. Пример для AWS CloudFront через AWS CLI:

aws cloudfront create-invalidation 
    --distribution-id E1A2B3C4D5E6F7 
    --paths "/*"

Для Cloudflare через API:

curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" 
     -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     --data '{"purge_everything":true}'

2. Селективная инвалидация по путям Эффективна для точечных обновлений. Сбрасываю только измененные ресурсы:

# CloudFront
aws cloudfront create-invalidation 
    --distribution-id E1A2B3C4D5E6F7 
    --paths "/css/main.css" "/js/app.js"

# Или с шаблонами
--paths "/images/products/*.jpg"

3. Версионирование ассетов (Cache Busting) Автоматизирую через сборку, чтобы избежать ручных сбросов. Добавляю хэш к именам файлов:

# Исходный файл: app.js
# После сборки: app.a1b2c3d4.js
# В HTML: <script src="/static/app.a1b2c3d4.js"></script>

Это реализуется через Webpack, Vite или аналогичные инструменты.

Ключевые практики:

  • Проверяю TTL настроек CDN перед сбросом
  • Учитываю лимиты провайдера (например, CloudFront — 1500 путей в месяц бесплатно)
  • Ожидаю задержку распространения (от 30 секунд до 10 минут)
  • Интегрирую с CI/CD — сброс кэша выполняется автоматически после успешного деплоя
  • Мониторю статус инвалидации через API провайдера