Las políticas deGestión Inteligente de Carga de Trabajo (IWM) en Atlas son de reducción de carga, lo que significa que rechazan o terminan operaciones para mantener el clúster en buen estado bajo sobrecarga. Cuando estas políticas actúan, su aplicación podría ver nuevos errores para operaciones que el servidor rechazó o terminó debido a la sobrecarga del servidor. Estos errores de sobrecarga tienen la SystemOverloadedError etiqueta.
Las siguientes políticas IWM de reducción de carga devuelven errores cuando rechazan o finalizan operaciones:
Cuando el limitador de velocidad de operaciones adaptativo rechaza las operaciones, el servidor devuelve un error con el código IngressOperationRateLimitExceeded. Por ejemplo:
{ "ok": 0.0, "errmsg": "Request rejected: ingress operation rate limit exceeded", "code": 463, "codeName": "IngressOperationRateLimitExceeded", "errorLabels": ["SystemOverloadedError", "RetryableError", "NoWritesPerformed"] }
IngressOperationRateLimitExceeded Los errores tienen la etiqueta SystemOverloadedError, que indica que el servidor está sobrecargado y está reduciendo la carga. Esta etiqueta por sí sola no significa que la operación pueda reintentarse de forma segura.
Para determinar si un error se puede reintentar, compruebe las siguientes etiquetas:
RetryableError- La operación no se ejecutó y es seguro volver a intentarlo.NoWritesPerformed- El servidor rechazó la operación en la entrada, antes de realizar cualquier escritura.
Para aprender cómo implementar la lógica de reintento para errores de sobrecarga, consulte Manejo de errores de sobrecarga.
Cuando Query Sentinel finaliza operaciones de consulta ineficientes y de larga duración, el servidor devuelve un error con el código InterruptedDueToOverload. Por ejemplo:
{ "ok": 0, "errmsg": "operation was interrupted", "code": 473, "codeName": "InterruptedDueToOverload", "errorLabels": ["SystemOverloadedError"] }
InterruptedDueToOverload Los errores tienen la etiqueta SystemOverloadedError, lo que indica que el servidor está sobrecargado y está reduciendo la carga.
Un InterruptedDueToOverload error indica que el servidor finalizó la operación para proteger la estabilidad del clúster. Este error no se considera reintentable y no incluye la RetryableError etiqueta. Si reintenta la operación, asegúrese de que sea idempotente y espere antes de volver a intentarlo para evitar sobrecargas. Utilice retroceso exponencial y fluctuación en la lógica de reintento. Para obtener más información, consulte la sección «Gestión de errores de sobrecarga».
Versiones de bibliotecas cliente con capacidad de gestión de la contrapresión
Los controladores y otras bibliotecas cliente que tienen en cuenta la contrapresión reconocen automáticamente los errores de sobrecarga con la etiqueta SystemOverloadedError y los interpretan como una señal de sobrecarga. Si el error tiene una etiqueta que requiere un reintento, incluida la etiqueta RetryableError, la biblioteca cliente que tiene en cuenta la contrapresión reintenta automáticamente la operación con retroceso exponencial y fluctuación.
La siguiente tabla enumera las versiones más antiguas de la biblioteca cliente que tienen en cuenta la contrapresión:
Biblioteca de clientes | Versión más antigua con capacidad de detección de contrapresión |
|---|---|
Controlador de C | 2.3 |
Controlador C++ | 4.3 |
Controlador .NET/C# | 3.8 |
Driver de Go | 2.6 |
Java Sync Driver | 5.7 |
Driver de Java Reactive Streams | 5.7 |
driver de Kotlin corrutina | 5.7 |
Driver de sincronización de Kotlin | 5.7 |
Driver de Nodo.js | 7.2 |
Biblioteca PHP | 2.3 |
PyMongo | 4.17 |
Controlador de Scala | 5.7 |
Si utiliza una biblioteca cliente compatible con la gestión de la contrapresión, no necesita implementar ninguna lógica de reintento adicional para gestionar los errores de sobrecarga de las políticas de IWM. Si no utiliza una biblioteca cliente compatible con la gestión de la contrapresión, consulte la sección «Gestión de errores de sobrecarga» para obtener más información.
Manejo de errores de sobrecarga
Si no está utilizando una biblioteca cliente que tenga en cuenta la contrapresión, consulte el siguiente procedimiento para ver ejemplos de cómo implementar la detección de errores y la lógica de reintento con retroceso exponencial para manejar errores de sobrecarga:
Utilice el siguiente procedimiento para implementar utilidades que detecten errores de sobrecarga y vuelvan a intentarlo con retroceso exponencial.
Directrices para reintentos de sobrecarga seguros
Al reintentar operaciones que fallaron debido a errores de sobrecarga, utilice las siguientes directrices para evitar contribuir a la sobrecarga y aumentar las posibilidades de reintentos exitosos:
Limita tus intentos de reintento: utiliza un máximo de 2 reintentos por operación. Un límite mayor reduce la tasa de errores, pero aumenta la carga del servidor durante la sobrecarga, mientras que un menor número de intentos de reintento puede reducir la carga del servidor, pero aumenta la tasa de errores.
Aplicación selectiva: Utilice este patrón únicamente para operaciones críticas o sensibles a la latencia. Para cargas de trabajo en segundo plano, registre los errores y vuelva a intentarlo con un nivel superior y mayores retrasos.