Когда AEM настроен на использование хранилища данных S3, ускорит ли сине-зеленое развертывание?

Фон

Мы знаем, что можно настроить конвейер devops, который развертывает обновления в AEM с помощью сине-зеленого подхода, используя crx2oak для переноса содержимого из старой среды в новую. Почему это выходит за рамки этого вопроса.

Проблема с этим подходом заключается в том, что операция копирования содержимого может занимать значительное время по мере роста объема содержимого в JCR. Другие идеи по смягчению этой проблемы приветствуются.

Мы также знаем, что AEM может иметь хранилище данных S3, которое выгружает двоичный контент в корзину S3, которая не будет перестраиваться во время синего/зеленого развертывания в соответствии с:

https://helpx.adobe.com/experience-manager/6-3/sites/deploying/using/storage-elements-in-aem-6.html#OverviewofStorageinAEM6

Что неясно из документации Adobe, так это то, может ли одно и то же ведро S3 совместно использоваться экземплярами AEM (т. е. синими/зелеными экземплярами). Возможно, это просто мой google fu не сработал...

Вопрос(ы)

Когда новый экземпляр AEM настроен на использование хранилища данных S3, в котором уже есть содержимое из старого экземпляра, когда для переноса содержимого используется crx2oak, сможет ли новый экземпляр получить доступ к существующему содержимому?

Есть ли какие-либо статьи/блоги, в которых описывается потенциальная экономия времени при таком подходе?

Да, я мог бы провести эксперимент и, возможно, сделаю это в будущем, чтобы ответить на свой вопрос. Я ищу информацию от тех, кто уже сделал это? Я инженер, поэтому не буду изобретать велосипед, если это сделал кто-то другой.


person Tinman    schedule 19.06.2018    source источник


Ответы (2)


Вы, безусловно, можете использовать одно и то же ведро S3 между экземплярами — на самом деле, это обычно используется вместе с репликацией без двоичных файлов от автора -> издателя (ов) и является проверенной и надежной конфигурацией.

Можно даже совместно использовать одно и то же ведро между совершенно разными средами (например, DEV/STAGE или BLUE/GREEN в вашем случае). Основная проблема, о которой следует помнить, связана со сборкой мусора DataStore (DSGC), потому что вполне возможно, что будут большие двоичные объекты, на которые ссылаются только некоторые экземпляры, совместно использующие ведро, и поэтому при очистке неиспользуемых больших двоичных объектов это необходимо принято во внимание.

Однако все это является частью дизайна, и есть флаг, разработанный специально для этой цели, который указывает DSGC выполнять только первую фазу (фазу «пометки») GC и пропускать 2-ю фазу «развертки», пока не будут выполнены все экземпляры. отметили, какие большие двоичные объекты они хотят сохранить/отбросить. После того, как все экземпляры сделали это, можно запустить фазу очистки, чтобы очистить большие двоичные объекты, которые не нужны никаким экземплярам, ​​использующим ведро.

Более подробное объяснение см. в документации Oak: https://jackrabbit.apache.org/oak/docs/plugins/blobstore.html#Shared_DataStore_Blob_Garbage_Collection_Since_1.2.0

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

Вы можете легко увидеть это в действии с помощью FileDataStore, найдя BLOB-объект и sha256 его - например. (этот пример для OS X, команда контрольной суммы в Linux/Windows будет немного отличаться):

$ shasum -a256 crx-quickstart/repository/datastore/0c/9e/40/0c9e405fc8d0f0405930cd0044611cfbf014938a1837ae0cfaa266d7732d1002

0c9e405fc8d0f0405930cd0044611cfbf014938a1837ae0cfaa266d7732d1002  crx-quickstart/repository/datastore/0c/9e/40/0c9e405fc8d0f0405930cd0044611cfbf014938a1837ae0cfaa266d7732d1002

Там вы можете видеть, что а) имя файла является контрольной суммой и б) оно вложено с использованием первых 3 пар символов из этой контрольной суммы, поэтому вы можете найти файл, просто зная хэш, и если вы сохраните тот же двоичный файл, даже если имя или метаданные JCR отличаются, ссылка на большой двоичный объект будет одним и тем же буквальным файлом на диске.

Из памяти S3 datastore использует префиксы, а не вложенность каталогов, потому что производительность выше, но принцип тот же.

Наконец, несколько вещей, которые следует учитывать:

1) Хранилище S3 относительно дешевое (и практически неограниченное), поэтому можно привести аргумент, что выполнять обычный DSGC не так уж необходимо, если вы действительно не пытаетесь сэкономить копейки.

2) Если вы используете DSGC, вам нужно подумать о том, как это будет работать с любой стратегией резервного копирования, которую вы используете для экземпляров AEM. Например, если вы откатываете хранилище сегментов вскоре после запуска DSGC, вам, вероятно, придется восстановить некоторые из этих очищенных BLOB-объектов. Вы можете использовать правила управления версиями и/или жизненного цикла, чтобы помочь в этом, но это может значительно увеличить сложность и время процесса восстановления.

Если вы решите просто пропустить DSGC и оставить большие двоичные объекты там на неопределенный срок, рекомендуется убедиться, что ключ доступа или роли IAM, которые использует AEM, не имеют разрешения DeleteObject для корзины, просто чтобы убедиться, что мошеннический процесс GC может ничего не удалять.

Надеюсь это поможет.

Редактировать Во всем этом я забыл ответить на ваш вопрос - да, в большинстве случаев это сэкономит время при клонировании. Вам по-прежнему необходимо синхронизировать хранилище сегментов (очевидно), и для этого существуют различные подходы. crx2oak, безусловно, один из них — вы увидите в документации, что есть специальные варианты его использования с S3, где вы предоставляете файл конфигурации (в основном сериализованный файл .config, который вы использовали бы с Felix/OSGi).

Вы также можете использовать что-то вроде rsync, чтобы просто скопировать файлы TAR (по крайней мере, целевой AEM остановлен. Дуб, как правило, атомарный, поэтому горячая копия из источника может работать теоретически, но YMMV).

Наконец, вы, очевидно, можете использовать Mongo и кластеризовать хранилище сегментов таким образом, но при этом применяются все обычные проблемы стоимости/сложности/производительности).

Еще одна интересная разработка для сине-зеленого шрифта на горизонте — это CompositeNodeStore — об этом говорится в хорошем выступлении на конференции adaptTo() 2017 года:

https://adapt.to/2017/en/schedule/zero-downtime-deployments-for-the-sling-based-apps-using-docker.html

person David J    schedule 19.06.2018

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

На моем текущем проекте (довольно маленьком, но отношения должны быть нормальными):

  • Репозиторий всего 4,8 ГБ (4,1 ГБ Segment Store, 780 MB Index)
  • Хранилище данных файлов 222 ГБ всего

Если вы хотите сделать это, у меня есть следующие замечания:

  1. Доступны различные хранилища данных. Для тестирования я бы начал с File DataStore.

  2. С моей точки зрения, S3 DataStore имеет смысл только в том случае, если вы все равно размещаетесь на Amazon AWS. Этим занимается Adobe Managed Services, поэтому S3 имеет для них смысл. Но и там, только если у вас более 500 ГБ активов.

  3. Если вы используете зеленый/синий подход, будьте осторожны со сборкой мусора DataStore (просто делайте это вручную). Общее хранилище данных предназначено для нескольких издателей с одинаковым контентом. Например, у вас может быть следующая ситуация: ваши редакторы удаляют некоторые ресурсы, вы запускаете сборщик мусора DataStore и, наконец, откатываете свою среду. Это означает, что активы все еще находятся в репозитории контента, но двоичные файлы удалены из DataStore.


Чтобы использовать общее файловое хранилище данных, вам необходимо сделать следующее:

  1. Распаковать краткое руководство java -jar AEM_6.3_Quickstart.jar -unpack
  2. Создайте каталог для файлового хранилища данных (в любом месте за пределами папки crx-quickstart).
  3. Создайте каталог install внутри извлеченной папки crx-quickstart
  4. Создайте файл с именем org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.cfg внутри этой установочной папки.
  5. Этот файл содержит всего 1 строку path=<path to file datastore> (см. https://jackrabbit.apache.org/oak/docs/osgi_config.html)
  6. Поместите файл reference.key в каталог хранилища данных. Первый раз он будет создан автоматически. Но если вы всегда используете один и тот же ключ, одни и те же хеш-значения используются во всех хранилищах данных во всех ваших средах. Это также является обязательным условием для функции, называемой «репликация без двоичного файла» (поэтому двоичный файл будет реплицироваться только в первый раз между автором и издателем).

с уважением, Алекс

person Alexander Berndt    schedule 19.06.2018