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 Valkey que devuelvan errores de código de respuesta HTTP 5xx
y 429
.
Es importante saber cómo funciona la retirada exponencial si vas a crear aplicaciones cliente que usen directamente la API REST de Memorystore para Valkey.
Si usas la Google Cloud consola, esta envía solicitudes a Memorystore for Valkey en tu nombre y gestiona cualquier retroceso necesario.
Algoritmo de ejemplo
Un algoritmo de tiempo de espera exponencial vuelve a intentar enviar las solicitudes aumentando exponencialmente el tiempo de espera entre reintentos hasta alcanzar un tiempo de espera máximo. Por ejemplo:
Realiza una solicitud a Memorystore for Valkey.
Si la solicitud falla, espera 1 +
random_number_milliseconds
segundos y vuelve a intentarlo.Si la solicitud falla, espera 2 +
random_number_milliseconds
segundos y vuelve a intentarla.Si la solicitud falla, espera 4 +
random_number_milliseconds
segundos y vuelve a intentarlo.Y así sucesivamente, hasta
maximum_backoff
veces.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
), conn
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 derandom_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 la sección Obtener asistencia.