Retirada exponencial

La retirada exponencial es una estrategia estándar de manejo de errores para aplicaciones de red en la que el cliente vuelve a intentar una solicitud con errores de forma periódica, cada vez con menos frecuencia entre las solicitudes. Los clientes deben usar la retirada exponencial en todas las solicitudes a Memorystore para Redis que muestren errores de código de respuesta HTTP 5xx y 429.

Comprender el funcionamiento de la retirada exponencial es importante si deseas realizar las siguientes acciones:

Si usas Google Cloud Console, la consola envía solicitudes a Memorystore para Redis en tu nombre y se encargará de cualquier retirada necesaria.

Algoritmo de ejemplo

Un algoritmo de retirada exponencial vuelve a intentar las solicitudes de forma exponencial, lo que aumenta el tiempo de espera entre los reintentos hasta un tiempo de retirada máximo. A continuación, se presenta un ejemplo:

  1. Realiza una solicitud a Memorystore para Redis.

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

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

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

  5. Y así sucesivamente, hasta un tiempo de maximum_backoff.

  6. Continúa con la espera y los reintentos hasta un número máximo de reintentos, pero no aumentes el período de espera entre los reintentos.

Donde:

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

  • random_number_milliseconds es un número al azar de milisegundos menor o igual que 1,000. Esto ayuda a evitar los casos en que muchos clientes se sincronizan por alguna situación y todos vuelven a intentarlo a la vez, lo que hace que se envíen solicitudes sincronizadas en cantidad. El valor de random_number_milliseconds se debe volver a calcular después de cada solicitud de reintento.

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

Puedes continuar con los reintentos una vez que alcances el tiempo maximum_backoff. Después de este punto, los reintentos no necesitan continuar con el aumento del tiempo de retirada. Por ejemplo, si un cliente usa un tiempo maximum_backoff de 64 segundos, luego de alcanzar este valor, el cliente puede volver a intentarlo cada 64 segundos. En algún momento, se debe evitar que los clientes vuelvan a intentarlo de forma ilimitada.

La cantidad máxima de retiradas y la cantidad máxima 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 deban intentar más veces y por intervalos más largos, en comparación con los clientes de escritorio de la misma aplicación.

Si las solicitudes de reintento fallan después de exceder la cantidad máxima de reintentos, informa o registra un error mediante uno de los métodos que se indican en Obtén asistencia.