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 de forma periódica una solicitud con errores, cada vez con más frecuencia entre las solicitudes. Los clientes deben usar la retirada exponencial truncada para todas las solicitudes a Cloud Storage que muestran códigos de respuesta 5xx y 429, incluidas la carga y la descarga 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. Continúa así hasta un tiempo de maximum_backoff.

  6. 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 mínimo es (((2^n)+random_number_milliseconds), maximum_backoff), con n incrementado por 1 para cada iteración (solicitud).

  • random_number_milliseconds es un número de milisegundos aleatorio 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 de random_number_milliseconds se vuelve 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.

Está bien realizar más intentos una vez que alcanzaste el tiempo de 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 de 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 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 el tiempo de 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 lo siguiente:

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 intentar solicitudes con el parámetro autoRetry.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.