System Design: Referência Completa

Construir um sistema que atende milhões de usuários exige decisões diferentes de um que atende milhares. Design de sistemas é sobre tornar os tradeoffs explícitos: escalabilidade, disponibilidade, consistência, latência e custo.

TL;DR: Uma referência de design de sistemas cobrindo padrões de escalabilidade, load balancing, cache, bancos de dados, filas de mensagens e tradeoffs de sistemas distribuídos.
Stack: System Design, sistemas distribuídos, arquitetura
Nível: Avançado
Tempo de leitura: ~30 min

Conceitos de confiabilidade

Confiabilidade significa que o sistema inicia toda vez, como um carro confiável. Load balancers fazem health checks para rotear tráfego apenas para instâncias saudáveis.

Tolerância a Falhas significa que o sistema continua funcionando mesmo quando partes falham, como um avião voando seguro com um motor parado. O EC2 Auto Scaling substitui instâncias com falha automaticamente.

Redundância adiciona redes de segurança em cada camada. Múltiplas Zonas de Disponibilidade (AZs) da AWS duplicam a infraestrutura crítica para que uma falha em uma AZ não te derrube.

SLO/SLA: Um SLO é uma meta interna mensurável (99,9% de uptime). Um SLA é um compromisso contratual com clientes. CloudWatch Alarms e throttling do API Gateway ajudam a cumprir ambos.

DDoS

Um ataque DDoS é como uma multidão bloqueando a entrada de uma loja, impedindo clientes reais de entrar. Mitigações AWS: AWS Shield para proteção automática, WAF para filtrar tráfego, CloudFront para absorver tráfego no edge, e Auto Scaling para absorver ataques volumétricos.

Throughput

Throughput é o número de requisições que um sistema processa por segundo. Pense como pistas numa rodovia: mais pistas (mais servidores) significa mais tráfego passa. ELB distribui a carga, ElastiCache serve dados em cache sem bater no banco, CloudFront descarrega assets estáticos, e Auto Scaling adiciona pistas quando o tráfego aumenta.

Ponto Único de Falha (SPOF)

Um SPOF é como um único interruptor controlando a energia de todo um prédio: se falhar, tudo apaga. Elimine SPOFs com ELBs redundantes entre AZs, RDS Multi-AZ, Auto Scaling Groups e CloudFront para entrega de conteúdo mesmo quando servidores de origem falham.

Tipos de Proxy

Proxy direto: fica na frente dos clientes (os anonimiza, controla acesso de saída). Proxy reverso: fica na frente dos servidores (balanceia carga, esconde IPs backend, termina SSL). NGINX, HAProxy e CloudFront atuam como proxies reversos nas arquiteturas comuns.

Consistent Hashing

O hashing padrão remapeia tudo quando você adiciona ou remove um servidor. O Consistent Hashing mapeia dados e servidores num anel, então adicionar um servidor só remapeia os dados “ao lado” dele no anel. Usado pelo Memcached, Redis, DynamoDB e Cassandra para distribuir dados sem grande reordenação. V-nodes (nós virtuais) suavizam a distribuição desigual.

ACID

Pense num cofre bancário. Atomicidade: ou todas as chaves abrem o cofre, ou nenhuma. Consistência: o cofre nunca fica acidentalmente aberto. Isolamento: cada pessoa usa uma chave de forma independente, sem interferir com outros. Durabilidade: o dinheiro depositado fica lá mesmo se faltar energia.

LRU vs LFU

LRU (Least Recently Used): remove o item acessado há mais tempo. Bom quando itens usados recentemente tendem a ser usados de novo. Como limpar jornais velhos de uma mesa de café: o mais antigo sem ser tocado sai primeiro.

LFU (Least Frequently Used): remove o item acessado menos vezes ao longo do tempo. Melhor quando alguns itens são consistentemente populares. Como um museu mantendo exposições baseado em quantas vezes visitantes as veem.

Hashing SHA

SHA é uma família de funções de hash criptográficas: unidirecionais, determinísticas e resistentes a colisões. SHA-256 produz uma string hex de 64 caracteres. Usada para integridade de dados, armazenamento de senhas (com salt) e blockchain. Para obter um hash de 8 caracteres, só truncar: hashlib.sha256(b"hello").hexdigest()[:8]

WebSockets vs HTTP

O HTTP é request-response: o cliente pergunta, o servidor responde, a conexão fecha. WebSockets mantêm a conexão aberta para que qualquer lado possa enviar mensagens a qualquer momento, sendo ideais para chat, dashboards ao vivo e jogos multiplayer. Após o handshake inicial (via HTTP), as mensagens subsequentes têm overhead mínimo.

Endereçamento IP

IPv4 usa endereços de 32 bits (~4,3 bilhões). Acabaram. O NAT estendeu a vida do IPv4 permitindo que vários dispositivos compartilhem um IP público. O IPv6 usa endereços de 128 bits (340 undecilhões), eliminando a escassez. A maioria das redes roda dual-stack durante a transição.

TCP vs UDP

TCP: orientado a conexão, confiável, ordenado. Estabelece um handshake, retransmite pacotes perdidos, garante entrega. Use para HTTP, email, transferência de arquivos, qualquer coisa onde integridade de dados importa. UDP: sem conexão, rápido, sem retransmissão. Use para streaming de vídeo, jogos, DNS, qualquer coisa onde baixa latência importa mais que entrega perfeita.

DNS

DNS é a agenda telefônica da internet: transforma google.com em 142.250.190.78. A resolução flui do cache local para o resolver do ISP, depois para os servidores DNS autoritativos. A rede anycast do Google roteia consultas DNS para o servidor mais próximo globalmente, mantendo a resolução rápida e confiável sob carga massiva.

O que você construiu

Um kit mental para system design: padrões de confiabilidade, estratégias de cache, trade-offs de banco de dados, hashing e protocolos de comunicação. Esses são os blocos fundamentais que aparecem em toda discussão técnica sênior e revisão de arquitetura, seja projetando para 10 usuários ou 10 milhões.

Próximos passos

  • Pratique design de sistemas com restrições reais: dado 10M DAU, 1TB de armazenamento por ano, SLA de 99,9% de uptime, como fica a arquitetura? Quantificar requisitos força clareza.
  • Leia estudos de caso de design de sistemas nos blogs de engenharia do Twitter, Netflix, Uber, Airbnb. Os padrões se repetem entre empresas.
  • Pratique articular tradeoffs em voz alta: “Escolhi SQL em vez de NoSQL aqui porque os dados são altamente relacionais e as garantias ACID importam para este caso de uso.”

Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.

Deixe um comentário