15 pontos por baeba 2025-05-13 | 1 comentários | Compartilhar no WhatsApp

Sam Newman destacou Timeouts, Retries e Idempotency como três conceitos centrais que precisam ser compreendidos em sistemas distribuídos.
Ele afirmou que, antes de lidar com algoritmos distribuídos complexos como Paxos e Raft, é mais importante tratar corretamente esses conceitos básicos.


Três premissas básicas dos sistemas distribuídos

  1. As informações não são transmitidas instantaneamente.
  2. O sistema do outro lado pode não responder.
  3. Os recursos são finitos.

Esses três pontos são a causa fundamental de toda a complexidade dos sistemas distribuídos.


Timeouts

Se uma requisição não for concluída dentro de um determinado tempo, ela deve ser interrompida.
Manter recursos ocupados por muito tempo pode causar sobrecarga no sistema e prejudicar a experiência do usuário.

Newman explicou que “timeouts priorizam a saúde do sistema como um todo acima do sucesso de uma única requisição”.

Pontos importantes

  • Entender o tempo médio de execução e as expectativas do usuário
  • Os valores de configuração devem poder ser alterados com flexibilidade, sem modificar o código

Retries

Retries excessivos podem se tornar um ataque DoS autoinfligido ao sistema.
Retries são necessários, mas é preciso considerar em conjunto limites no lado do cliente e do servidor, além de jitter de rede.

Newman alertou que adicionar jitter é positivo, mas exponential backoff pode acabar sobrecarregando o sistema.


Idempotency

Mesmo que a requisição seja enviada várias vezes, o resultado deve ser o mesmo.
Isso é principalmente responsabilidade do servidor e é uma condição prévia para que retries sejam seguros.

Cenários reais

  • Quando a requisição não consegue chegar ao servidor: nada acontece
  • Quando o servidor processa a requisição, mas a resposta é interrompida: a alteração foi feita, mas o cliente não sabe disso → idempotency é necessária

Formas de implementação

  1. Uso de ID da requisição: atribuir um identificador para que o cliente possa informar que se trata de uma requisição repetida
  2. Método de fingerprint: verificar duplicidade com base no hash do corpo da requisição etc. (evitar informações de tempo)

Conclusão

O texto começa citando a frase “repetir o mesmo comportamento esperando um resultado diferente é loucura”,
mas Newman afirmou que, em sistemas distribuídos, retries podem, na verdade, ser algo racional.
No entanto, ele enfatizou que retries precisam necessariamente ser feitos com segurança e, para isso, timeouts e idempotency devem ser projetados em conjunto.

1 comentários

 
unknowncyder 2025-05-13

Circuit breaker~