
10 Trade-offs Essenciais de Design de Sistemas que Não Pode Dar-se ao Luxo de Ignorar
Os melhores arquitetos não se prendem rigidamente a um dos lados destes compromissos. Compreendem que uma aplicação complexa utilizará uma abordagem híbrida: consistência forte para o inventário, consistência eventual para os comentários, SQL para as contas principais e NoSQL para o feed de atividade.
Ao internalizar estas 10 tensões fundamentais, passa de simplesmente desenvolver software para conceber sistemas verdadeiramente resilientes e de elevado desempenho.
Precisa de ajuda para mapear estes compromissos críticos aos requisitos específicos do seu negócio? Os nossos arquitetos especialistas podem orientar o design da sua plataforma de nova geração. Contacte-nos para agendar uma consulta de design de sistemas.
24
Abr

O design de sistemas não consiste em encontrar uma única resposta "melhor"; consiste em fazer uma série de compromissos informados. Cada decisão arquitetural é um trade-off, obrigando-o a sacrificar um benefício (como velocidade) para ganhar outro (como fiabilidade).
Para líderes técnicos, arquitetos e engenheiros seniores, compreender a tensão nestas decisões é crucial para construir sistemas que escalam, têm bom desempenho e cumprem os requisitos de negócio.

Aqui estão 10 trade-offs fundamentais de design de sistemas que deve dominar:
1. Escalabilidade Vertical vs. Horizontal
Conceito | Descrição | Trade-off |
Escalabilidade Vertical (Scaling Up) | Adicionar mais recursos (CPU, RAM) a um servidor existente. | Prós: Arquitetura mais simples, menor latência para pedidos individuais. Contras: Ponto único de falha, limite finito de escalabilidade. |
Escalabilidade Horizontal (Scaling Out) | Adicionar mais servidores (nós) ao conjunto de recursos. | Prós: Escala quase infinita, alta disponibilidade (tolerância a falhas). Contras: Maior complexidade arquitetural (balanceadores de carga, descoberta de serviços). |
A Escolha: Escolha Vertical para aplicações mais simples e pequenas, com cargas previsíveis. Escolha Horizontal para aplicações à escala web que exigem alta disponibilidade e elasticidade.
2. SQL vs. NoSQL (Relacional vs. Não Relacional)
Conceito | Descrição | Trade-off |
SQL (Relacional) | Dados organizados em tabelas estruturadas com linhas e colunas fixas. | Prós: Forte integridade dos dados (ACID), possibilidade de JOINs complexos. Contras: Esquema rígido, difícil escalar horizontalmente entre regiões. |
NoSQL (Não Relacional) | Ideal para esquema flexível, armazenamentos chave-valor ou modelos de documentos. | Prós: Altamente escalável horizontalmente, flexibilidade de esquema. Contras: Modelos de consistência mais fracos, mais difícil impor relações complexas. |
A Escolha: Use SQL quando a integridade dos dados e relações transacionais complexas forem primordiais (ex.: banca). Use NoSQL quando alto débito, iteração rápida e enormes volumes de dados forem a prioridade (ex.: perfis de utilizador, feeds de conteúdo).
3. Processamento em Lote vs. Processamento em Fluxo
Conceito | Descrição | Trade-off |
Processamento em Lote | Recolher dados e processá-los de uma só vez (ex.: relatórios noturnos, faturação diária). | Prós: Alta eficiência para grandes volumes, menores custos computacionais por unidade. Contras: Latência elevada, os resultados estão sempre atrasados. |
Processamento em Fluxo | Processar dados em tempo real à medida que chegam (ex.: deteção de fraude, cotações da bolsa). | Prós: Insights quase em tempo real, ciclos de feedback imediatos. Contras: Maior complexidade, requer infraestrutura especializada em tempo real. |
4. Normalização vs. Desnormalização (Armazenamento de Dados)
Conceito | Descrição | Trade-off |
Consistência | A garantia de que cada cliente obtém os dados mais recentes e idênticos após uma atualização. | Prós: Elevada precisão dos dados. Contras: Requer bloqueio ou consenso de rede, o que pode reduzir a disponibilidade durante partições. |
Disponibilidade | Garantir que o sistema está sempre ativo e a responder a pedidos, mesmo que algumas partes tenham falhado. | Prós: Alto tempo de atividade e fiabilidade. Contras: Pode devolver dados ligeiramente desatualizados durante uma partição de rede. |
A Escolha: Num sistema distribuído, tem de escolher entre C e A durante uma Partição (P) de rede. Para transações financeiras, escolha Consistência. Para feeds de redes sociais, escolha Disponibilidade.
5. Consistência vs. Disponibilidade (O Teorema CAP)
Conceito | Descrição | Trade-off |
Consistência | A garantia de que cada cliente obtém os dados mais recentes e idênticos após uma atualização. | Prós: Elevada precisão dos dados. Contras: Requer bloqueio ou consenso de rede, o que pode reduzir a disponibilidade durante partições. |
Disponibilidade | Garantir que o sistema está sempre ativo e a responder a pedidos, mesmo que algumas partes tenham falhado. | Prós: Alto tempo de atividade e fiabilidade. Contras: Pode devolver dados ligeiramente desatualizados durante uma partição de rede. |
A Escolha: Num sistema distribuído, tem de escolher entre C e A durante uma Partição (P) de rede. Para transações financeiras, escolha Consistência. Para feeds de redes sociais, escolha Disponibilidade.
6. Consistência Forte vs. Eventual
Conceito | Descrição | Trade-off |
Consistência Forte | As atualizações de dados são imediatamente refletidas em todos os nós antes de a escrita ser confirmada. | Prós: Elevada confiança do cliente na precisão dos dados. Contras: Desempenho de escrita mais lento devido à sincronização obrigatória. |
Consistência Eventual | As atualizações de dados têm atraso antes de ficarem disponíveis em todos os nós. | Prós: Escritas mais rápidas, excelente escalabilidade horizontal. Contras: Os clientes podem ler temporariamente dados desatualizados. |
7. REST vs. GraphQL (Design de API)
Conceito | Descrição | Trade-off |
REST | Obtém dados ao aceder a múltiplos endpoints predefinidos ( | Prós: Simplicidade, cache direto, separação clara de responsabilidades. Contras: Over-fetching (obter mais dados do que os necessários), elevado número de pedidos. |
GraphQL | Permite aos clientes especificar exatamente os campos de dados de que necessitam numa única query. | Prós: Recolha eficiente de dados (sem over-fetching), única viagem de ida e volta. Contras: Maior custo de design, cache complexo, potencial para queries de backend complexas. |
8. Stateful vs. Stateless
Conceito | Descrição | Trade-off |
Com Estado (Stateful) | O sistema recorda interações passadas ou dados de pedidos anteriores (ex.: gestão de sessão num único servidor). | Prós: Lógica de aplicação local mais simples. Contras: Difícil de escalar horizontalmente, alto risco para tolerância a falhas (perda de estado se o servidor falhar). |
Sem Estado (Stateless) | O sistema não acompanha interações passadas; todos os dados necessários são enviados em cada pedido. | Prós: Fácil de escalar horizontalmente e balancear carga, elevada tolerância a falhas. Contras: Maior sobrecarga por pedido (tem de incluir credenciais/informação de sessão sempre). |
9. Cache Read-Through vs. Write-Through
Conceito | Descrição | Trade-off |
Cache Read-Through | Numa falha de cache, a própria cache carrega os dados da base de dados e devolve-os. | Prós: Lógica da aplicação simplificada. Contras: Maior latência no primeiro acesso (falha de cache), pois a cache tem de ir buscar os dados. |
Cache Write-Through | As atualizações de dados são escritas simultaneamente na cache e no armazenamento primário. | Prós: Consistência entre cache e base de dados nas escritas. Contras: Maior latência de escrita (tem de esperar por duas escritas bem-sucedidas). |
10. Processamento Síncrono vs. Assíncrono
Conceito | Descrição | Trade-off |
Processamento Síncrono | As tarefas são executadas uma após outra; o sistema espera que a tarefa termine antes de avançar. | Prós: Simples, determinístico, fácil de depurar. Contras: Elevado tempo de bloqueio, fraca utilização de recursos, resposta lenta para tarefas longas. |
Processamento Assíncrono | As tarefas são executadas em segundo plano (via filas/workers); o sistema devolve imediatamente e continua com novas tarefas. | Prós: Alta concorrência, resposta imediata, excelente utilização de recursos. Contras: Maior complexidade (filas, workers, gestão de falhas), mais difícil acompanhar o estado da tarefa. |

