A espera exponencial (em inglês) é uma estratégia de tratamento de erros padrão para aplicativos de rede em que um cliente repete periodicamente uma solicitação com falha com atrasos crescentes entre as solicitações. Os clientes precisam usar a
espera exponencial para todas as solicitações ao Memorystore para Valkey que retornam
erros de código de resposta HTTP 5xx
e 429
.
É importante entender como a espera exponencial funciona Aplicativos clientes que usam a API REST do Memorystore para Valkey diretamente.
Se você estiver usando o console do Google Cloud, ele envia ao Memorystore para Valkey em seu nome e lida com as solicitações espera.
Exemplo de algoritmo
Um algoritmo de espera exponencial repete solicitações aumentando exponencialmente o tempo de espera entre novas tentativas até um tempo máximo de espera. Veja o exemplo a seguir:
Faça uma solicitação ao Memorystore para Valkey.
Se a solicitação falhar, aguarde 1 +
random_number_milliseconds
segundos e repita a solicitação.Se a solicitação falhar, aguarde 2 +
random_number_milliseconds
segundos e repita a solicitação.Se a solicitação falhar, aguarde 4 +
random_number_milliseconds
segundos e repita a solicitação.E assim por diante, até um tempo
maximum_backoff
.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
), comn
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 derandom_number_milliseconds
precisa ser recalculado após cada nova 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.
A espera máxima e o número máximo de novas tentativas que um cliente usa depende do caso de uso e das condições da rede. 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.
Se as solicitações de repetição falharem depois de exceder o número máximo de tentativas, informe ou registre um erro usando um dos métodos listados em Como receber suporte.