Retirada exponencial

A retirada exponencial é uma estratégia de processamento de erros padrão para aplicações de rede em que um cliente tenta novamente periodicamente um pedido falhado com intervalos de tempo cada vez maiores entre os pedidos. Os clientes devem usar a retirada exponencial para todos os pedidos ao Memorystore for Redis que devolvam erros de código de resposta HTTP 5xx e 429.

Compreender como funciona a repetição exponencial é importante se:

Se estiver a usar a Google Cloud consola, a consola envia pedidos ao Memorystore for Redis em seu nome e processa qualquer recuo necessário.

Exemplo de algoritmo

Um algoritmo de retirada exponencial repete os pedidos exponencialmente, aumentando o tempo de espera entre as repetições até um tempo de retirada máximo. Um exemplo é:

  1. Faça um pedido ao Memorystore for Redis.

  2. Se o pedido falhar, aguarde 1 + random_number_milliseconds segundos e repita o pedido.

  3. Se o pedido falhar, aguarde 2 + random_number_milliseconds segundos e repita o pedido.

  4. Se o pedido falhar, aguarde 4 + random_number_milliseconds segundos e repita o pedido.

  5. E assim sucessivamente, até um máximo de maximum_backoff vezes.

  6. Continue a aguardar e a tentar novamente até atingir um número máximo de tentativas, mas não aumente o período de espera entre tentativas.

where:

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

  • random_number_milliseconds é um número aleatório de milissegundos inferior ou igual a 1000. Isto ajuda a evitar casos em que muitos clientes são sincronizados por alguma situação e todos tentam novamente ao mesmo tempo, enviando pedidos em ondas sincronizadas. O valor de random_number_milliseconds deve ser recalculado após cada pedido de nova tentativa.

  • Normalmente, maximum_backoff tem 32 ou 64 segundos. O valor adequado depende do exemplo de utilização.

Não há problema em continuar a tentar depois de atingir o tempo maximum_backoff. As novas tentativas após este ponto não precisam de continuar a aumentar o tempo de recuo. Por exemplo, se um cliente usar um maximum_backoff de 64 segundos, após atingir este valor, o cliente pode tentar novamente a cada 64 segundos. Em algum momento, os clientes devem ser impedidos de repetir infinitamente.

O recuo máximo e o número máximo de novas tentativas que um cliente usa dependem do exemplo de utilização e das condições da rede. Por exemplo, os clientes de dispositivos móveis de uma aplicação podem ter de repetir mais vezes e durante intervalos mais longos em comparação com os clientes de computadores da mesma aplicação.

Se os pedidos de novas tentativas falharem depois de exceder o número máximo de novas tentativas, então comunique ou registe um erro através de um dos métodos indicados em Obter apoio técnico.