Comportamiento de los reintentos - AWS SDK y herramientas

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Comportamiento de los reintentos

El comportamiento de reintento incluye la configuración relativa a la forma en que los SDK intentan recuperarse de los errores derivados de las solicitudes realizadas a Servicios de AWS.

Configure esta funcionalidad mediante lo siguiente:

max_attempts- configuración de AWS config archivos compartidos
AWS_MAX_ATTEMPTS - variable de entorno
aws.maxAttempts- Propiedad del sistema JVM: solo en Java/Kotlin

Especifica el número máximo de intentos que se pueden realizar en una solicitud.

Valor predeterminado: si no se especifica este valor, su valor predeterminado depende del valor de la configuración retry_mode:

  • Si retry_mode es legacy: usa un valor predeterminado específico de su SDK (consulte su guía específica del SDK o la base de código de su SDK para ver el valor predeterminado de max_attempts).

  • Si retry_mode es standard: realiza tres intentos.

  • Si retry_mode es adaptive: realiza tres intentos.

Valores válidos: un número mayor que cero.

retry_mode- configuración de archivos compartidos AWS config
AWS_RETRY_MODE - variable de entorno
aws.retryMode- Propiedad del sistema JVM: solo en Java/Kotlin

Especifica cómo el SDK o la herramienta para desarrolladores intentan los reintentos.

Valor predeterminado: legacy es la estrategia de reintentos predeterminada.

Valores válidos:

  • legacy – Específico para su SDK (consulte su guía de SDK específica o la base de código de su SDK).

  • standard – El conjunto estándar de reglas de reintento en todos los AWS SDK. Este modo incluye un conjunto estándar de errores que se reintentan y admite cuotas de reintentos. El número máximo predeterminado de intentos con este modo es tres, a menos que max_attempts se configure de forma explícita.

  • adaptive – Un modo de reintento experimental que incluye la funcionalidad del modo estándar, pero incluye una limitación automática del lado del cliente. Como este modo es experimental, podría cambiar su comportamiento en el futuro.

A continuación se muestra el pseudocódigo de alto nivel para ambos modos de reintento standard y adaptive:

MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }

A continuación se muestran más detalles sobre los componentes utilizados en el pseudocódigo:

GetSendToken:

Los token buckets solo se utilizan en el modo de reintento adaptive. Los token buckets imponen una tasa máxima de solicitudes al requerir que haya un token disponible para poder iniciar una solicitud. El cliente del SDK se puede configurar para rechazar rápidamente la solicitud o bloquearla hasta que haya un token disponible.

La limitación de velocidad por parte del cliente es un algoritmo que, en un principio, permite realizar solicitudes a cualquier velocidad, hasta el límite de token permitido. Sin embargo, cuando se detecta una respuesta limitada, el cliente queda limitado en consecuencia. rate-of-request La asignación de fichas también se incrementa en consecuencia si se reciben respuestas satisfactorias.

Con la limitación de velocidad adaptativa, los SDK pueden reducir la velocidad a la que se envían las solicitudes para adaptarse mejor a la capacidad de. Servicios de AWS

SendHTTPRequest:

La mayoría de AWS los SDK utilizan una biblioteca HTTP que utiliza grupos de conexiones para que puedas reutilizar una conexión existente al realizar una solicitud HTTP. Por lo general, las conexiones se reutilizan al reintentar las solicitudes debido a errores de limitación. Las solicitudes no se reutilizan al volver a intentarlo debido a errores transitorios.

RequestBookkeeping:

La cuota de reintentos debe actualizarse si la solicitud se realiza correctamente. Solo en el modo de reintento adaptive, la variable de estado maxsendrate se actualiza en función del tipo de respuesta recibida.

Retryable:

Este paso determina si se puede volver a intentar una respuesta en función de lo siguiente:

  • El código de estado HTTP.

  • El código de error devuelto por el servicio.

  • Errores de conexión, definidos como cualquier error recibido por el SDK en el que no se reciba una respuesta HTTP del servicio.

Los errores transitorios (códigos de estado HTTP 400, 408, 500, 502, 503 y 504) y los errores de limitación (códigos de estado HTTP 400, 403, 429, 502, 503 y 509) se pueden volver a intentar. El comportamiento de los reintentos del SDK se determina en combinación con los códigos de error u otros datos del servicio.

MAX_ATTEMPTS:

Se especifica mediante la configuración del archivo config o de la variable de entorno.

HasRetryQuota

Este paso limita las solicitudes de reintentos de limitaciones al requerir que haya un token disponible en el bucket de cuotas de reintentos. Los buckets de cuotas de reintentos son un mecanismo para evitar reintentos que no tienen probabilidades de éxito. Estas cuotas dependen del SDK, suelen depender del cliente y, a veces, incluso de los puntos de conexión del servicio. Los tokens de cuota de reintentos disponibles se eliminan cuando las solicitudes fallan por varios motivos y se reponen cuando se cumplen correctamente. Si no queda ningún token, se cierra el ciclo de reintentos.

ExponentialBackoff

En el caso de un error que se pueda volver a intentar, el retraso del reintento se calcula mediante un retroceso exponencial truncado. Los SDK utilizan un retroceso exponencial binario truncado con fluctuación de fase. El siguiente algoritmo muestra cómo se define la cantidad de tiempo de reposo, en segundos, para una respuesta a una solicitud: i

seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)

En el algoritmo anterior, se aplican los siguientes valores:

b = random number within the range of: 0 <= b <= 1

r = 2

MAX_BACKOFF = 20 seconds para la mayoría de los SDK. Consulte la guía o el código fuente específicos del SDK para confirmarlo.

Compatibilidad con los SDK AWS

Los siguientes SDK admiten las características y los ajustes descritos en este tema. Se anotan todas las excepciones parciales. Todos los ajustes de propiedades del sistema JVM son compatibles con AWS SDK for Java y únicamente. AWS SDK para Kotlin

SDK Compatible Notas o más información
AWS CLI  v2
SDK para C++
SDK para Go V2 (1.x)
SDK para Go 1.x (V1) No
SDK para Java 2.x
SDK para Java 1.x
SDK para 3.x JavaScript
SDK para 2.x JavaScript No Admite un número máximo de reintentos, el retroceso exponencial con fluctuación de fase y la opción de un método personalizado para el retraso de los reintentos.
SDK para Kotlin
SDK para .NET 3.x
SDK para PHP 3.x
SDK para Python (Boto3)
SDK para Ruby 3.x
SDK para Rust
Herramientas para PowerShell