As políticas deGerenciamentointeligente de Carga de Trabalho (IWM) no Atlas são de redução de carga, o que significa que rejeitam ou encerram operações para manter o cluster saudável sob sobrecarga. Quando essas políticas atuam, seu aplicação pode ver novos erros para operações que o servidor rejeitou ou encerrou devido à sobrecarga do servidor . Esses erros de sobrecarga possuem o SystemOverloadedError rótulo.
As seguintes políticas de IWM de redução de carga retornam erros quando rejeitam ou encerram operações:
Quando o limitador de taxa de operação adaptável rejeita operações, o servidor retorna um erro com o código IngressOperationRateLimitExceeded. Por exemplo:
{ "ok": 0.0, "errmsg": "Request rejected: ingress operation rate limit exceeded", "code": 463, "codeName": "IngressOperationRateLimitExceeded", "errorLabels": ["SystemOverloadedError", "RetryableError", "NoWritesPerformed"] }
IngressOperationRateLimitExceeded os erros têm a etiqueta SystemOverloadedError, que indica que o servidor está sobrecarregado e perdem carga. Esse rótulo por si só não média que a operação pode ser repetida com segurança.
Para determinar se um erro pode ser repetido, verifique as seguintes etiquetas:
RetryableError- a operação não foi executada e é seguro tentar novamenteNoWritesPerformed- o servidor rejeitou a operação na entrada, antes de executar qualquer escrita
Para saber como implementar lógica de repetição para erros de sobrecarga, consulte Tratamento de erros de sobrecarga.
Quando o Query Sintanel encerra operações de query ineficientes e de longa duração, o servidor retorna um erro com o código InterruptedDueToOverload. Por exemplo:
{ "ok": 0, "errmsg": "operation was interrupted", "code": 473, "codeName": "InterruptedDueToOverload", "errorLabels": ["SystemOverloadedError"] }
InterruptedDueToOverload os erros têm a etiqueta SystemOverloadedError, que indica que o servidor está sobrecarregado e perdem carga.
Um InterruptedDueToOverload erro significa que o servidor encerrou a operação para proteger a estabilidade do cluster. Este erro não é designado como repetível e não inclui o RetryableError rótulo. Se você tentar novamente a operação, certifique-se de que ela seja idempotente e aguarde antes de tentar novamente para não contribuir para a sobrecarga. Use backoff e jitter exponenciais em sua lógica de repetição. Para saber mais, consulte Tratamento de erros de sobrecarga.
Versões de bibliotecas de clientes com reconhecimento de backpressure
Drivers com reconhecimento de backpressure e outras bibliotecas de cliente reconhecem automaticamente erros de sobrecarga com o rótulo SystemOverloadedError e os tratam como um sinal de sobrecarga. Se o erro tiver um rótulo que induz a uma nova tentativa, incluindo o rótulo RetryableError, a biblioteca do cliente com reconhecimento de backpressure tentará automaticamente a operação com backoff e jitter exponenciais.
A tabela a seguir lista as primeiras versões da biblioteca do cliente que reconhecem a backpressure:
Biblioteca do cliente | Versão mais antiga com reconhecimento de backpressure |
|---|---|
Driver C | 2.3 |
Driver C++ | 4.3 |
Driver .NET/C# | 3.8 |
Driver GO | 2.6 |
Driver de sincronização Java | 5.7 |
Driver de fluxos reativos do Java | 5.7 |
Driver Kotlin Coroutine | 5.7 |
Driver de Kotlin Sync | 5.7 |
Controlador Node.js | 7.2 |
Biblioteca PHP | 2.3 |
PyMongo | 4.17 |
Driver Scala | 5.7 |
Se você estiver usando uma biblioteca de cliente com reconhecimento de backpressure, não precisará implementar nenhuma lógica de repetição adicional para lidar com erros de sobrecarga das políticas de IWM. Se você não estiver usando uma biblioteca de cliente com reconhecimento de backpressure, consulte Como lidar com erros de sobrecarga para obter orientação.
Tratamento de erros de sobrecarga
Se você não estiver usando uma biblioteca de cliente com reconhecimento de backpressure, consulte o procedimento a seguir para obter exemplos de como implementar a lógica de detecção e repetição de erros com backoff exponencial para lidar com erros de sobrecarga:
Use o procedimento a seguir para implementar utilitários para detectar erros de sobrecarga e tentar novamente com backoff exponencial.
Diretriz para novas tentativas de sobrecarga seguras
Ao repetir operações que falharam com erros de sobrecarga, use as seguintes diretrizes para evitar contribuir para a sobrecarga e aumentar as chances de novas tentativas bem-sucedidas:
Limite suas tentativas de repetição: use um máximo de 2 tentativas por operação. Limites mais altos reduzem as taxas de erro, mas aumentam a carga do servidor durante a sobrecarga, enquanto menos tentativas de repetição podem reduzir a carga do servidor , mas aumentar as taxas de erros.
Aplicar seletivamente: use esse padrão somente para operações sensíveis à latência ou críticas aos negócios. Para cargas de trabalho em segundo plano, registre os erros e tente novamente em um nível superior com atrasos mais longos.