Artigos sobre system-design
34 artigos de Felipe Guedes sobre system-design: System Design, arquitetura, engenharia full stack, auditoria e IA em produção.
- Projete a falha antes da funcionalidadeO caminho feliz qualquer um escreve. O sistema de verdade é o que acontece quando ele quebra, e é isso que se projeta primeiro.
- O custo real de um retryRetries adicionam carga bem na hora em que o sistema está mais fraco. Backoff, jitter, orçamento e breakers evitam a amplificação.
- O quadro branco é onde o sistema é construído de verdadeAs decisões que doem depois são tomadas na primeira hora, antes de qualquer código. O que eu desenho e por quê.
- O que um histograma de latência está tentando te dizerA média esconde. Leia a forma, depois p50, p95 e p99, e entenda por que fan-out transforma o p99 dos outros no seu p50.
- Idempotência é uma decisão de negócioChamar duas vezes e ter o mesmo resultado parece técnico. Definir o que é "o mesmo" é onde o negócio assina.
- Por que a maioria dos microsserviços deveria ter sido móduloA fronteira de rede é um imposto permanente. Quatro razões para um serviço merecê-la, e os sinais de que o seu deveria ser módulo.
- Programar em par com IA mudou o que eu coloco no quadro brancoQuando o código fica barato, o quadro branco deixa de ser sobre código. Passa a ser sobre falha, posse e invariantes.
- Rate limiting sem prejudicar os usuários que você querToken bucket, identidade em vez de IP, limites por plano, modo sombra: como barrar abuso sem devolver 429 para quem paga.
- Projetando APIs que podem ser usadas errado sem estragoClientes fazem retry, duplicam, mandam dado velho e chamam fora de ordem. Projete para que o uso errado comum seja inofensivo.
- Multi-tenancy: a decisão que você não consegue desfazerSchema compartilhado, schema por tenant ou banco por tenant: cada um tem suas dores, e trocar depois significa migrar tudo.
- O que um médico me ensinou sobre sistemasConheci meu pai uma vez, no consultório dele. O jeito dele de diagnosticar é como audito sistemas hoje.
- Como eu leio um sistema que nunca vi em uma horaO método de auditoria que uso para entender um sistema desconhecido rápido: entradas, dados, dinheiro e o que acontece quando cai.
- Quando não usar um modelo de linguagemUm modelo de linguagem é um componente com custo, latência e taxa de erro. Em metade dos lugares onde vejo um, uma regex teria ganhado.
- Projetando para a dependência lenta, não para a mortaDependência morta falha rápido. A lenta lota seus pools e te derruba. Bulkheads, deadlines, fallbacks e p99.
- Quando adicionar um message broker, e quando você está fugindo de uma decisãoO que um broker compra, o que custa, e o sinal de que a fila está ali para evitar decidir quem é dono do dado.
- Reversibilidade como objetivo de arquiteturaA melhor decisão de arquitetura é a que dá para desfazer em um sprint. Otimize para isso antes de otimizar para qualquer outra coisa.
- Back-pressure é feature, não bugUm sistema que diz "agora não" é mais saudável do que um que aceita tudo e cai. Construa o caminho da recusa.
- Máquinas de estado para tudo que importaSopa de flags esconde contradições. Estados explícitos, tabela de transições e log de transições deixam bugs e relatórios óbvios.
- O deploy faz parte do designSe você não consegue descrever como uma mudança chega em produção com segurança, o design não terminou.
- Consistência eventual, explicada para o time de produtoPor que o pedido aparece três segundos depois, quais fluxos nunca podem atrasar e como fazer uma UI que diz a verdade.
- Cache é uma decisão de consistência disfarçadaCache é uma cópia, e toda cópia te obriga a decidir o quão desatualizado o usuário pode ver o mundo.
- WebSockets, SSE ou polling: uma tabela de decisãoTrês jeitos de levar dado ao vivo ao navegador. O certo depende de direção, escala e hospedagem, não do que soa moderno.
- O padrão outbox em palavras simplesCommite o evento junto com os dados, deixe um relay publicar, faça consumidores idempotentes. A escrita dupla, resolvida sem jargão.
- A pesquisa é um sistema com problema de throughputCientistas não são lentos. O pipeline em volta deles é. Como um engenheiro de sistemas enxerga um laboratório.
- Quanto custa de verdade um serviço novoO código é a parte barata. Esta é a fatura que vem junto com cada caixinha que você adiciona ao diagrama.
- Um checklist de degradação graciosa para times de produtoDecida de propósito o que o usuário vê quando recomendações, busca, pagamento ou banco falham. Um checklist para times de produto.
- O problema da partição quente e por que sharding não te salvaSharding espalha chaves, não carga. Quando uma chave é quente por conta própria, você precisa de outra caixa de ferramentas.
- A fila que você não sabia que tinhaSeu diagrama mostra uma fila. Seu sistema tem vinte. A lei de Little explica por que todas enchem ao mesmo tempo.
- RAG é um pipeline de dados com um modelo de linguagem no finalA maioria das falhas de RAG que audito são bugs de ingestão e retrieval fantasiados de IA. Conserte o pipeline, depois pense no prompt.
- Exactly-once é uma promessa que ninguém cumpreEntregar e processar são promessas diferentes. At-least-once mais consumidor idempotente é a garantia que você realmente tem.
- Planejamento de capacidade em um guardanapoA conta de padaria que diz se você está construindo para 10 rps ou 10.000, e em qual número você está errado.
- Modelos pequenos, alavanca grandeO frontier model é o default errado. Quase todo trabalho num pipeline real é estreito, repetitivo e barato de acertar com modelo pequeno.
- Evolução de schema sem downtimeExpand and contract, backfill em lotes, migrations conscientes de lock e cutover por flag: como mudar o schema com tudo rodando.
- Timeout é a resiliência mais barata que você vai comprarSem timeout significa infinito. Como eu defino connect, read e orçamento total para uma dependência lenta não derrubar tudo.