Как автоматизировать аннулирование кэша CDN в Adobe Experience Manager

Как автоматизировать аннулирование кэша CDN в Adobe Experience Manager

18 декабря 2023 г.

Сети доставки контента (CDN) обычно используются с AEM для повышения производительности веб-сайта за счет кэширования и обслуживания контента из периферийных мест, расположенных ближе к пользователям. Однако изменение содержимого AEM может привести к появлению устаревших копий в кеше CDN. Инвалидация кэша вручную является сложной задачей и подвержена ошибкам.

Хотя CDN повысили производительность, новые изменения наших авторов не были отражены до истечения срока действия кэшей. Очистка кеша вручную после публикации не масштабировалась. Мне не удалось найти готовое решение этой проблемы.

High-level AEM Architecture with caching

Поэтому я разработал библиотеку AEM с открытым исходным кодом, которая прослушивает события публикации и автоматически активирует выборочное анвалидацию кэша на основе настраиваемых правил.

Библиотека реагирует на события репликации AEM или изменения ресурсов, а затем запускает асинхронные фоновые задания, чтобы аннулировать кэшированное содержимое CDN, связанное с опубликованными обновлениями. Гибкие API позволяют интеграцию с различными CDN, а точки расширения позволяют настраивать

.

Проблема

CDN кэшируют содержимое веб-сайта, такое как страницы, изображения и ресурсы JS/CSS. Это позволяет избежать повторной отправки статического контента с уровня публикации AEM, что уменьшает время ответа. CDN повторно извлекает ресурсы только по истечении истечения из кеша после TTL (времени жизни).

Однако обновленный контент AEM может содержать устаревшие копии, остающиеся в CDN после публикации. Несколько примеров:

* Публикация новой страницы с контентом не сразу видна пользователям. Старая версия остается в кэше. * Обновление изображения продукта в DAM не отображается до истечения срока действия кэша CDN.

В зависимости от бизнес-контекста любая из этих ситуаций может стать действительно деликатной проблемой, требующей срочного решения. Но, к сожалению, очистка кэша вручную при каждой публикации сложна и отнимает много времени:

* Идентификация связанных URL-адресов выполняется вручную и повторяется. * Утомительные схемы тегирования кэша для координации очистки.

Необходимо автоматизированное решение… такое, которое избирательно и разумно аннулирует кеш только для опубликованных обновлений.

Автоматическая аннулация кэша

Библиотека «Автоматическая проверка кэша CDN для AEM» прослушивает события публикации и изменения ресурсов, а затем запускает фоновую недействительность кэша в соответствии с настраиваемыми правилами. Гибкие API позволяют интегрироваться с различными CDN.

https://github.com/realgpp/aem-cdn-cache-invalidator?embedable = верно

Основные возможности

  • Автоматический запуск: реагирует на события репликации AEM для публикации обновлений.
  • Выборочное аннулирование. Делает кеш недействительным только для определенных опубликованных путей, а не для массовой очистки.
  • Асинхронная обработка: использует структуру заданий на основе очередей для разгрузки вызовов CDN.
  • Настраиваемые правила: очищать кеш по URL, тегу или пользовательским критериям.
  • Журналы: подробные журналы для отслеживания.
  • Встроенная поддержка Akamai: Интегрирован Akamai Purge API
  • Гибкая интеграция CDN: легко расширяется для других CDN через API.
  • API расширений: крючки для персонализации поведения.

Он решает проблемы ручного управления кэшем, позволяя авторам сосредоточиться на контенте и одновременно оптимизировать работу конечных пользователей.

Давайте пройдемся по течению…

Как это работает

Приложение имеет настраиваемые службы OSGi и прослушиватели для аннулирования кэша, вызванного событиями AEM.

  1. Прослушивание событий: события репликации или изменения ресурсов означают обновления контента.
  2. Выборочный прослушиватель. Прослушиватель OSGi использует фильтрацию событий по определенным деревьям. Он создает асинхронные задания с обновленными путями.
  3. Фоновое задание. Отдельный поток задания обрабатывает пути для извлечения метаданных, связанных с кешем, таких как URL-адреса, теги и т. д.
  4. Вызов API CDN. Задание вызывает вызов API, чтобы сделать недействительным кеш для вычисленных метаданных.
  5. Очистка кэша. CDN получает запрос API и очищает связанный кэшированный контент.
  6. Sequence diagram of solution

    Асинхронный подход позволяет избежать влияния на производительность запросов публикации. Вызовы CDN происходят вне полосы пропускания без блокировки AEM. Весь поток настраивается через OSGi, включая поддерживаемые события, критерии кэширования, URL-адреса или логику.

    Готовые интеграции упрощают начало работы, а точки расширения допускают настройку. Давайте рассмотрим общие параметры конфигурации…

    Очистка контента с помощью Akamai API

    Проект включает в себя повторно используемые сервисы, прослушиватели и задания, поддерживающие такие сценарии кэширования, как:

    * Аннулирование страниц или ресурсов по URL. * Разделы сайта по тегу или коду

    .

    Akamai Purge APIs supported by the library

    Ниже приведены API-интерфейсы Akamai Purge, поддерживаемые по умолчанию:

    * аннулирование и удаление по тегу * аннулирование и удаление по коду CP * аннулирование и удаление по URL

    Следующий блок, который вы можете найти в модуле maven ui.config.example, показывает, как настроить службу Akamai, поставляемую с библиотекой.

    // file com.baglio.autocdninvalidator.core.service.impl.AkamaiInvalidationServiceImpl.cfg.json
    {
      "isEnabled": true,
      "configurationID": "cdn-akamai",
      "hostname": "localhost:8443",
      "getAkamaiClientToken": "placeholder_akamai_client_token",
      "getAkamaiAccessToken": "placeholder_akamai_access_token",
      "getAkamaiClientSecret": "placeholder_akamai_client_secret",
      "httpClientConfigurationID": "http-client-akamai",
      "purgeType": "invalidate"
    }
    

    Этот сервис позволяет вам выбрать способ удаления контента из CDN: вы можете сделать его недействительным или удалить. Как видите, вам нужно заменить заполнители значениями Akamai. Вам также потребуется специальная конфигурация HTTP-клиента для работы с API Akamai. После этого ваш сервис может использоваться другими заданиями слинга, которые обрабатывают события изменения контента.

    Теперь давайте рассмотрим другие варианты конфигурации, которые позволят вам настроить библиотеку без написания кода…

    Области конфигурации

    Библиотека предлагает множество вариантов конфигурации для настройки ее функциональности без настройки кода. Вы можете настроить эти параметры в соответствии со своими потребностями и предпочтениями.

    Я хочу, чтобы это введение было кратким и интересным, но не волнуйтесь, если у вас возникнут вопросы по поводу деталей. Вы можете найти дополнительную информацию в файле README.md проекта или в комментариях Javadoc, если хотите изучить код.

    Ключевые аспекты настройки:

    * Наблюдаемые события: темы репликации или события изменения ресурсов, которые запускают задания аннулирования.

    // file com.baglio.autocdninvalidator.core.listeners.ReplicationEventListener-website-generic.cfg.json
    {
      "isEnabled": true,
      "resource.paths": [
        "/content/we-retail",
        "/content/wknd"
      ],
      "job.topic": "com/baglio/autocdninvalidator/akamai/generic",
      "filter.regex": "^/content/(we-retail|wknd)(?!.*products)(?!.*adventures).*$"
    }
    
    // file com.baglio.autocdninvalidator.core.listeners.DynamicResourceChangeListener-website-generic.cfg.json
    {
      "isEnabled": false,
      "resource.change.types": [
        "CHANGED"
      ],
      "resource.paths": [
        "/content/we-retail",
        "/content/wknd"
      ],
      "job.topic": "com/baglio/autocdninvalidator/akamai/generic",
      "filter.regex": "^/content/(we-retail|wknd)(?!.*products)(?!.*adventures).*$"
    }
    

    * Учетные данные CDN: учетные данные и настройки API для вашего провайдера.

    // file com.baglio.autocdninvalidator.core.service.impl.AkamaiInvalidationServiceImpl.cfg.json
    {
      "isEnabled": true,
      "configurationID": "cdn-akamai",
      "getAkamaiClientToken": "placeholder_akamai_client_token",
      "hostname": "localhost:8443",
      "getAkamaiAccessToken": "placeholder_akamai_access_token",
      "getAkamaiClientSecret": "placeholder_akamai_client_secret",
      "httpClientConfigurationID": "http-client-akamai"
    }
    

    * Правила аннулирования. Правила фильтрации и критерии очистки кэша для каждого потребителя задания.

    // file com.baglio.autocdninvalidator.core.jobs.EditorialAssetInvalidationJobConsumer.cfg.json
    {
      "isEnabled": true,
      "job.topics": [
        "com/baglio/autocdninvalidator/akamai/generic"
      ],
      "cdnConfigurationID": "cdn-akamai",
      "invalidation.type": "tag",
      "tagCodeMappings": [
        "/content/we-retail/(..)(/.*)*=tag-dev-$1",
        "/content/we-retail/(..)/.*/experience/.*=tag-dev-$1-experience",
        "/content/wknd/(..)(/.*)*=tag-dev-$1",
        "/content/wknd/(..)/.*/adventures/.*=tag-dev-$1-adventures"
      ]
    }
    

    * Настройка темы задания: настройки регулирования и распараллеливания для каждой темы задания. Ознакомьтесь с разделом «Настройка пользовательской очереди заданий» файла README проекта.

    Эти конфигурации определяют, как библиотека реагирует на события AEM, сколько заданий кэширования выполняется одновременно и как служба взаимодействует с вашим поставщиком CDN для очистки кэша.

    Теперь, когда мы изучили основы, давайте перейдем к самому интересному: мы покажем вам, как заставить инвалидацию работать на экземпляре AEM…

    Включение интеграции Akamai CDN

    Если вы хотите сразу использовать эту библиотеку, вам не нужно писать какой-либо код. Просто выполните следующие простые шаги:

    * Шаг 1. Установите модуль ui.config.example или создайте конфигурацию OSGi вручную. Модуль ui.config.example — это пример конфигурации, предоставляющий рабочий пример интеграции с Akamai. Вы можете установить его из менеджера пакетов или создать конфигурацию OSGi вручную через веб-консоль.

    * Шаг 2. Введите учетные данные и настройки Akamai в файле конфигурации AkamaiInvalidationServiceImpl. Вы должны указать имя хоста Akamai, токен клиента, токен доступа и секрет клиента в файле конфигурации AkamaiInvalidationServiceImpl. Эти значения можно найти на портале Akamai.

    * Шаг 3: выберите прослушивание событий AEM в Author или Publish. В зависимости от ваших настроек вы можете выбрать прослушивание событий AEM в Author или Publish. Если вы выберете «Автор», модуль обнаружит события публикации и аннулирует кэш соответственно. Если вы выберете «Опубликовать», модуль обнаружит обновления контента и очистит кэш соответственно.

    Теперь давайте рассмотрим добавление поддержки нового собственного поставщика CDN…

    Реализация собственного поставщика CDN

    Теперь, когда мы рассмотрели возможность использования библиотеки без программирования, что, если вам понадобится поставщик CDN, который в настоящее время не поддерживается?

    Библиотека предназначена для расширения для поддержки новых поставщиков CDN. Вы можете легко расширить его, выполнив следующие действия:

    1. Создайте класс Java, реализующий CdnInvalidationService интерфейс. Этот интерфейс определяет методы очистки кеша CDN.
    2. Реализуйте логику для вызова purge API вашей CDN в своем классе реализации.
    3. Создайте конфигурацию OSGi для своего класса с необходимыми учетными данными и значениями свойств. Обязательно присвойте ему уникальный идентификатор конфигурации, чтобы его можно было идентифицировать при выполнении задания по аннулированию.
    4. Используйте упомянутый выше идентификатор конфигурации при создании конфигураций задания аннулирования.
    5. Библиотека обеспечивает гибкость настройки логики аннулирования при использовании встроенной интеграции Akamai. Если вам нужно настроить предварительную обработку или постобработку, класс AbstractInvalidationJob предоставляет методы-перехватчики. > вы можете переопределить без необходимости переопределять полную обработку Akamai.

      Phases of job processing procedure

      С помощью процедуры, показанной на изображении выше, вы получаете преимущества использования существующих возможностей Akamai и одновременной адаптации таких вещей, как:

      – Методы preprocessInvalidationValues и postprocessInvalidationValues позволяют преобразовывать пути к содержимому и значения недействительности до и после их создания.

      - Методы preprocessPublicUrls и postprocessPublicUrls позволяют обновлять общедоступные URL-адреса до и после их разрешения.

      - Методы beforeInvalidation и afterInvalidation включают логику до и после выполнения вызова очистки CDN.

      Выборочно переопределяя эти перехватчики, вы можете адаптировать данные и потоки к своим потребностям, одновременно повторно используя большую часть кода интеграции Akamai. Это делает библиотеку очень расширяемой без необходимости начинать с нуля.

      Подведение итогов

      И это конец! С этой библиотекой инвалидатора CDN мы рассмотрели все: от готовой настройки до полностью настраиваемой интеграции. Надеюсь, вам было интересно читать!

      Какая-то часть заставила вас почесать голову? Или, может быть, эта библиотека уже помогла вам упростить аннулирование кешей?

      В любом случае, мне бы хотелось услышать ваше мнение! Расскажите мне, что сработало, а что нет или какие другие руководства помогут улучшить ваши рабочие процессы CDN.

      Более того, я приветствую запросы на включение, если у вас есть изменения кода, настройки или новые фрагменты кода, которые могут улучшить эту библиотеку и руководство!

      Я очень ценю, что вы нашли время оставить отзывы и вклад. Ваш реальный опыт поможет развивать этот проект и создавать контент, который поможет коллегам-разработчикам освоить свои следы CDN. .

      :::информация Также опубликовано здесь.

      :::


      Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE