Configuración de reintentos en AWS SDK para Rust - AWS SDK para Rust

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.

Configuración de reintentos en AWS SDK para Rust

AWS SDK para Rust proporciona un comportamiento de reintento predeterminado para las solicitudes de servicio y opciones de configuración personalizables. Las llamadas a Servicios de AWS ocasionalmente devuelven excepciones inesperadas. Pueden producirse determinados tipos errores, como la limitación o errores temporales, si se vuelve a intentar la llamada.

El comportamiento de los reintentos se puede configurar globalmente mediante variables de entorno o ajustes del archivo config de AWS compartido. Para obtener información sobre este enfoque, consulte Comportamiento de los reintentos en la Guía de referencia de herramientas y AWS SDK. También incluye información detallada sobre las implementaciones de las estrategias de reintento y sobre cómo elegir una u otra.

Como alternativa, estas opciones también se pueden configurar en el código, como se muestra en las siguientes secciones.

Configuración de reintento predeterminada

Cada cliente de servicio utiliza de forma predeterminada la configuración de la estrategia de reintento standard proporcionada a través de la estructura RetryConfig. De forma predeterminada, se intentará realizar una llamada tres veces (el intento inicial más dos reintentos). Además, cada reintento se retrasará durante un breve periodo de tiempo al azar para evitar avalanchas de reintentos. Esta convención es adecuada para la mayoría de los casos de uso, pero puede no serlo en circunstancias específicas, como los sistemas de alto rendimiento.

Los SDK consideran que solo algunos tipos de errores se pueden volver a intentar. Algunos ejemplos de errores que se pueden reintentar son:

  • tiempos de espera de sockets

  • limitación del lado del servicio

  • errores de servicio transitorios, como las respuestas HTTP 5XX

Los siguientes ejemplos no se consideran reintentables:

  • Parámetros ausentes o no válidos

  • errores de autenticación/seguridad

  • excepciones de configuración incorrecta

Puede personalizar la estrategia de reintento standard estableciendo la configuración máxima de intentos, retrasos y retrocesos.

Número máximo de intentos

Puede personalizar el número máximo de intentos en el código proporcionando una RetryConfig modificada a la aws_config::defaults:

const CUSTOM_MAX_ATTEMPTS: u32 = 5; let retry_config = RetryConfig::standard() // Set max attempts. When max_attempts is 1, there are no retries. // This value MUST be greater than zero. // Defaults to 3. .with_max_attempts(CUSTOM_MAX_ATTEMPTS); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;

Retrasos y retrocesos

Si es necesario un reintento, la estrategia de reintento predeterminada espera antes de realizar el siguiente intento. El retraso del primer reintento es pequeño, pero aumenta de manera exponencial en los reintentos posteriores. La cantidad máxima de retraso está limitada para que no aumente demasiado.

Se aplica una fluctuación al azar a los retrasos entre todos los intentos. La fluctuación ayuda a mitigar el efecto de las grandes flotas, que pueden provocar avalanchas de reintentos. Para obtener un análisis más profundo sobre el retroceso exponencial y la fluctuación, consulte Exponential Backoff And Jitter en el blog de arquitectura de AWS.

Puede personalizar la configuración de retardo de su código proporcionando una RetryConfig modificada a la aws_config::defaults. El código siguiente establece la configuración para retrasar el primer intento de reintento hasta 100 milisegundos y que el tiempo máximo entre cualquier reintento sea de 5 segundos.

let retry_config = RetryConfig::standard() // Defaults to 1 second. .with_initial_backoff(Duration::from_millis(100)) // Defaults to 20 seconds. .with_max_backoff(Duration::from_secs(5)); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;

Modo de reintento flexible

Como alternativa a la estrategia de reintento de modo standard, la estrategia de reintento de modo adaptive es un enfoque avanzado que busca la tasa de solicitud ideal para minimizar los errores de limitación.

nota

Los reintentos adaptables son un modo de reintento avanzado. Por lo general, no se recomienda el uso de esta estrategia. Consulte Comportamiento de los reintentos en la Guía de referencia de herramientas y SDK de AWS.

Los reintentos flexibles incluyen todas las características de los reintentos estándar. Incorpora un limitador de velocidad en el cliente que mide la tasa de solicitudes limitadas en comparación con las no limitadas. También limita el tráfico para intentar mantenerse dentro de un ancho de banda seguro, lo que idealmente provoca cero errores de limitación.

La velocidad se adapta en tiempo real a las condiciones cambiantes del servicio y a los patrones de tráfico, y es posible que aumente o disminuya la velocidad del tráfico en consonancia. Es importante destacar que el limitador de velocidad puede retrasar los intentos iniciales en situaciones de mucho tráfico.

Puede seleccionar la estrategia de reintento adaptive en el código proporcionando una RetryConfig modificada:

let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(RetryConfig::adaptive()) .load() .await;