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 Valkey que muestren errores de código de respuesta HTTP 5xx
y 429
.
Comprender el funcionamiento de la retirada exponencial es importante si compilas aplicaciones cliente que usan directamente la API de REST de Memorystore para Valkey.
Si usas la consola deGoogle Cloud , la consola envía solicitudes a Memorystore para Valkey en tu nombre y se encarga de cualquier retirada necesaria.
Algoritmo de ejemplo
Un algoritmo de retirada exponencial vuelve a intentar las solicitudes aumentando exponencialmente 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 Valkey.
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.