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
nota
Para obtener ayuda para comprender el diseño de las páginas de configuración o para interpretar la tabla Soporte mediante herramientas y SDK de AWS que aparece a continuación, consulte Comprender las páginas de configuración de esta guía.
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 los Servicios de AWS.
Configure esta funcionalidad mediante lo siguiente:
retry_mode: configuración de archivosconfigde AWS compartidosAWS_RETRY_MODE: variable de entornoaws.retryMode: propiedad del sistema JVM: solo en Java/Kotlin-
Especifica cómo el SDK o la herramienta para desarrolladores intentan los reintentos.
Valor predeterminado: este valor es específico del SDK. Consulte la guía de SDK específica o la base de código del SDK para ver su
retry_modepredeterminado.Valores válidos:
-
standard: (recomendado) el conjunto recomendado de reglas de reintento en todos los SDK de AWS. Este modo incluye un conjunto estándar de errores que se reintentan y ajusta automáticamente el número de reintentos para maximizar la disponibilidad y la estabilidad. Este modo es seguro para su uso en aplicaciones de varios inquilinos. El número máximo predeterminado de intentos con este modo es tres, a menos que losmax_attemptsse configuren de forma explícita. -
adaptive: un modo de reintento, adecuado solo para casos de uso especializados, que incluye la funcionalidad del modo estándar, así como una limitación automática de la velocidad por parte del cliente. Este modo de reintento no se recomienda para aplicaciones con varios usuarios, a menos que se procure aislar a los inquilinos de las aplicaciones. Para obtener más información, consulte Elegir entre los modos de reintento standard y adaptive. Este modo es experimental y podría cambiar su comportamiento en el futuro. -
legacy: (no recomendado) específico para su SDK (consulte su guía de SDK específica o la base de código de su SDK).
-
max_attempts: configuración de archivosconfigde AWS compartidosAWS_MAX_ATTEMPTS: variable de entornoaws.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 el
retry_modeeslegacy: 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 demax_attempts). -
Si el
retry_modeesstandard: realiza tres intentos. -
Si el
retry_modeesadaptive: realiza tres intentos.
Valores válidos: un número mayor que 0.
-
Elegir entre los modos de reintento standard y adaptive
Le recomendamos que utilice el modo de reintento standard a menos que esté seguro de que su uso es el más adecuado para adaptive.
nota
El modo adaptive presupone que se agrupan los clientes en función del alcance en el que el servicio de backend puede limitar las solicitudes. Si no se hace esto, la limitación de un recurso podría retrasar las solicitudes de un recurso no relacionado si se utiliza el mismo cliente para ambos recursos.
| Estándar | Flexible |
|---|---|
| Aplicación y casos de uso: todos | Aplicación y casos de uso:
|
| Admite la interrupción de circuitos para evitar que el SDK vuelva a intentarlo durante las interrupciones. | Admite la interrupción de circuitos para evitar que el SDK vuelva a intentarlo durante las interrupciones. |
| Utiliza un retroceso exponencial fluctuante en caso de fallo. | Utiliza tiempos de espera dinámicos para intentar minimizar el número de solicitudes fallidas, a cambio de la posibilidad de aumentar la latencia. |
| Nunca retrasa el primer intento de solicitud, solo los reintentos. | Puede limitar o retrasar el intento de solicitud inicial. |
Si opta por utilizar el modo adaptive, la aplicación debe crear clientes diseñados en función de cada recurso que pueda estar limitado. Un recurso, en este caso, es más preciso que pensar en cada Servicio de AWS. Los Servicios de AWS pueden tener dimensiones adicionales que utilizan para limitar las solicitudes. Usemos el servicio Amazon DynamoDB como ejemplo. DynamoDB usa Región de AWS más la tabla a la que se accede para limitar las solicitudes. Esto significa que una tabla a la que está accediendo su código podría estar más limitada que otras. Si el código utilizaba el mismo cliente para acceder a todas las tablas y las solicitudes a una de esas tablas están limitadas, el modo de reintento adaptativo reducirá la tasa de solicitudes de todas las tablas. El código debe diseñarse para tener un cliente por cada par de región y tabla. Si sufre una latencia inesperada al usar el modo adaptive, consulte la guía de documentación específica de AWS del servicio que esté utilizando.
Detalles de implementación del modo de reintento
Los SDK de AWS utilizan buckets de tokensadaptive) con qué rapidez se deben enviar las solicitudes. El SDK utiliza dos grupos de buckets de tokens: un bucket de token de reintentos y un bucket de token de tasa de solicitud.
-
El bucket de token de reintentos se utiliza para determinar si el SDK debe deshabilitar temporalmente los reintentos a fin de proteger los servicios ascendentes y descendentes durante las interrupciones. Los tokens se obtienen del bucket antes de que se intenten los reintentos y, cuando las solicitudes se realizan correctamente, se devuelven al bucket. Si el bucket está vacío cuando se realiza un reintento, el SDK no volverá a intentar la solicitud.
-
El bucket de tokens de tasa de solicitudes solo se usa en el modo de reintento
adaptivepara determinar la velocidad a la que se envían las solicitudes. Los tokens se adquieren del bucket antes de que se envíe la solicitud y se devuelven al depósito a un ritmo determinado dinámicamente en función de la limitación de las respuestas devueltas por el servicio.
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:
Este paso solo se utiliza en el modo de reintento adaptive. Este paso adquiere un token del bucket de tokens de tasa de solicitud. Si un token no está disponible, esperará a que uno esté disponible. Es posible que el SDK tenga opciones de configuración disponibles para rechazar la solicitud en lugar de esperar. Los tokens del bucket se rellenan a un ritmo que se determina de forma dinámica, en función del número de respuestas de limitación que reciba el cliente.
SendHTTPRequest:
Este paso envía la solicitud a AWS. La mayoría de los SDK de AWS 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 si una solicitud falla debido a errores de limitación, pero no si la solicitud falla debido a un error transitorio.
RequestBookkeeping:
Los tokens se agregan al bucket de tokens si la solicitud se realiza correctamente. Solo en el modo de reintento adaptive, la tasa de llenado del bucket de tokens de tasa de solicitudes 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:
El número máximo de intentos predeterminado lo establece la configuración retry_mode, a menos que la configuración max_attempts lo anule.
HasRetryQuota
Este paso adquiere un token del bucket de tokens de reintento. Si el bucket de tokens de reintento está vacío, no se volverá a intentar la solicitud.
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.
Soporte mediante SKD y herramientas de 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 para Java y AWS SDK para Kotlin únicamente.
| SDK | Compatible | Notas o más información |
|---|---|---|
| AWS CLI v2 | Sí | |
| SDK para C++ | Sí | |
| SDK para Go V2 (1.x) |
Sí | |
| SDK para Go 1.x (V1) | No | |
| SDK para Java 2.x | Sí | |
| SDK para Java 1.x | Sí | Propiedades del sistema JVM: usar com.amazonaws.sdk.maxAttempts en lugar de aws.maxAttempts; usar com.amazonaws.sdk.retryMode rn lugar de aws.retryMode. |
| SDK para JavaScript 3.x | Sí | |
| SDK para JavaScript 2.x | 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 de para Kotlin | Sí | |
| SDK para .NET 4.x | Sí | |
| SDK para .NET 3.x | Sí | |
| SDK para PHP 3.x | Sí | |
| SDK para Python (Boto3) |
Sí | |
| SDK para Ruby 3.x | Sí | |
| SDK de para Rust | Sí | |
| SDK de para Swift | Sí | |
| Herramientas para PowerShell V5 | Sí | |
| Herramientas para PowerShell V4 | Sí |