Tiempo de espera exponencial

El tiempo de espera exponencial es una estrategia de gestión de errores estándar para las aplicaciones de red en la que un cliente vuelve a intentar periódicamente una solicitud fallida con retrasos cada vez mayores entre las solicitudes. Los clientes deben usar un tiempo de espera exponencial para todas las solicitudes a Memorystore para Redis que devuelvan errores con los códigos de respuesta HTTP 5xx y 429.

Es importante que sepas cómo funciona la retirada exponencial si:

Si usas la Google Cloud consola, esta envía solicitudes a Memorystore para Redis en tu nombre y gestiona cualquier retroceso necesario.

Algoritmo de ejemplo

Un algoritmo de espera exponencial vuelve a intentar enviar las solicitudes de forma exponencial, lo que aumenta el tiempo de espera entre reintentos hasta un tiempo de espera máximo. Por ejemplo:

  1. Haz una solicitud a Memorystore para Redis.

  2. Si la solicitud falla, espera 1 + random_number_milliseconds segundos y vuelve a intentarlo.

  3. Si la solicitud falla, espera 2 + random_number_milliseconds segundos y vuelve a intentarla.

  4. Si la solicitud falla, espera 4 + random_number_milliseconds segundos y vuelve a intentarlo.

  5. Y así sucesivamente, hasta maximum_backoff veces.

  6. Sigue esperando y reintentando hasta alcanzar un número máximo de reintentos, pero no aumentes el periodo de espera entre reintentos.

donde:

  • El tiempo de espera es min(((2^n)+random_number_milliseconds), maximum_backoff), con n incrementado en 1 en cada iteración (solicitud).

  • random_number_milliseconds es un número aleatorio de milisegundos inferior o igual a 1000. De esta forma, se evitan los casos en los que muchos clientes se sincronizan por alguna situación y todos vuelven a intentarlo a la vez, enviando solicitudes en oleadas sincronizadas. El valor de random_number_milliseconds debe recalcularse después de cada solicitud de reintento.

  • maximum_backoff suele ser de 32 o 64 segundos. El valor adecuado depende del caso práctico.

Puedes seguir intentándolo una vez que alcances el tiempo de maximum_backoff. Los reintentos posteriores a este punto no tienen que seguir aumentando el tiempo de espera. Por ejemplo, si un cliente usa un maximum_backoff de 64 segundos, cuando alcance este valor, podrá volver a intentarlo cada 64 segundos. En algún momento, se debe impedir que los clientes vuelvan a intentarlo indefinidamente.

El tiempo de espera máximo y el número máximo de reintentos que usa un cliente dependen del caso práctico y de las condiciones de la red. Por ejemplo, es posible que los clientes móviles de una aplicación tengan que reintentar la operación más veces y durante intervalos más largos que los clientes de escritorio de la misma aplicación.

Si las solicitudes de reintento fallan después de superar el número máximo de reintentos, informa o registra un error mediante uno de los métodos que se indican en Obtener asistencia.