Utilizzo della reindicizzazione offline per ridurre i tempi di inattività durante un aggiornamento

Introduzione

Uno dei problemi principali nell'aggiornamento di Adobe Experience Manager è il downtime associato all'ambiente di authoring quando viene eseguito un aggiornamento sul posto. Gli autori dei contenuti non potranno accedere all’ambiente durante un aggiornamento. Pertanto, è consigliabile ridurre al minimo il tempo necessario per eseguire l’aggiornamento. Per gli archivi di grandi dimensioni, in particolare i progetti AEM Assets, che in genere dispongono di grandi archivi di dati e di un elevato livello di caricamenti di risorse all’ora, la reindicizzazione degli indici Oak richiede una percentuale significativa del tempo di aggiornamento.

Questa sezione descrive come utilizzare lo strumento Oak-run per reindicizzare l'archivio prima di eseguire l'aggiornamento, riducendo così la quantità di downtime durante l'aggiornamento effettivo. I passaggi descritti possono essere applicati agli indici Lucene per le versioni AEM 6.4 e successive.

Panoramica

Le nuove versioni del AEM introducono modifiche alle definizioni degli indici Oak man mano che il set di funzioni viene espanso. Le modifiche agli indici Oak forzano la reindicizzazione quando si aggiorna l'istanza AEM. La reindicizzazione è costosa per le distribuzioni di risorse in quanto il testo nelle risorse (ad esempio, il testo nel file pdf) viene estratto e indicizzato. Con gli archivi MongoMK, i dati vengono mantenuti attraverso la rete, aumentando ulteriormente la quantità di tempo necessario per la reindicizzazione.

Il problema che la maggior parte dei clienti deve affrontare durante un aggiornamento è la riduzione della finestra di inattività. La soluzione è saltare l'attività di reindicizzazione durante l'aggiornamento. Questo può essere ottenuto creando i nuovi indici anteriori per eseguire l'aggiornamento, quindi semplicemente importandoli durante l'aggiornamento.

Approccio

offline-reindicizzazione-upgrade-text-extraction

L'idea è quella di creare l'indice prima dell'aggiornamento, rispetto alle definizioni dell'indice della versione AEM di destinazione utilizzando lo strumento Oak-run. Il diagramma precedente mostra l'approccio di reindicizzazione offline.

Inoltre, questo è l’ordine dei passaggi descritti nell’approccio:

  1. Il testo dai binari viene estratto per primo
  2. Vengono create le definizioni degli indici di Target
  3. Gli indici offline vengono creati
  4. Gli indici vengono quindi importati durante il processo di aggiornamento

Estrazione testo

Per abilitare l’indicizzazione completa in AEM, il testo dei file binari come il PDF viene estratto e aggiunto all’indice. Questo è solitamente un passo costoso nel processo di indicizzazione. L’estrazione del testo è una fase di ottimizzazione consigliata soprattutto per la reindicizzazione degli archivi di risorse in quanto memorizzano un gran numero di binari.

offline-reindicizzazione-upgrade-text-extraction

Il testo dei binari memorizzati nel sistema può essere estratto utilizzando lo strumento oak-run con la libreria tika. È possibile eseguire un clone dei sistemi di produzione prima dell’aggiornamento e utilizzarlo per questo processo di estrazione del testo. Questo processo crea quindi l'archivio di testo, eseguendo i seguenti passaggi:

1. Naviga nell'archivio e raccogli i dettagli dei binari

Questo passaggio genera un file CSV contenente una tupla di binari, contenente un percorso e un ID BLOB.

Esegui il comando sottostante dalla directory da cui desideri creare l'indice. L'esempio seguente presuppone la directory home dell'archivio.

java java -jar oak-run.jar tika <nodestore path> --fds-path <datastore path> --data-file text-extraction/oak-binary-stats.csv --generate

Dove nodestore path è il mongo_ur o crx-quickstart/repository/segmentstore/

Utilizza il parametro --fake-ds-path=temp invece di –fds-path per velocizzare il processo.

2. Riutilizzare l'archivio di testo binario disponibile nell'indice esistente

Eseguire il dump dei dati dell'indice dal sistema esistente ed estrarre l'archivio di testo.

Puoi scaricare i dati di indice esistenti utilizzando il seguente comando:

java -jar oak-run.jar index <nodestore path> --fds-path=<datastore path> --index-dump

Dove nodestore path è il mongo_ur o crx-quickstart/repository/segmentstore/

Quindi, utilizza il dump dell'indice di cui sopra per popolare l'archivio:

java -jar oak-run.jar tika --data-file text-extraction/oak-binary-stats.csv --store-path text-extraction/store --index-dir ./indexing-result/index-dumps/<oak-index-name>/data populate

Dove oak-index-name è il nome dell'indice di testo completo, ad esempio "lucene".

3. Esegui il processo di estrazione del testo utilizzando la libreria tika per i binari mancanti nel passaggio precedente

java -cp oak-run.jar:tika-app-1.21.jar org.apache.jackrabbit.oak.run.Main tika --data-file text-extraction/oak-binary-stats.csv --store-path text-extraction/store --fds-path <datastore path> extract

Dove datastore path è il percorso dell'archivio dati binario.

L’archivio di testo creato può essere aggiornato e riutilizzato in futuro per scenari di reindicizzazione.

Per ulteriori dettagli sul processo di estrazione del testo, consulta la documentazione di esecuzione Oak.

Reindicizzazione offline

offline-reindicizzazione-aggiornamento-offline-reindicizzazione

Crea l'indice Lucene offline prima dell'aggiornamento. Se si utilizza MongoMK, si consiglia di eseguirlo direttamente su uno dei nodi MongoMk, in quanto questo evita il sovraccarico di rete.

Per creare l'indice offline, segui i passaggi seguenti:

1. Genera le definizioni dell'indice Oak Lucene per la versione AEM di destinazione

Eseguire il dump delle definizioni di indice esistenti. Le definizioni degli indici oggetto di modifiche sono state generate utilizzando il bundle dell'archivio Adobe Granite della versione AEM di destinazione e di oak-run.

Per scaricare la definizione dell'indice dall'istanza AEM source, esegui questo comando:

NOTA

Per ulteriori dettagli sulle definizioni degli indici di dumping, consulta la documentazione Oak.

java -jar oak-run.jar index --fds-path <datastore path> <nodestore path> --index-definitions

Dove datastore path e nodestore path provengono dall'istanza AEM source.

Quindi, genera le definizioni degli indici dalla versione target AEM utilizzando il bundle dell'archivio Granite della versione di destinazione.

java -cp oak-run.jar:bundle-com.adobe.granite.repository.jar org.apache.jackrabbit.oak.index.IndexDefinitionUpdater --in indexing-definitions_source.json --out merge-index-definitions_target.json --initializer com.adobe.granite.repository.impl.GraniteContent
NOTA

Il processo di creazione della definizione dell'indice di cui sopra è supportato solo a partire dalla versione oak-run-1.12.0. Il targeting viene eseguito utilizzando il bundle dell'archivio Granite com.adobe.granite.repository-x.x.xx.jar.

I passaggi precedenti creano un file JSON denominato merge-index-definitions_target.json che è la definizione dell'indice.

2. Crea un checkpoint nell'archivio

Crea un punto di controllo nell'istanza di produzione source AEM con una durata prolungata. Questo deve essere fatto prima di clonare l’archivio.

Tramite la console JMX situata in http://serveraddress:serverport/system/console/jmx, vai a CheckpointMBean e crea un punto di controllo con una durata sufficiente (ad esempio, 200 giorni). Per questo, invoca CheckpointMBean#createCheckpoint con 17280000000 come argomento per la durata del ciclo di vita in millisecondi.

Una volta fatto questo, copia il nuovo id del punto di controllo creato e convalida la durata utilizzando JMX CheckpointMBean#listCheckpoints.

NOTA

Questo punto di controllo verrà eliminato quando l'indice viene importato in un secondo momento.

Per ulteriori dettagli, consulta creazione di punti di controllo dalla documentazione Oak.

Esegui indicizzazione offline per le definizioni di indice generate

La reindicizzazione Lucene può essere fatta offline utilizzando oak-run. Questo processo crea i dati di indice nel disco sotto indexing-result/indexes. Non scrive nell’archivio e non richiede pertanto l’arresto dell’istanza AEM in esecuzione. L'archivio di testo creato viene inserito in questo processo:

java -Doak.indexer.memLimitInMB=500 -jar oak-run.jar index <nodestore path> --reindex --doc-traversal-mode --checkpoint <checkpoint> --fds-path <datastore path> --index-definitions-file merge-index-definitions_target.json --pre-extracted-text-dir text-extraction/store

Sample <checkpoint> looks like r16c85700008-0-8
—fds-path: path to data store.
--pre-extracted-text-dir: Directory of pre-extracted text.
merge-index-definitions_target: JSON file having merged definitions for the target AEM instance. indexes in this file will be re-indexed.

L'utilizzo del parametro --doc-traversal-mode è utile con le installazioni MongoMK in quanto migliora notevolmente il tempo di reindicizzazione spooling del contenuto dell'archivio in un file flat locale. Tuttavia, richiede uno spazio su disco aggiuntivo pari al doppio delle dimensioni dell’archivio.

Nel caso di MongoMK, questo processo può essere accelerato se questo passaggio viene eseguito in un'istanza più vicina all'istanza MongoDB. Se eseguito sulla stessa macchina, è possibile evitare il sovraccarico di rete.

Ulteriori dettagli tecnici sono disponibili nella documentazione oak-run per l'indicizzazione.

Importazione indici

Con AEM 6.4 e versioni più recenti, AEM ha la funzionalità integrata per importare gli indici dal disco nella sequenza di avvio. La cartella <repository>/indexing-result/indexes viene controllata per verificare la presenza di dati di indice durante l'avvio. Puoi copiare l'indice pre-creato nella posizione precedente durante il processo di aggiornamento prima di iniziare con la nuova versione del jar di AEM target. AEM lo importa nell’archivio e rimuove il checkpoint corrispondente dal sistema. Così si evita completamente una reindicizzazione.

Suggerimenti aggiuntivi e risoluzione dei problemi

Di seguito sono riportati alcuni suggerimenti utili e istruzioni per la risoluzione dei problemi.

Ridurre l'impatto sul sistema di produzione live

Si consiglia di clonare il sistema di produzione e creare l'indice offline utilizzando il clone. Questo elimina ogni potenziale impatto sul sistema di produzione. Tuttavia, il checkpoint necessario per importare l'indice deve essere presente nel sistema di produzione. Pertanto, è fondamentale creare un punto di controllo prima di eseguire il clone.

Preparare un Runbook e un'esecuzione di prova

Si consiglia di preparare un runbook ed eseguire alcune prove prima di eseguire l'aggiornamento in produzione.

Modalità Traversal documenti con indicizzazione offline

L'indicizzazione offline richiede più attraversamenti dell'intero archivio. Con le installazioni MongoMK, l'accesso all'archivio avviene attraverso la rete che influisce sulle prestazioni del processo di indicizzazione. Un'opzione consiste nell'eseguire il processo di indicizzazione offline sulla replica MongoDB stessa, che eliminerà il sovraccarico di rete. Un'altra opzione è l'utilizzo della modalità traversal del documento.

La modalità traversal documento può essere applicata aggiungendo il parametro della riga di comando —doc-traversal al comando oak-run per l'indicizzazione offline. Questa modalità spool una copia dell'intero archivio nel disco locale come file flat e lo utilizza per eseguire l'indicizzazione.

In questa pagina