Pular para o conteúdo

Roadmap de System Design

Este é um guia de tópicos para estudar e para conduzir um design de sistema do começo ao fim, organizado em dez áreas na ordem em que elas costumam aparecer: primeiro entender o que o sistema faz e quem o usa, depois modelar os dados, expor APIs, dimensionar servidores, aproximar do usuário, proteger contra falhas, acelerar com cache e desacoplar com mensageria.

Cada tópico aponta para a nota deste lab que o explica. Quando o tópico ainda não tem nota própria, aparece como “Em breve”. Para a ordem de raciocínio de um design completo, veja Como Estruturar um System Design.

O que o sistema precisa fazer, e sob quais condições. É a área que define o peso de todas as outras.

TópicoOnde estudar
Requisitos funcionaisSystem Design: Fundamentos
Requisitos não funcionaisSystem Design: Fundamentos
Trade-offs (consistency vs availability)Trade-offs Arquiteturais e Teorema de CAP
Constraints (ex: baixa latência)Latência, Throughput e Performance
Read-heavy vs write-heavyStateless, Particionamento e Sharding

Quem usa o sistema, quando e com que frequência. Esses números viram a carga que o sistema precisa aguentar.

TópicoOnde estudar
Tipos de usuário, roles e demografiaEm breve
Picos (horário do dia, dias do ano)Capacity Planning e Capacity Math
Frequência de uso e duração médiaCapacity Planning e Capacity Math
Web vs mobileAPI Gateway (BFF por tipo de cliente)

Como os dados são organizados, armazenados e escalados.

TópicoOnde estudar
Relacional: ACID e indexaçãoACID e Índices e Planos de Execução
Relacional: normalizaçãoNormalização de Banco de Dados
NoSQL (document, column-oriented, key-value, graph)NoSQL
Armazenamento distribuído (S3, blob storage)Categorias de Serviço em Nuvem (object storage). HDFS ainda não tem nota própria
Escala horizontal vs shardingEscalabilidade e Stateless, Particionamento e Sharding
Write master + read replicasReplicação e Escalabilidade do Banco de Dados
Spark (consulta distribuída)Em breve

Para escolher entre as opções acima num caso real, veja também Escolha de Banco de Dados na Prática.

Como o sistema conversa com o mundo e como se protege.

TópicoOnde estudar
SOAPClassificação de APIs por Público
RESTHTTP, APIs e REST
gRPC e GraphQLEstilos de Comunicação de API
Rate limitingRate Limiting
Ataques: DoS e MITMSegurança e Evolução de APIs (Ameaças comuns)
Ataques: DDoS e XSSEm breve
Autenticação vs autorização, JWTSegurança e Evolução de APIs e SSO, OAuth 2.0, OIDC e SAML
TLS/HTTPS e certificadosSegurança e Evolução de APIs (HTTPS e mTLS)
CRUD e métodos HTTPHTTP, APIs e REST
PaginaçãoPaginação

Quanto cada máquina aguenta e quando é hora de escalar.

TópicoOnde estudar
CPU, RAM e storageCapacity Planning e Capacity Math
Escala verticalEscalabilidade
Requests por segundo e QPSCapacity Planning e Capacity Math
Largura de banda de redeCapacity Planning e Capacity Math
Paralelização e threadsEm breve

Onde o sistema roda em relação a quem o usa, e o que a distância custa.

TópicoOnde estudar
RegiõesDisponibilidade (multi-região e disaster recovery)
CDNCDN
Distância e RTTCDN e Latência, Throughput e Performance
Latência de redeLatência, Throughput e Performance

O que fica entre o cliente e os servidores.

TópicoOnde estudar
Reverse proxy (API Gateway, application gateway)Reverse Proxy, API Gateway
Forward proxyEm breve
Load balancers e estratégiasLoad Balancer
Layer 4 vs layer 7Load Balancer

Como o sistema continua de pé quando algo falha. A arquitetura de microsserviços em si está na seção Microsserviços.

TópicoOnde estudar
RedundânciaDisponibilidade
Tolerância a falhas e circuit breakersTimeout, Retry, Circuit Breaker e Bulkhead
Eleição de líderEleição de Líder
Orquestração de containersKubernetes
Observabilidade (logs, métricas, tracing distribuído, alertas)Observabilidade: Logs, Metrics e Traces e Ferramentas de Observabilidade

Como evitar trabalho repetido e proteger o banco.

TópicoOnde estudar
Write-through e write-behindCache e Redis (Estratégias de cache)
Algoritmos de hashConsistent Hashing e Gossip
Políticas de eviction (LRU e outras)Cache e Redis (Políticas de eviction)
Cache hit e missCache e Redis

Como partes do sistema se comunicam sem esperar umas pelas outras.

TópicoOnde estudar
TCP vs UDPEm breve
Síncrono vs assíncronoComunicação entre Serviços e Filas e Mensageria
Filas (FIFO, ordenação)Filas e Mensageria e Garantias de Entrega
Pull vs pushKafka (consumer com poll) e RabbitMQ (entrega push-based)
WebSocketsEstilos de Comunicação de API
Publish-subscribeArquitetura Orientada a Eventos

Decorar dezenas de conceitos não ajuda quando aparece um problema novo. O caminho é outro: entender o problema, reconhecer qual das áreas abaixo ele toca, escolher o conceito certo e raciocinar sobre os trade-offs da escolha. A tabela reúne as mesmas áreas por tipo de dor, para você saber em qual nota começar.

Se o problema é…Comece porNotas do lab
Muita carga ou risco de quedaEscalabilidade e confiabilidadeLoad Balancer, Cache e Redis, Replicação de Banco de Dados, Stateless e Particionamento, Rate Limiting, Timeout, Retry, Circuit Breaker e Bulkhead
Como as partes conversamRede e comunicaçãoHTTP, APIs e REST, Estilos de Comunicação de API, Filas e Mensageria, Arquitetura Orientada a Eventos
Onde e como guardar os dadosDados e sistemas distribuídosSQL, NoSQL, Índices e Planos de Execução, ACID, Teorema de CAP
Quem pode acessar e como enxergar o que aconteceSegurança e observabilidadeSegurança e Evolução de APIs, SSO, OAuth 2.0, OIDC e SAML, Logs, Metrics e Traces
Como organizar o código e os serviçosArquitetura e design de APIFundamentos de Microsserviços, API Gateway, Service Discovery
Como colocar no ar e recuperarInfraestrutura e deploymentCI/CD para Microsserviços, Infraestrutura como Código, Docker, Kubernetes, Categorias de Serviço em Nuvem, Disponibilidade e Disaster Recovery

Ordem de grandeza. Guarde a escala do sistema em potências de 10 (10⁶ usuários, 10⁹ requisições por dia): é esse número que indica se uma arquitetura simples basta ou se precisa de cache, sharding e filas. O passo a passo dessas contas está em Capacity Planning e Capacity Math.

Componentes interligados. As dez áreas não são independentes: a decisão em uma muda a pressão sobre as outras. Um pico de usuários vira QPS nos servidores, que vira leitura no cache e no banco, e o que o cache não segura vira fila na mensageria. O diagrama mostra como elas se conectam, e a arquitetura completa está em Arquitetura de uma Aplicação Distribuída.

flowchart TB
    F[Features: requisitos, trade-offs, restrições] -.define a escala.-> U
    U[Usuários: perfis, picos, plataforma] --> G[Geografia e latência: regiões, CDN]
    G --> P[Proxies: gateway e load balancer]
    P --> A[APIs e segurança]
    A --> S[Servidores: CPU, RAM, QPS]
    S --> C[Cache]
    C --> D[(Modelo de dados)]
    S --> M[Mensageria]
    M --> D
    V[Disponibilidade e observabilidade] -.cobre todos os componentes.-> S