Comment puis-je améliorer les performances d'indexation sur mon cluster Amazon OpenSearch Service ?

Date de la dernière mise à jour : 30/07/2021

Je souhaite optimiser les opérations d'indexation dans Amazon OpenSearch Service pour un débit d'ingestion maximal. Comment dois-je procéder ?

Solution

Assurez-vous que la distribution des partitions de l'index que vous ingérez entre les nœuds de données est uniforme.

Utilisez la formule suivante pour vérifier que les partitions sont distribuées uniformément :

Number of shards for index = k * (number of data nodes), where k is the number of shards per node

Par exemple, si l'index comprend 24 partitions et qu'il y a huit nœuds de données, OpenSearch Service attribue trois partitions à chaque nœud. Pour plus d'informations, consultez Get started with Amazon OpenSearch Service: How many shards do I need?

Augmenter la valeur refresh_interval à 60 secondes ou plus

Actualisez votre index OpenSearch Service pour rendre vos documents disponibles à des fins de recherche. Il convient de noter que l'actualisation de votre index nécessite les mêmes ressources que celles utilisées par l'indexation des threads.

L'intervalle d'actualisation par défaut est d'une seconde. Lorsque vous augmentez cette fréquence, le nœud de données effectue moins d'appels d'API. La fréquence d'actualisation peut être plus courte ou plus rapide, selon la longueur de l'intervalle de rafraîchissement. Pour éviter les erreurs 429 , une bonne pratique consiste à augmenter la fréquence d'actualisation.

Remarque : l'intervalle d'actualisation par défaut est d'une seconde pour les index qui ont reçu une ou plusieurs requêtes de recherche au cours des 30 dernières secondes. Pour plus d'informations sur la fréquence par défaut mise à jour, consultez API _refresh version 7.x sur le site Web Elasticsearch.

Définir 0 comme nombre de réplicas

Si vous prévoyez une indexation intensive, affectez la valeur « 0 » à index.number_of_replicas. Chaque réplica duplique le processus d'indexation. Par conséquent, la désactivation des réplicas améliorera les performances de votre cluster. Une fois l'indexation intensive terminée, réactivez les index répliqués.

Important : vous risquez de perdre des données si un nœud échoue alors que les réplicas sont désactivés. Désactivez les réplicas uniquement si vous pouvez tolérer la perte de données pendant une courte durée.

Recherche de la taille optimale de demande en bloc

Commencez par la taille des demandes en bloc de 5 Mio à 15 Mio. Ensuite, augmentez lentement la taille de la demande jusqu'à ce que les performances d'indexation cessent de s'améliorer. Pour plus d'informations, consultez Utilisation et dimensionnement des demandes en bloc sur le site Web d'Elasticsearch.

Remarque : certains types d'instances limitent les demandes en bloc à 10 MiB. Pour plus d'informations, veuillez consulter la rubrique Limites de réseau.

Utilisez un type d'instance ayant des volumes de stockage d'instance SSD (comme I3)

Les instances I3 garantissent un stockage non-volatile memory express (NVMe) rapide et local. Les instances I3 offrent des performances d'ingestion meilleures que les instances qui utilisent des volumes SSD (gp2) polyvalents Amazon Elastic Block Store (Amazon EBS). Pour plus d'informations, consultez Échelle en pétaoctets pour Amazon OpenSearch Service.

Réduire la taille de réponse

Pour réduire la taille de la réponse d'OpenSearch Service, utilisez le paramètre filter_path pour exclure les champs inutiles. Assurez-vous de ne pas filtrer un champ nécessaire pour identifier ou réessayez les demandes ayant échoué. Ces champs varient selon le client.

Dans l'exemple suivant, les champs index-name, type-name, et took sont exclus de la réponse :

curl -X POST "es-endpoint/index-name/type-name/_bulk?pretty&filter_path=-took,-items.index._index,-items.index._type" -H 'Content-Type: application/json' -d'
{ "index" : { "_index" : "test2", "_id" : "1" } }
{ "user" : "testuser" }
{ "update" : {"_id" : "1", "_index" : "test2"} }
{ "doc" : {"user" : "example"} }

Pour plus d'informations, veuillez consulter la rubrique Réduction de la taille des réponses.

Augmentez la valeur de index.translog.flush_threshold_size

Par défaut, index.translog.flush_threshold_size est défini sur 512 Mo. Cela signifie que le translog est vidé lorsqu'il atteint 512 Mo. Le poids de la charge d'indexation détermine la fréquence du translog. Lorsque vous augmentez index.translog.flush_threshold_size, le nœud effectue cette opération coûteuse moins souvent. Étant donné que les vidanges d'OpenSearch Service sont des opérations gourmandes en ressources, la réduction de la fréquence des transjournaux améliore les performances d'indexation. En augmentant la taille du seuil de vidange, le cluster OpenSearch Service crée également moins de grands segments (au lieu de plusieurs petits segments). Les grands segments fusionnent moins souvent, et plus de threads sont utilisées pour l'indexation plutôt que pour la fusion.

Remarque : une augmentation de index.translog.flush_threshold_size peut également augmenter le temps nécessaire à la réalisation d'un translog. Si une partition échoue, la récupération prend plus de temps car le translog est plus important.

Avant d'augmenter index.translog.flush_threshold_size, appelez l'opération d'API suivante pour obtenir les statistiques actuelles des opérations de vidage :

$ curl 'os-endpoint/index-name/_stats/flush?pretty'

Remplacez point-de-terminaison-os et nom-index par vos variables respectives.

Dans la sortie, notez le nombre de vidages et le temps total. L'exemple de sortie suivant montre qu'il y a 124 vidages, ce qui a pris 17 690 millisecondes :

"flush" { "total" : 124, "total_time_in_millis" : 17690 }

Pour augmenter la taille du seuil de vidage, appelez l'opération d'API suivante :

$ curl -XPUT 'os-endpoint/index-name/_settings?pretty' -d '{"index":{"translog.flush_threshold_size" : "1024MB"}}'

Dans cet exemple, la taille du seuil de vidage est 1024 Mo, ce qui est idéal pour les instances avec plus de 32 Go de mémoire.

Remarque : choisissez la taille de seuil appropriée pour votre domaine OpenSearch Service.

Exécutez à nouveau l'opération d'API _stats pour déterminer si l'activité de vidage a changé :

$ curl 'os-endpoint/index-name/_stats/flush?pretty'

Remarque : une bonne pratique consiste à augmenter index.translog.flush_threshold_size uniquement pour l'index actuel. Une fois que vous avez vérifié le résultat, appliquez les modifications au modèle d'index.

Amazon OpenSearch Service est le successeur d'Amazon Elasticsearch Service.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?