¿Cómo puedo mejorar el rendimiento de indexación en mi clúster de Amazon OpenSearch Service?

Última actualización: 30/07/2021

Quiero optimizar las operaciones de indexación en Amazon OpenSearch Service para obtener el máximo rendimiento de procesamiento. ¿Cómo puedo hacerlo?

Resolución

Asegurarse de que las particiones se distribuyan de manera uniforme en los nodos de datos del índice en el que va a procesar

Utilice la siguiente fórmula para confirmar que las particiones se distribuyen de manera uniforme:

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

Por ejemplo, si hay 24 particiones en el índice y hay ocho nodos de datos, OpenSearch Service asigna tres particiones a cada nodo. Para obtener más información, consulte Introducción a Amazon OpenSearch Service: ¿cuántas particiones necesito?

Aumentar refresh_interval a 60 segundos o más

Actualice el índice de OpenSearch Service de modo que los documentos queden disponibles para la búsqueda. Tenga en cuenta que para actualizar el índice se necesitan los mismos recursos que utilizan los subprocesos de indexación.

El intervalo de actualización predeterminado es de un segundo. Al aumentar el intervalo de actualización, el nodo de datos realiza menos llamadas a la API. El intervalo de actualización puede ser más corto o más rápido en función de la duración del intervalo de actualización. Para evitar los errores de tipo 429, es una práctica recomendada aumentar el intervalo de actualización.

Nota: El intervalo de actualización predeterminado es de un segundo para los índices que reciben una o más peticiones de búsqueda en los últimos 30 segundos. Para obtener más información sobre el intervalo predeterminado actualizado, consulte la versión 7.x de la API _refresh en el sitio web de Elasticsearch.

Cambiar el recuento de réplicas a cero

Si prevé una indexación intensa, considere establecer el valor index.number_of_replicas en “0”. Cada réplica duplica el proceso de indexación. Como resultado, desactivar las réplicas mejorará el rendimiento del clúster. Una vez finalizada la indexación intensa, reactive los índices replicados.

Importante: Si un nodo falla mientras las réplicas están deshabilitadas, es posible que pierda datos. Deshabilite las réplicas solo si puede tolerar la pérdida de datos durante un breve periodo.

Experimentar para encontrar el tamaño óptimo de las solicitudes masivas

Comience con el tamaño de solicitud masiva de 5 MiB a 15 MiB. A continuación, aumente lentamente el tamaño de la solicitud hasta que el rendimiento de indexación deje de mejorar. Para obtener más información, consulte Uso y cambio de tamaño de solicitudes masivas en el sitio web de Elasticsearch.

Nota: Algunos tipos de instancias limitan las solicitudes masivas a 10 MiB. Para obtener más información, consulte Límites de red.

Utilizar un tipo de instancia que tenga volúmenes de almacén de instancias SSD (como I3)

Las instancias I3 proporcionan almacenamiento rápido y local de memoria exprés (NVMe). Las instancias I3 ofrecen un mejor rendimiento de ingesta que las instancias que utilizan volúmenes SSD de uso general (gp2) de Amazon Elastic Block Store (Amazon EBS). Para obtener más información, consulte Escala de petabytes para Amazon OpenSearch Service.

Reducir el tamaño de respuesta

Para reducir el tamaño de la respuesta de OpenSearch Service, utilice el parámetro filter_path para excluir campos innecesarios. Asegúrese de no filtrar los campos necesarios para identificar o volver a intentar las solicitudes fallidas. Estos campos pueden variar según el cliente.

En el siguiente ejemplo, los campos index-name, type-name y took se excluyen de la respuesta:

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"} }

Para obtener más información, consulte Reducción del tamaño de respuesta.

Aumentar el valor de index.translog.flush_threshold_size

De forma predeterminada, index.translog.flush_threshold_size se establece en 512 MB. Esto significa que el translog se vacía cuando alcanza los 512 MB. El peso de la carga de indexación determina la frecuencia del translog. Al aumentar index.translog.flush_threshold_size, el nodo realiza la operación de translog con menos frecuencia. Debido a que los vaciados de OpenSearch Service son operaciones que consumen muchos recursos, reducir la frecuencia de los translogs mejora el rendimiento de la indexación. Al aumentar el tamaño del umbral de vaciado, el clúster de OpenSearch Service también crea menos segmentos grandes (en lugar de varios segmentos pequeños). Los segmentos grandes se fusionan con menos frecuencia y se utilizan más subprocesos para indexar en lugar de fusionar.

Nota: Un aumento de index.translog.flush_threshold_size también puede aumentar el tiempo que tarda en completarse un translog. Si una partición falla, la recuperación lleva más tiempo porque el translog es más grande.

Antes de aumentar index.translog.flush_threshold_size, llame a la siguiente operación de la API para obtener las estadísticas actuales de la operación de vaciado:

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

Sustituya os-endpoint e index-name por sus variables respectivas.

En el resultado, anote el número de vaciados y el tiempo en total. El siguiente resultado de ejemplo muestra que hay 124 vaciados, que tardaron 17 690 milisegundos:

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

Para aumentar el tamaño del umbral de vaciado, llame a la siguiente operación de la API:

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

En este ejemplo, el tamaño del umbral de vaciado se establece en 1024 MB, lo que resulta ideal para las instancias que tienen más de 32 GB de memoria.

Nota: Elija el tamaño de umbral adecuado para su dominio de OpenSearch Service.

Ejecute de nuevo la operación de la API _stats para ver si la actividad de vaciado ha cambiado:

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

Nota: Se recomienda aumentar el index.translog.flush_threshold_size solo para el índice actual. Después de confirmar el resultado, aplique los cambios a la plantilla de índice.

Amazon OpenSearch Service es el sucesor de Amazon Elasticsearch Service.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?