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:
Criar aplicações cliente que usam a API REST do Memorystore for Redis diretamente.
Aceder ao Memorystore for Redis através de uma biblioteca de cliente. Tenha em atenção que algumas bibliotecas de cliente, como a biblioteca de cliente do Memorystore para Redis para Node.js, têm um recuo exponencial incorporado.
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 é:
Faça um pedido ao Memorystore for Redis.
Se o pedido falhar, aguarde 1 +
random_number_milliseconds
segundos e repita o pedido.Se o pedido falhar, aguarde 2 +
random_number_milliseconds
segundos e repita o pedido.Se o pedido falhar, aguarde 4 +
random_number_milliseconds
segundos e repita o pedido.E assim sucessivamente, até um máximo de
maximum_backoff
vezes.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
), comn
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 derandom_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.