Espera exponencial truncada

A espera exponencial truncada é uma estratégia padrão de resolução de erros para aplicativos de rede em que um cliente repete periodicamente uma solicitação com falha, aumentando o atraso entre as solicitações. Os clientes devem usar espera exponencial truncada para todas as solicitações ao Cloud Storage que retornam códigos de resposta HTTP 5xx e 429, incluindo uploads e downloads de dados ou metadados.

Entender como funciona a espera exponencial truncada é importante nestes casos:

Se estiver usando o console do Google Cloud Platform, ele enviará solicitações para o Cloud Storage em seu nome e cuidará de qualquer retirada necessária.

Exemplo de algoritmo

Um algoritmo de retirada exponencial repete solicitações exponencialmente, aumentando o tempo de espera entre novas tentativas até um tempo máximo de retirada. Veja o exemplo a seguir:

  1. Faça uma solicitação ao Cloud Storage.

  2. Se a solicitação falhar, aguarde 1 + random_number_milliseconds segundos e repita a solicitação.

  3. Se a solicitação falhar, aguarde 2 + random_number_milliseconds segundos e repita a solicitação.

  4. Se a solicitação falhar, aguarde 4 + random_number_milliseconds segundos e repita a solicitação.

  5. E assim por diante, até um tempo maximum_backoff.

  6. Continue aguardando e tentando novamente até um número máximo de novas tentativas, sem aumentar o tempo de espera entre elas.

em que:

  • O tempo de espera é min(((2^n)+random_number_milliseconds), maximum_backoff), com incrementado em 1 para cada iteração (solicitação).

  • random_number_milliseconds é um número aleatório de milissegundos menor ou igual a 1.000. Isso ajuda a evitar casos em que muitos clientes são sincronizados por alguma situação e todos tentam novamente ao mesmo tempo, enviando solicitações em ondas sincronizadas. O valor de random_number_milliseconds é recalculado após cada nova tentativa de solicitação.

  • maximum_backoff costuma ser 32 ou 64 segundos. O valor adequado depende do caso de uso.

Não há problema em continuar tentando novamente quando o tempo maximum_backoff for atingido. Depois disso, as novas tentativas não precisam continuar aumentando o tempo de retirada. Por exemplo, se um cliente usar um tempo maximum_backoff de 64 segundos, depois de atingir esse valor, o cliente poderá tentar novamente a cada 64 segundos. Em algum momento, os clientes precisam ser impedidos de tentar novamente infinitas vezes.

O caso de uso e as condições da rede determinam quanto tempo os clientes precisam aguardar entre novas tentativas e quantas vezes eles podem tentar novamente. Por exemplo, clientes móveis de um aplicativo podem precisar fazer mais novas tentativas e por intervalos maiores quando comparados a clientes desktop do mesmo aplicativo.

Caso as solicitações de nova tentativa falhem após exceder o maximum_backoff e qualquer tempo extra permitido para novas tentativas, faça um relatório ou registre o erro usando um dos métodos listados em Suporte e ajuda.

Exemplos de implementações

Veja abaixo os exemplos de espera exponencial truncada com o Cloud Storage:

Veja a seguir alguns exemplos de implementação de retirada em bibliotecas de cliente que você pode usar com o Cloud Storage:

  • Nova tentativa com biblioteca para Python.

  • As bibliotecas de cliente do Google Cloud para Node.js podem usar estratégias de espera automaticamente para repetir solicitações com o parâmetro autoRetry.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.