Skip to content

🏛️ Systems Architecture

Definição: Arquitetura é o conjunto de decisões significativas sobre a organização de um sistema de software, que são difíceis (e caras) de mudar no futuro.

  • O que é: Um único deployable, mas com fronteiras de domínio (módulos) internamente bem definidas.
  • Quando usar: Ideal para o início de projetos ou equipas pequenas. Facilita o refactoring e o deployment.
  • Trade-off: Escala como uma unidade única; se um módulo consome muita CPU, todo o monólito tem de ser replicado.
  • O que é: Sistemas distribuídos onde cada serviço é independente e comunica via rede (HTTP, gRPC, Mensageria).
  • Quando usar: Organizações grandes com múltiplas equipas independentes que precisam de ciclos de deploy distintos.
  • Trade-off: Introduz a “taxa do sistema distribuído” (latência de rede, consistência eventual, complexidade de observabilidade).

Em vez de chamadas diretas (A chama B), os sistemas reagem a Eventos.

  • Vantagens: Desacoplamento extremo e alta escalabilidade.
  • Desafios: Rastrear o fluxo de uma transação torna-se difícil sem ferramentas de Distributed Tracing.

O modelo clássico (REST/gRPC).

  • Vantagens: Simplicidade de raciocínio e feedback imediato.
  • Desafios: Pode criar “cascatas de erro” se um serviço na cadeia falhar.

Para sistemas seniores, falhar é uma certeza. O objetivo é a degradação graciosa.

  • Circuit Breaker: Interrompe chamadas a um serviço que está a falhar para permitir que ele recupere (evita o efeito de “estouro de fila”).
  • Retries com Exponential Backoff: Tentar de novo, mas esperando cada vez mais tempo entre tentativas para não massacrar o servidor.
  • Idempotência: Garantir que processar a mesma mensagem duas vezes não causa efeitos secundários (ex: cobrar duas vezes ao cliente).

⚖️ Decisões de Design (O olhar do Sénior)

Section titled “⚖️ Decisões de Design (O olhar do Sénior)”

Num sistema distribuído, só podes escolher dois entre três: Consistência, Disponibilidade e Tolerância a Partição. Como a rede vai falhar (P), tens de decidir entre C ou A.

  • Coesão Alta: Coisas que mudam juntas devem estar juntas.
  • Acoplamento Baixo: Mudar o Serviço A não deve obrigar a mudar o Serviço B.

💡 Nota de Senioridade: O “Santo Graal” não é o sistema mais complexo, mas sim o sistema mais simples que resolve o problema do negócio enquanto mantém a porta aberta para a escalabilidade futura. Não construas para 1 milhão de utilizadores se hoje tens 10.


  • [[Mensageria-Kafka-RabbitMQ]]
  • [[Observabilidade-Logs-Metrics]]
  • [[Modelacao-DDD]]