Carregando
0x10Lição 2 de 9

Use timeouts e novas tentativas com segurança

Escolha políticas de nova tentativa que se recuperem de falhas passageiras sem multiplicar o trabalho.

14 min Questionário com 5 perguntas
Ao final desta lição, você saberá
  • Explicar prazos, limites de tentativas, backoff, jitter e chaves de idempotência.

Defina um prazo para cada requisição, para quem chama não esperar para sempre. Tente de novo só falhas que podem ser passageiras, limite as tentativas e use backoff exponencial com jitter, para que muitos clientes não tentem de novo todos juntos. Uma nova tentativa pode repetir uma operação cujo primeiro resultado só estava atrasado. Operações idempotentes têm o mesmo efeito quando repetidas; uma chave de idempotência permite que o servidor reconheça envios duplicados.

Clientes reais sorteiam os intervalos de espera e respeitam um prazo total. Uma política de nova tentativa também deve evitar repetir erros permanentes, como entrada inválida.

Prática: sobreviva a uma queda com novas tentativas

Experimente

Até 15 XP

O que suas novas tentativas fazem com um servidor que está se recuperando?

O servidor cai por dez ticks e derruba todas as conexões abertas. As marcas vermelha e verde mostram quando ele falha e quando volta. Compare as políticas:

  1. Tentar de novo na hora. Quanto a carga passa da capacidade, e quantas requisições desistem? Elas gastaram todas as tentativas enquanto o servidor ainda estava fora do ar.
  2. Backoff exponencial. Ninguém desiste, porque as novas tentativas duram mais que a queda. Mas repare nos picos: clientes que falharam juntos tentam de novo juntos.
  3. Ligue o jitter. O que acontece com o maior pico?
  4. Sem novas tentativas tem o gráfico mais tranquilo. Qual foi o custo?
Política de retentativa
  • Requisições
  • Capacidade do servidor
050100150200061218243036424854Tempo (ticks)Requisições
Mostrar os números em uma tabela
Tempo (ticks)RequisiçõesCapacidade do servidor
01015
11015
21015
31015
41015
51015
61015
71015
81015
91015
107015
118015
129015
1310015
1411015
1512015
166015
176015
186015
196015
206015
215515
225015
234515
244015
253515
263015
272515
282015
291515
301015
311015
321015
331015
341015
351015
361015
371015
381015
391015
401015
411015
421015
431015
441015
451015
461015
471015
481015
491015
501015
511015
521015
531015
541015
551015
561015
571015
581015
591015
Momento de maior carga
120 (capacidade 15)
Tentativas com falha
1035
Requisições abandonadas
110
Sobrecarga depois de voltar
9 ticks

Prática: dá para repetir isto com segurança?

Experimente

Até 15 XP

Idempotente ou não?

Imagine que a operação roda duas vezes porque chegou uma nova tentativa. O resultado seria diferente?

0 de 6 classificadosPontuação 0/0
  • “Mudar o e-mail do cliente para ana@example.com.”

  • “Somar US$ 10 ao saldo da conta.”

  • “Ler o status de um pedido.”

  • “Enviar um e-mail de boas-vindas.”

  • “Apagar o pedido 123.”

  • “Criar um pedido novo.”

Experimente

Até 15 XP

O cliente deve tentar de novo?

Tente de novo só quando uma segunda tentativa puder ter outro resultado.

0 de 5 classificadosPontuação 0/0
  • “503 Service Unavailable”

  • “400 Bad Request”

  • “Conexão resetada”

  • “403 Forbidden”

  • “429 Too Many Requests”

Principais conclusões

  • Use um prazo total e um número limitado de tentativas.

  • Backoff com jitter reduz a carga de novas tentativas sincronizadas.

  • Chaves de idempotência ajudam a repetir com segurança requisições que têm efeitos colaterais.

Quiz da aula

5 perguntas · aprovação com 4 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…