Una delle principali sfide 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 l'esecuzione dell'aggiornamento, riducendo così la quantità di downtime durante l'aggiornamento effettivo. Le fasi presentate possono essere applicate a Lucene indici per le versioni AEM 6.4 e successive.
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 è salta l’attività di reindicizzazione durante l’aggiornamento. Ciò può essere ottenuto creando nuovi indici precedente per eseguire l'aggiornamento, è sufficiente importarli durante l'aggiornamento.
L'idea è quella di creare l'indice prima dell'aggiornamento, rispetto alle definizioni dell'indice della versione AEM di destinazione utilizzando corsa Oak strumento. Il diagramma precedente mostra l'approccio di reindicizzazione offline.
Inoltre, questo è l’ordine dei passaggi descritti nell’approccio:
Per abilitare l’indicizzazione completa in AEM, il testo dei file binari come 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.
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 nel repository 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
è mongo_ur
o crx-quickstart/repository/segmentstore/
Utilizza la --fake-ds-path=temp
invece di –fds-path
per accelerare 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
è 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 full text, 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 sezione Documentazione di Oak-run.
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. Generare 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 dal source AEM'istanza, esegui questo comando:
Per maggiori dettagli sulle definizioni degli indici di dumping, consultare il Documentazione Oak.
java -jar oak-run.jar index --fds-path <datastore path> <nodestore path> --index-definitions
Dove datastore path
e nodestore path
sono del source AEM'istanza.
Quindi, genera le definizioni degli indici dal target Versione 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
Il processo di creazione della definizione dell'indice di cui sopra è supportato solo da oak-run-1.12.0
a partire dalla versione. 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. Creare un checkpoint nell’archivio
Creare un checkpoint nella produzione source AEM'istanza con una vita lunga. 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
.
Questo punto di controllo verrà eliminato quando l'indice viene importato in un secondo momento.
Per maggiori dettagli, consulta creazione di checkpoint 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
. Lo fa not scrivi nell’archivio e quindi non richiede 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.
Utilizzo del --doc-traversal-mode
Il parametro è 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 sezione documentazione oak-run per l'indicizzazione.
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 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 di target AEM barattolo. AEM lo importa nell’archivio e rimuove il checkpoint corrispondente dal sistema. Così si evita completamente una reindicizzazione.
Di seguito sono riportati alcuni suggerimenti utili e istruzioni per la risoluzione dei problemi.
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.
Si consiglia di preparare un runbook ed eseguire alcune prove prima di eseguire l'aggiornamento in produzione.
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.