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 estratégia de recuo exponencial para todos os pedidos ao Memorystore for Valkey que devolvam erros de código de resposta HTTP 5xx
e 429
.
Compreender como funciona o recuo exponencial é importante se estiver a criar aplicações cliente que usam a API REST do Memorystore for Valkey diretamente.
Se estiver a usar a Google Cloud consola, a consola envia pedidos ao Memorystore for Valkey em seu nome e processa qualquer recuo necessário.
Exemplo de algoritmo
Um algoritmo de retirada exponencial repete os pedidos aumentando exponencialmente o tempo de espera entre repetições até um tempo de retirada máximo. Um exemplo:
Faça um pedido ao Memorystore for Valkey.
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 após exceder o número máximo de novas tentativas, comunique ou registe um erro através de um dos métodos indicados em Obter apoio técnico.