Skip to content
Latchkey

O Que É um Sistema Distribuído? Muitas Máquinas, Um Só Sistema

Um sistema distribuído é aquele cujos componentes rodam em múltiplas máquinas em rede e se coordenam para se comportar como um único sistema.

No momento em que seu sistema abrange mais de uma máquina e elas conversam por uma rede, você tem um sistema distribuído, e uma nova classe de problemas. A rede pode ser lenta, perder mensagens ou particionar. Máquinas falham de forma independente. Relógios discordam. A maioria dos padrões de arquitetura no software moderno existe para domar essas realidades.

O que o torna distribuído

Componentes rodam em máquinas separadas e se coordenam por uma rede que não controlam totalmente. Ao contrário de um único processo, não há memória compartilhada nem relógio global, então concordância e ordenação se tornam problemas reais de engenharia.

As verdades difíceis

  • A rede é não confiável: mensagens podem ser perdidas, atrasadas ou duplicadas.
  • Máquinas falham de forma independente e parcial.
  • Não há um relógio global perfeitamente sincronizado.
  • Partições podem dividir o sistema em ilhas que não conseguem conversar.

Padrões que respondem a isso

Retries com backoff, idempotência, timeouts, circuit breakers e consistência eventual, todos existem porque a rede e as máquinas são não confiáveis. Conhecer o modelo de falha é o que te diz qual padrão um dado problema precisa.

Por que testar fica mais difícil

Comportamento distribuído, partições, nós lentos, falhas parciais, raramente aparece em testes unitários. O CI precisa de testes de integração que sobem múltiplos componentes, e idealmente testes de injeção de falhas que simulam mensagens perdidas ou nós fora do ar para pegar os bugs que só aparecem sob falha.

Fazendo deploy sem downtime

Você não pode parar o mundo para fazer deploy de um sistema distribuído. Deploys rolling e blue-green, contratos retrocompatíveis e health checks permitem atualizar um nó de cada vez enquanto o sistema continua servindo tráfego.

Pipelines mais pesados, por natureza

Testes distribuídos realistas sobem vários serviços a cada execução, o que é um custo de CI significativo. Runners aquecidos com provisionamento rápido (como o Latchkey oferece) evitam que essas suítes multi-componente fiquem passando fome em uma fila.

Principais conclusões

  • Um sistema distribuído abrange múltiplas máquinas em rede agindo como uma só.
  • Suas dificuldades centrais são redes não confiáveis, falhas independentes e nenhum relógio global.
  • Padrões de resiliência e testes multi-componente com injeção de falhas são como você o gerencia.

Guias relacionados