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:
Compilar aplicaciones cliente que usen directamente la API de REST de Memorystore para Redis.
Acceder a Memorystore para Redis a través de una biblioteca cliente. Ten en cuenta que algunas bibliotecas cliente, como la biblioteca cliente de Memorystore para Redis de Node.js, tienen una retirada exponencial integrada.
Si usas la consola de Google Cloud, la consola envía solicitudes a Memorystore para Redis en tu nombre y controla 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:
Realiza una solicitud a Memorystore para Redis.
Si la solicitud falla, espera 1 +
random_number_milliseconds
segundos y vuelve a intentar la solicitud.Si la solicitud falla, espera 2 +
random_number_milliseconds
segundos y vuelve a intentar la solicitud.Si la solicitud falla, espera 4 +
random_number_milliseconds
segundos y vuelve a intentar la solicitud.Y así sucesivamente, hasta un tiempo de
maximum_backoff
.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
), conn
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 derandom_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.