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:
Crear aplicaciones cliente que usen directamente la API REST de Memorystore para Redis.
Acceder a Memorystore para Redis a través de una biblioteca de cliente. Ten en cuenta que algunas bibliotecas de cliente, como la biblioteca de cliente de Memorystore para Redis para Node.js, tienen retroceso exponencial integrado.
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:
Haz una solicitud a Memorystore para Redis.
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 Obtener asistencia.