Use timeouts e novas tentativas com segurança
Escolha políticas de nova tentativa que se recuperem de falhas passageiras sem multiplicar o trabalho.
- 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 XPO 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:
- 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.
- 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.
- Ligue o jitter. O que acontece com o maior pico?
- Sem novas tentativas tem o gráfico mais tranquilo. Qual foi o custo?
- Requisições
- Capacidade do servidor
Mostrar os números em uma tabela
| Tempo (ticks) | Requisições | Capacidade do servidor |
|---|---|---|
| 0 | 10 | 15 |
| 1 | 10 | 15 |
| 2 | 10 | 15 |
| 3 | 10 | 15 |
| 4 | 10 | 15 |
| 5 | 10 | 15 |
| 6 | 10 | 15 |
| 7 | 10 | 15 |
| 8 | 10 | 15 |
| 9 | 10 | 15 |
| 10 | 70 | 15 |
| 11 | 80 | 15 |
| 12 | 90 | 15 |
| 13 | 100 | 15 |
| 14 | 110 | 15 |
| 15 | 120 | 15 |
| 16 | 60 | 15 |
| 17 | 60 | 15 |
| 18 | 60 | 15 |
| 19 | 60 | 15 |
| 20 | 60 | 15 |
| 21 | 55 | 15 |
| 22 | 50 | 15 |
| 23 | 45 | 15 |
| 24 | 40 | 15 |
| 25 | 35 | 15 |
| 26 | 30 | 15 |
| 27 | 25 | 15 |
| 28 | 20 | 15 |
| 29 | 15 | 15 |
| 30 | 10 | 15 |
| 31 | 10 | 15 |
| 32 | 10 | 15 |
| 33 | 10 | 15 |
| 34 | 10 | 15 |
| 35 | 10 | 15 |
| 36 | 10 | 15 |
| 37 | 10 | 15 |
| 38 | 10 | 15 |
| 39 | 10 | 15 |
| 40 | 10 | 15 |
| 41 | 10 | 15 |
| 42 | 10 | 15 |
| 43 | 10 | 15 |
| 44 | 10 | 15 |
| 45 | 10 | 15 |
| 46 | 10 | 15 |
| 47 | 10 | 15 |
| 48 | 10 | 15 |
| 49 | 10 | 15 |
| 50 | 10 | 15 |
| 51 | 10 | 15 |
| 52 | 10 | 15 |
| 53 | 10 | 15 |
| 54 | 10 | 15 |
| 55 | 10 | 15 |
| 56 | 10 | 15 |
| 57 | 10 | 15 |
| 58 | 10 | 15 |
| 59 | 10 | 15 |
- 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 XPIdempotente ou não?
Imagine que a operação roda duas vezes porque chegou uma nova tentativa. O resultado seria diferente?
“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 XPO cliente deve tentar de novo?
Tente de novo só quando uma segunda tentativa puder ter outro resultado.
“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…