Reintentar solicitudes incorrectas

En esta página se describen las prácticas recomendadas para reintentar solicitudes fallidas a la API de Gestión de Identidades y Accesos (IAM).

En el caso de las solicitudes que se pueden volver a intentar, te recomendamos que uses un tiempo de espera exponencial truncado con fluctuación.

Información general sobre el tiempo de espera exponencial truncado

Cada solicitud a la API de IAM puede completarse correctamente o fallar. Si tu aplicación vuelve a intentar enviar solicitudes fallidas sin esperar, puede que envíe un gran número de reintentos a IAM en un breve periodo. Por lo tanto, es posible que superes las cuotas y los límites que se aplican a todos los recursos de gestión de identidades y accesos de tu Trusted Cloud by S3NS proyecto.

Para evitar que se produzca este problema, te recomendamos que uses retroceso exponencial truncado con jitter, que es una estrategia de gestión de errores estándar para las aplicaciones de red. Con este enfoque, un cliente vuelve a intentar periódicamente una solicitud fallida con retrasos que aumentan exponencialmente entre los reintentos. También se añade un pequeño retraso aleatorio, conocido como fluctuación, entre reintentos. Este retraso aleatorio ayuda a evitar una oleada sincronizada de reintentos de varios clientes, también conocida como el problema de la estampida.

Algoritmo de tiempo de espera exponencial

El siguiente algoritmo implementa un tiempo de espera exponencial truncado con fluctuación:

  1. Envía una solicitud a IAM.
  2. Si la solicitud no se ejecuta correctamente, espera 1 + random-fraction segundos y vuelve a intentarlo.
  3. Si la solicitud falla, espera 2 + random-fraction segundos y vuelve a intentarlo.
  4. Si la solicitud no se ejecuta correctamente, espera 4 + random-fraction segundos y vuelve a intentarlo.
  5. Continúa con este patrón, esperando 2n + random-fraction segundos después de cada reintento, hasta maximum-backoff veces.
  6. Después de deadline segundos, deja de volver a intentar la solicitud.

Usa los siguientes valores al implementar el algoritmo:

  • Antes de cada reintento, el tiempo de espera es min((2n + random-fraction), maximum-backoff), con n empezando en 0 y aumentando en 1 en cada reintento.
  • Sustituye random-fraction por un valor fraccionario aleatorio igual o inferior a 1. Usa un valor diferente para cada reintento. Al añadir este valor aleatorio, se evita que los clientes se sincronicen y envíen un gran número de reintentos al mismo tiempo.
  • Sustituye maximum-backoff por el tiempo máximo, en segundos, que se debe esperar entre reintentos. Los valores habituales son 32 o 64 (25 o 26) segundos. Elige el valor que mejor se adapte a tu caso práctico.
  • Sustituye deadline por el número máximo de segundos que se deben seguir enviando reintentos. Elige un valor que refleje tu caso práctico. Por ejemplo, en una canalización de integración continua y despliegue continuo (CI/CD) que no sea muy sensible al tiempo, puedes definir deadline en 300 segundos (5 minutos).

Tipos de errores que se pueden reintentar

Usa esta estrategia de reintento para todas las solicitudes a la API IAM que devuelvan los códigos de error 500, 502, 503 o 504.

También puedes usar esta estrategia de reintento para las solicitudes a la API IAM que devuelvan el código de error 404. Las lecturas de IAM son coherentes con el tiempo. Por lo tanto, es posible que los recursos no se vean inmediatamente después de crearlos, lo que puede provocar errores 404.

Además, usa una versión modificada de esta estrategia de reintento para todas las solicitudes a la API IAM que devuelvan el código de error 409 y el estado ABORTED. Este tipo de error indica un problema de simultaneidad. Por ejemplo, puede que estés intentando actualizar una política de permiso que otro cliente ya haya sobrescrito. En este tipo de error, siempre debes volver a intentar toda la serie de solicitudes lectura-modificación-escritura, usando un tiempo de espera exponencial truncado con fluctuaciones introducidas. Si solo vuelves a intentar la operación de escritura, la solicitud seguirá fallando.

Siguientes pasos