trilha

System Design/01 - Fundamentos2 min

What is System Design

Perguntas-guia
  • Que problema isso resolve?
  • Quando usar / quando NÃO usar?
  • Qual o principal trade-off?
  • Como isso falha em produção?

Conceito

System design é decidir como as partes de um sistema se encaixam para atender requisitos de escala, disponibilidade e custo — antes de escrever código.

A diferença para "programar bem" é o nível: você não está escolhendo estrutura de dados dentro de uma função, está escolhendo onde o estado mora, quem fala com quem e o que acontece quando um pedaço morre.

Um design é descrito por:

Dimensão Pergunta
Requisitos funcionais O que o sistema faz?
Requisitos não-funcionais Quantos usuários, que latência, que disponibilidade?
Restrições Orçamento, time, prazo, regulação
Componentes Serviços, bancos, filas, caches
Fluxo de dados Como a informação atravessa o sistema
Modos de falha O que quebra e como o sistema reage

O que torna o assunto difícil não é conhecer os componentes — é que toda escolha tem custo em outro lugar. Não existe design "certo", existe design adequado a um conjunto de restrições explícitas.

Trade-offs

O trade-off central de system design é complexidade contra capacidade. Cada componente adicionado (cache, fila, réplica) resolve um problema e cria outros: mais um ponto de falha, mais um estado para sincronizar, mais uma coisa para operar às 3 da manhã.

Isso leva à regra que quase todo engenheiro sênior repete: comece simples. Um monolito com um banco resolve mais casos do que a literatura sugere. A complexidade deve ser puxada por um requisito medido, não empurrada por antecipação.

O segundo trade-off é generalidade contra otimização. Um sistema que serve bem a qualquer padrão de acesso serve mediocremente a todos; conhecer o padrão real permite decisões muito melhores — e amarra você a ele.

Exemplo prático

O mesmo requisito — "encurtador de URL" — produz designs radicalmente diferentes conforme a escala:

Escala Design adequado
100 links/dia Um servidor, SQLite, sem cache
10 mil/dia App + Postgres + índice na chave curta
10 milhões/dia Cache na frente, banco chave-valor, geração de ID sem coordenação
1 bilhão/dia Multi-região, CDN, particionamento, consistência eventual

Ir direto para o quarto quando o requisito é o primeiro é o erro mais caro da área. E o inverso — descobrir o requisito do quarto rodando o primeiro — é o mais visível.

Relacionado


Parte de Introduction · roadmap.sh/system-design

Buscar

Busca por título, seção e texto das notas