Retirada exponencial truncada

La retirada exponencial truncada 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 truncada para todas las solicitudes a Cloud Storage que muestren códigos de respuesta 5xx y 429, incluidas las cargas y descargas de datos o metadatos.

Comprender el funcionamiento de la retirada exponencial truncada es importante si deseas realizar lo siguiente:

Si usas Google Cloud Platform Console, la consola envía solicitudes a Cloud Storage a tu nombre y controlará 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. Haz una solicitud a Cloud Storage.

  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 una cantidad máxima de reintentos, pero no aumentes el período de espera entre los reintentos.

En el que:

  • El tiempo de espera es min(((2^n) + random_number_milliseconds), maximum_backoff), con 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 los que muchos clientes se sincronizan por alguna situación y todos realizan el reintento a la vez, lo que hace que se envíen solicitudes sincronizadas en etapas. El valor de random_number_milliseconds se vuelve a calcular después de cada reintento de solicitud.

  • 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.

El tiempo que los clientes deben esperar entre los reintentos y la cantidad de reintentos que deben realizar depende de tu caso práctico y las condiciones de la red. Por ejemplo, es posible que los clientes de una aplicación que usan dispositivos móviles deban intentar más veces y por intervalos más largos, en comparación con los que usan la misma aplicación en computadoras de escritorio.

Si las solicitudes de reintento fallan después de exceder el maximum_backoff y cualquier tiempo adicional permitido para los reintentos, informa o registra un error mediante uno de los métodos enumerados en Asistencia y ayuda.

Implementaciones de ejemplo

Los ejemplos de retirada exponencial truncada con Cloud Storage incluyen los siguientes:

Los ejemplos de retiradas implementadas en las bibliotecas cliente que puedes usar con Cloud Storage incluyen los siguientes:

  • Biblioteca de reintentos para Python

  • Las bibliotecas cliente de Google Cloud para Node.js pueden usar estrategias de retirada de forma automática a fin de reintentar solicitudes con el parámetro autoRetry.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.