Builder de Arquitetura

Construa uma arquitetura de software passo a passo escolhendo componentes, camadas e conexões de acordo com os requisitos do sistema.

Objetivo

Neste laboratório você vai projetar uma arquitetura de software do zero. Você partirá de um conjunto de requisitos de negócio e técnicos, e deverá escolher os componentes, camadas e conexões que melhor resolvam o problema proposto.

O objetivo não é chegar à “resposta certa” — mas sim praticar o processo de tomada de decisões arquiteturais com critério.

Cenário: Plataforma de e-commerce

Imagine que pedem a você para projetar a arquitetura de uma plataforma de comércio eletrônico com os seguintes requisitos:

  • Usuários concorrentes: até 10.000 simultâneos
  • Catálogo: 50.000 produtos com busca e filtros
  • Pagamentos: integração com pelo menos 2 provedores externos
  • Notificações: e-mail e push em tempo real
  • Disponibilidade: 99,9% de uptime

Passo 1 — Escolher o estilo arquitetural

Antes de pensar em tecnologias, defina o estilo geral:

EstiloVantagensDesvantagensQuando escolher?
Monólito modularSimples de implantar, fácil de depurarEscalabilidade limitada, acoplamento internoTimes pequenos, MVP
MicrosserviçosEscalabilidade independente, deploy autônomoComplexidade operacional, latência de redeTimes grandes, domínios claros
HíbridoEquilíbrio entre simplicidade e escalabilidadeExige disciplina nos limitesCrescimento gradual

Exercício

Diante do cenário, qual estilo você escolheria? Considere:

  1. O tamanho do time disponível
  2. A necessidade de escalar componentes de forma independente (catálogo vs pagamentos)
  3. A complexidade operacional que você pode assumir

Passo 2 — Definir as camadas do sistema

Uma vez escolhido o estilo, defina as camadas principais:

Camada de apresentação

  • SPA, SSR ou site estático?
  • Você precisa de um BFF (Backend for Frontend)?
  • Como você trata a autenticação no frontend?

Camada de aplicação

  • Quantos serviços você precisa?
  • Como eles se comunicam entre si (sync vs async)?
  • Onde vive a lógica de negócio crítica?

Camada de dados

  • Um banco de dados ou vários?
  • SQL, NoSQL ou ambos?
  • Você precisa de cache? Onde?

Camada de infraestrutura

  • Cloud, on-premise ou híbrido?
  • Contêineres, serverless ou VMs?
  • Como você trata os segredos e a configuração?

Passo 3 — Conectar os componentes

Defina como as peças se comunicam:

[Frontend SPA]


[API Gateway / BFF]

    ├──► [Servicio de Catálogo] ──► [PostgreSQL + Redis Cache]

    ├──► [Servicio de Órdenes] ──► [PostgreSQL]
    │         │
    │         ▼
    │    [Event Bus]
    │         │
    │         ├──► [Servicio de Pagos] ──► [Proveedor Externo]
    │         └──► [Servicio de Notificaciones] ──► [Email/Push]

    └──► [Servicio de Auth] ──► [Redis Sessions]

Perguntas-chave

  • O que acontece se o serviço de pagamentos não responder?
  • Como você garante que um pedido não seja processado duas vezes?
  • Onde você implementa os circuit breakers?
  • Como você trata a consistência eventual entre serviços?

Passo 4 — Avaliar trade-offs

Toda decisão arquitetural tem trade-offs. Documente os seus:

DecisãoTrade-off aceitoMitigação
Microsserviços para catálogo e pagamentosMaior complexidade operacionalKubernetes + CI/CD automatizado
Event bus para comunicação asyncConsistência eventualIdempotência + retry com backoff
Redis como cache de catálogoDados potencialmente staleTTL de 5 minutos + invalidação por eventos
PostgreSQL para dados transacionaisEscalabilidade vertical limitadaRead replicas + particionamento

Passo 5 — Validar contra os requisitos

Verifique se sua arquitetura atende a cada requisito original:

  • Suporta 10.000 usuários concorrentes? Onde está o gargalo?
  • A busca no catálogo é rápida? Você usa índices ou um mecanismo de busca?
  • Os pagamentos são resilientes a falhas do provedor?
  • As notificações chegam em tempo real?
  • Você consegue alcançar 99,9% de uptime com essa arquitetura?

Reflexão

Ao terminar, pergunte a si mesmo:

  1. Qual foi a decisão mais difícil? Por quê?
  2. O que você mudaria se o time fosse de 3 pessoas em vez de 15?
  3. O que você mudaria se os requisitos de disponibilidade fossem 99,99%?
  4. Existe algum componente que você poderia eliminar sem perder funcionalidade crítica?

A arquitetura perfeita não existe — mas uma arquitetura bem fundamentada e documentada é inestimável.