Resistencia mejorada con contrapresión y control de admisión para Amazon OpenSearch Service | Servicios web de Amazon

Resistencia mejorada con contrapresión y control de admisión para Amazon OpenSearch Service | Servicios web de Amazon

Nodo de origen: 2723961

Servicio Amazon OpenSearch es un servicio administrado que simplifica la protección, implementación y operación de clústeres de OpenSearch a escala en la nube de AWS. El año pasado presentamos Contrapresión de indexación de fragmentos y control de admisión, que supervisa los recursos del clúster y el tráfico entrante para rechazar de forma selectiva las solicitudes que, de otro modo, plantearían riesgos para la estabilidad, como falta de memoria y un impacto en el rendimiento del clúster debido a contenciones de memoria, saturación de la CPU y sobrecarga del GC, y más.

Ahora nos complace presentar la contrapresión de búsqueda y el control de admisión basado en CPU para OpenSearch Service, que mejora aún más la capacidad de recuperación de los clústeres. Estas mejoras están disponibles para todas las versiones de OpenSearch 1.3 o superior.

Buscar contrapresión

La contrapresión evita que un sistema se vea abrumado por el trabajo. Lo hace controlando la tasa de tráfico o eliminando la carga excesiva para evitar bloqueos y pérdida de datos, mejorar el rendimiento y evitar fallas totales del sistema.

La contrapresión de búsqueda es un mecanismo para identificar y cancelar solicitudes de búsqueda con uso intensivo de recursos en curso cuando un nodo está bajo coacción. Es eficaz contra las cargas de trabajo de búsqueda con un uso anormalmente alto de recursos (como consultas complejas, consultas lentas, muchas coincidencias o agregaciones pesadas), que de lo contrario podrían causar fallas en los nodos y afectar la salud del clúster.

Search Backpression se basa en el marco de seguimiento de recursos de tareas, que proporciona una API fácil de usar para monitorear el uso de recursos de cada tarea. Search Backpression utiliza un subproceso en segundo plano que mide periódicamente el uso de recursos del nodo y asigna una puntuación de cancelación a cada tarea de búsqueda en curso en función de factores como el tiempo de CPU, las asignaciones de almacenamiento dinámico y el tiempo transcurrido. Una puntuación de cancelación más alta corresponde a una solicitud de búsqueda que requiere más recursos. Las solicitudes de búsqueda se cancelan en orden descendente de su puntuación de cancelación para recuperar los nodos rápidamente, pero la cantidad de cancelaciones tiene un límite de frecuencia para evitar el desperdicio de trabajo.

El siguiente diagrama ilustra el flujo de trabajo de búsqueda de contrapresión.

Las solicitudes de búsqueda devuelven un código de estado HTTP 429 "Demasiadas solicitudes" al momento de la cancelación. OpenSearch devuelve resultados parciales si solo fallan algunos fragmentos y se permiten resultados parciales. Ver el siguiente código:

{ "error": { "root_cause": [ { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } ], "type": "search_phase_execution_exception", "reason": "SearchTask was cancelled", "phase": "fetch", "grouped": true, "failed_shards": [ { "shard": 0, "index": "nyc_taxis", "node": "9gB3PDp6Speu61KvOheDXA", "reason": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } } ], "caused_by": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } }, "status": 429
}

Supervisión de la contrapresión de búsqueda

Puede monitorear el estado detallado de la contrapresión de búsqueda usando la API de estadísticas del nodo:

curl -X GET "https://{endpoint}/_nodes/stats/search_backpressure"

También puede ver el resumen de cancelaciones de todo el clúster usando Reloj en la nube de Amazon. Las siguientes métricas ahora están disponibles en el ES/Servicio OpenSearch espacio de nombres:

  • Tarea de búsqueda cancelada – El número de cancelaciones del nodo coordinador
  • SearchShardTaskCancelado – El número de cancelaciones de nodos de datos

La siguiente captura de pantalla muestra un ejemplo del seguimiento de estas métricas en la consola de CloudWatch.

Control de admisión basado en CPU

El control de admisión es un mecanismo de control que limita de manera proactiva la cantidad de solicitudes a un nodo en función de su capacidad actual, tanto para aumentos orgánicos como para picos de tráfico.

Además de la presión de la memoria JVM y los umbrales de tamaño de la solicitud, ahora también supervisa el uso promedio móvil de la CPU de cada nodo para rechazar los mensajes entrantes. _search y _bulk peticiones. Evita que los nodos se sobrecarguen con demasiadas solicitudes, lo que genera puntos calientes, problemas de rendimiento, tiempos de espera de solicitudes y otras fallas en cascada. Las solicitudes excesivas devuelven un código de estado HTTP 429 "Demasiadas solicitudes" al ser rechazadas.

Manejo de errores HTTP 429

Recibirá errores HTTP 429 si envía demasiado tráfico a un nodo. Indica recursos de clúster insuficientes, solicitudes de búsqueda con uso intensivo de recursos o un pico no deseado en la carga de trabajo.

La contrapresión de búsqueda proporciona el motivo del rechazo, lo que puede ayudar a afinar las solicitudes de búsqueda que consumen muchos recursos. Para los picos de tráfico, recomendamos reintentos del lado del cliente con retraso y fluctuación exponenciales.

También puede seguir estas guías de solución de problemas para depurar rechazos excesivos:

Conclusión

La contrapresión de búsqueda es un mecanismo reactivo para eliminar la carga excesiva, mientras que el control de admisión es un mecanismo proactivo para limitar el número de solicitudes a un nodo más allá de su capacidad. Ambos funcionan en conjunto para mejorar la resiliencia general de un clúster de OpenSearch.

La contrapresión de búsqueda está disponible en Opensearch, y siempre estamos buscando contribuciones externas. Puede consultar el RFC para comenzar.


Sobre los autores

Ketan Verma es un SDE sénior que trabaja en Amazon OpenSearch Service. Le apasiona construir sistemas distribuidos a gran escala, mejorar el rendimiento y simplificar ideas complejas con abstracciones simples. Fuera del trabajo, le gusta leer y mejorar sus habilidades como barista en casa.

Suresh NS es un SDE sénior que trabaja en Amazon OpenSearch Service. Le apasiona resolver problemas en sistemas distribuidos a gran escala.

pritkumar ladani es un SDE-2 que funciona en Amazon OpenSearch Service. Le gusta contribuir al desarrollo de software de código abierto y le apasionan los sistemas distribuidos. Es un jugador aficionado de bádminton y disfruta del senderismo.

Bujtawar Khan es un ingeniero principal que trabaja en Amazon OpenSearch Service. Está interesado en construir sistemas distribuidos y autónomos. Es mantenedor y colaborador activo de OpenSearch.

Sello de tiempo:

Mas de Big Data de AWS