Conceitos de Design de Sistemas

Sistemas distribuídos e padrões de arquitetura explicados a fundo.

Ordenar

Distributed Systems Fundamentals

1
Intermediate14 min

Idempotência em Sistemas Distribuídos

Por que "pelo menos uma vez" é a única garantia de entrega que um sistema distribuído recebe de graça, e como tornar toda operação segura para repetir — via chaves de idempotência, idempotência natural, ou deduplicação do lado do consumidor — transforma isso em algo que se comporta como exatamente uma vez.

Distributed SystemsFault ToleranceAPI DesignData ConsistencyMessaging
2
Advanced15 min

O Padrão Saga

Como manter consistente uma operação de negócio que abrange vários serviços sem uma transação distribuída, sequenciando transações locais e ações compensatórias em vez disso — e quais anomalias de isolamento você abre mão para chegar lá.

Distributed SystemsMicroservicesData ConsistencyEvent-Driven ArchitectureFault Tolerance
3
Intermediate12 min

Locks em Nível de Aplicação para Seções Críticas de I/O Externo

Como dar exclusão mútua a uma seção crítica que chama uma API externa lenta, usando uma linha de banco de dados como um lock baseado em lease, em vez de uma transação de banco de dados ou um advisory lock do Postgres.

Distributed SystemsConcurrencyData ConsistencyDatabasesReliability
4
Advanced14 min

Relógios Lógicos e Geração de IDs Ordenados

Como sistemas distribuídos ordenam eventos e geram IDs quando relógios de parede não podem ser confiados — timestamps de Lamport, causalidade happens-before, broadcast de ordem total, e a troca prática entre sequências linearizáveis estritamente monotônicas e IDs escaláveis aproximadamente ordenados como o Snowflake.

Distributed SystemsConsistencyID GenerationOrdering
5
Advanced14 min

Linearizabilidade

A garantia de atualidade que faz um objeto replicado se comportar como uma única cópia atualizada — por que é diferente de serializabilidade, onde sistemas dependem dela, como líderes e consenso a implementam e por que CAP e atraso de rede a tornam cara.

Consistency ModelsDistributed SystemsReplicationConsensus
6
Advanced14 min

Falhas Bizantinas e Modelos de Sistema

Como sistemas distribuídos decidem o que é verdade quando nenhum nó pode confiar apenas em sua própria visão — verdade baseada em quórum, falhas bizantinas, modelos de sistema realistas, safety versus liveness, e as técnicas formais e de teste randomizado usadas para tornar algoritmos tolerantes a falhas confiáveis.

Distributed SystemsFault ToleranceConsensusFormal Methods
7
Advanced14 min

Transações Distribuídas e Two-Phase Commit

Como o commit atômico funciona quando uma transação toca vários nós ou sistemas, por que two-phase commit consegue preservar semântica tudo-ou-nada mas bloqueia durante falhas, e por que arquiteturas modernas frequentemente preferem sagas, outboxes, ou SQL distribuído apoiado em consenso em vez disso.

Distributed TransactionsTwo-Phase CommitConsistencyMicroservicesMessaging
8
Intermediate11 min

Escalabilidade e Manutenibilidade: Parâmetros de Carga e a Tríade Operabilidade-Simplicidade-Evolutibilidade

Por que "isso é escalável?" é uma pergunta sem sentido até você nomear o parâmetro de carga e a dimensão de crescimento — a taxonomia shared-memory/shared-disk/shared-nothing, por que não existe uma arquitetura escalável genérica, e as três propriedades separadamente otimizáveis que decidem se um sistema sobrevive aos seus próximos cinco anos.

ScalabilityMaintainabilityFundamentalsArchitecture
9
Beginner9 min

Confiabilidade e Tolerância a Falhas: Faults vs. Failures

Por que confiabilidade só significa algo depois que você define o que "funcionar corretamente" e "coisas dando errado" significam para o seu sistema específico — e por que a distinção entre um fault (um componente desviando) e uma failure (o sistema inteiro parando) é o pedaço de vocabulário mais útil no assunto.

Fault ToleranceFundamentalsReliabilityDistributed Systems
10
Beginner9 min

Descrevendo Performance: Latência, Tempo de Resposta e Percentis

Por que o tempo médio de resposta não te diz quase nada sobre o que seus usuários realmente vivenciam, e como percentis — p50, p95, p99, p999 — descrevem uma distribuição de tempos de resposta de forma honesta o suficiente para colocar em um SLA.

PerformanceFundamentalsMonitoringSLAs
11
Beginner13 min

Cloud vs. Self-Hosting, e Quando Distribuir de Fato

Duas decisões que moldam um sistema antes de uma única linha de lógica de negócio ser escrita — se alugar infraestrutura ou possuí-la, e se espalhar a carga de trabalho entre máquinas de qualquer forma — e por que "distribuído por padrão" costuma ser o mais caro dos dois erros.

Cloud ArchitectureDistributed SystemsFundamentalsTrade-offs
12
Beginner8 min

Serviços Stateless e o Desacoplamento entre Computação e Dados

A única mudança que torna quase toda outra técnica de escalabilidade possível — mover o estado para fora do processo do servidor e para um armazenamento separado, de modo que qualquer instância possa atender qualquer requisição e nenhuma delas seja insubstituível.

FundamentalsScalabilityDistributed SystemsFault Tolerance
13
Beginner8 min

Escalabilidade Horizontal vs. Vertical

As duas formas de dar mais capacidade a um sistema — máquinas maiores versus mais máquinas — por que não são intercambiáveis, e como o autoscaling transforma "quantos servidores precisamos" de uma decisão manual em uma política.

ScalabilityFundamentalsLoad BalancingInfrastructure
14
Advanced12 min

Serviços de Consenso e Coordenação

Por que a replicação de líder único precisa de uma forma de concordar sobre quem é o líder, como algoritmos estilo Raft/Paxos transformam isso em um log compartilhado tolerante a falhas via votação por quórum, e por que quase ninguém implementa consenso do zero — em vez disso, recorrem a um serviço de coordenação como ZooKeeper ou etcd.

Distributed SystemsConsensusFault ToleranceCoordination
15
Intermediate13 min

Transações, ACID, e Níveis de Isolamento

O que ACID realmente garante por trás do termo de marketing, as condições de corrida específicas (leituras sujas, atualizações perdidas, write skew, fantasmas) que níveis fracos de isolamento permitem passar, e por que o "repeatable read" do PostgreSQL e o "repeatable read" do MySQL não significam a mesma coisa.

DatabasesData ConsistencyTransactionsConcurrencyFundamentals
16
Intermediate10 min

O Problema com Sistemas Distribuídos: Falhas Parciais, Relógios, e Pausas

Por que um nó em um sistema distribuído nunca pode confiar completamente em seu próprio julgamento sobre a hora atual ou sua própria vivacidade — redes não confiáveis, relógios não confiáveis, e pausas de processo, e por que todos apontam para o mesmo problema subjacente.

Distributed SystemsFundamentalsFault ToleranceConsistency Models
17
Beginner8 min

Teorema CAP

Por que um sistema distribuído não consegue oferecer consistência e disponibilidade ao mesmo tempo durante uma partição de rede — e por que esse enquadramento é essencial, mas incompleto.

Distributed SystemsConsistency ModelsFundamentalsTrade-offs

Resilience & Operability

Security in Distributed Systems

Data Storage & Modeling

1
Intermediate12 min

Formatos de Codificação de Dados e Evolução de Schema

Por que todo byte que sai de um processo precisa ser codificado, o que JSON, Protocol Buffers e Avro realmente colocam no fio, e como tags de campo e a resolução de schema writer/reader mantêm versões antigas e novas do seu código capazes de ler os dados umas das outras.

Data ModelingSerializationAPI DesignBackward Compatibility
2
Intermediate12 min

Índices de Busca de Texto Completo e Embeddings Vetoriais

Por que B-trees não conseguem responder "encontre documentos sobre X" ou "encontre coisas parecidas com isto", e as estruturas de índice que conseguem — R-trees multidimensionais, índices invertidos com postings lists, e grafos HNSW sobre embeddings vetoriais.

SearchVector DatabasesData StorageAI Infrastructure
3
Intermediate12 min

Armazenamento Orientado a Colunas para Cargas de Trabalho Analíticas

Por que uma consulta de warehouse que soma uma coluna de uma tabela com um bilhão de linhas não deveria precisar ler as outras noventa e nove — o layout de disco colunar por trás de todo engine analítico moderno, a compressão que ele viabiliza, e a execução vetorizada e os agregados pré-computados construídos sobre ele.

Data StorageOLAPDatabase InternalsPerformance
4
Intermediate13 min

Motores de Armazenamento OLTP: B-Trees vs. LSM-Trees

Como as duas famílias dominantes de motores de armazenamento — B-trees que atualizam no local e LSM-trees somente-anexação — realmente escrevem e leem dados em disco, e por que essa escolha oculta determina seu throughput de escrita, previsibilidade de latência de leitura, e ocupação de disco.

Data StorageDatabase InternalsIndexingPerformance
5
Intermediate12 min

Modelos de Dados em Grafo e Linguagens de Consulta

Quando quase todo relacionamento nos seus dados é muitos-para-muitos, o modelo natural é vértices e arestas em vez de tabelas ou documentos — e uma linguagem de consulta por correspondência de padrões como Cypher se paga por si mesma contra trinta linhas de SQL recursivo.

Data ModelingGraph DatabasesQuery LanguagesNoSQL
6
Beginner11 min

Modelos de Dados Relacional vs. Documento

Por que a escolha entre tabelas normalizadas e documentos JSON autocontidos é uma pergunta sobre o formato dos seus dados — árvores versus grafos — em vez de uma pergunta sobre qual tecnologia é mais moderna.

Data ModelingNoSQLFundamentalsSchema Design
7
Beginner11 min

Sistemas Operacionais vs. Analíticos: OLTP, OLAP, e Data Warehousing

Por que o banco de dados que serve seu fluxo de checkout é o lugar errado para calcular a receita do último trimestre — os padrões de acesso opostos por trás de OLTP e OLAP, o data warehouse que os separa, e a distinção entre sistemas-de-registro vs. dados derivados que torna todo o pipeline seguro de reconstruir.

Data ModelingScalabilityFundamentalsData Warehousing
8
Intermediate14 min

Persistência Poliglota

Por que um sistema que armazena arquivos de vídeo, catálogos de produtos, estado de sessão, grafos sociais e histórico de eventos versionado não deveria colocar todos eles no mesmo tipo de banco de dados — casando cada formato de dado e padrão de acesso com o motor de armazenamento realmente construído para ele.

DatabasesData ModelingScalabilityFundamentals

Replication & Consistency

1
Intermediate19 min

Árvores de Merkle: Árvores de Hash para Verificação Eficiente e Anti-Entropia

Como uma árvore de hashes permite que duas partes concordem que gigabytes de dados são idênticos comparando um único hash, provar o pertencimento de um único registro em O(log n), e reparar apenas o que realmente divergiu -- com o bug de separação de domínio que quebrou o Bitcoin pelo caminho.

Data IntegrityCryptographyDistributed SystemsReplicationBlockchainZero-Knowledge ProofsPost-Quantum Cryptography
2
Advanced13 min

Estratégias de Sharding, Rebalanceamento, e Índices Secundários

O menu completo de esquemas de particionamento — key range, hash range, e o caso de multitenancy — mais os dois problemas operacionais que todo mundo encontra depois: rebalancear shards sem piorar um incidente, e responder consultas de índice secundário quando o índice não se alinha com os shards.

ShardingDistributed SystemsScalabilityData Modeling
3
Advanced15 min

Replicação Multi-Líder e Sem Líder

O que você ganha e o que abre mão quando mais de um nó pode aceitar escritas — topologias multi-líder para apps geo-distribuídos e capazes de offline, quóruns sem líder estilo Dynamo, e a maquinaria de detecção e resolução de conflito (LWW, CRDTs, version vectors) que ambas abordagens forçam você a construir.

ReplicationDistributed SystemsConsistency ModelsConflict Resolution
4
Intermediate13 min

Replicação de Líder Único

Por que canalizar toda escrita através de um nó designado ainda é o modelo de replicação padrão para PostgreSQL, MySQL, MongoDB, e Kafka — e o que isso custa em risco de failover e anomalias de ler-suas-próprias-escritas.

ReplicationDistributed SystemsConsistency ModelsFault Tolerance
5
Intermediate9 min

Geração Distribuída de IDs

Como gerar identificadores únicos em alto throughput através de muitos servidores sem que uma única sequência de banco de dados vire o gargalo — e como dimensionar um ID para um código curto de comprimento fixo.

Distributed SystemsData ModelingScalabilitySharding
6
Intermediate9 min

Consistent Hashing (Hashing Consistente)

Um esquema de hashing que permite a um store distribuído adicionar ou remover nós remapeando apenas uma pequena fração das chaves — em vez de quase todas, como faz o hashing por módulo ingênuo.

Distributed SystemsShardingCachingLoad BalancingFundamentals

Scaling & Infrastructure

1
Intermediate11 min

Redis vs. Memcached: Escolhendo um Cache em Memória

Por que "só use Redis" nem sempre é a resposta certa — como o design single-threaded e de estruturas de dados ricas do Redis, e o design multi-threaded e puramente chave-valor do Memcached, de fato diferem em arquitetura, persistência e como cada um escala.

CachingRedisMemcachedScalability
2
Advanced14 min

Service Mesh e o Padrão Sidecar

Como obter mTLS, retries, circuit breaking, load balancing e observabilidade por requisição para cada chamada serviço-a-serviço em uma frota de microsserviços sem escrever essa lógica em cada serviço — movendo-a para um proxy que roda junto de cada instância, e um control plane que configura todos os proxies de uma vez.

MicroservicesNetworkingDistributed SystemsObservabilitySecurity
3
Intermediate13 min

Entrega Progressiva: Canary, Blue-Green e Feature Flags

Como lançar uma mudança para milhões de usuários sem descobrir que ela estava quebrada a partir de todos eles de uma vez — a troca instantânea e total do blue-green, o deslocamento gradual de tráfego do canary com uma decisão go/no-go, e feature flags desacoplando completamente "implantado" de "ativado".

DeploymentReliabilitySREDistributed SystemsOperability
4
Advanced14 min

Arquitetura Multi-Região e Recuperação de Desastres

Como projetar de forma que uma região inteira possa desaparecer sem derrubar o negócio junto — topologias ativo-passivo vs. ativo-ativo, os números de RTO/RPO que realmente definem "quão ruim é aceitável," e por que um plano de recuperação de desastres que ninguém ensaiou não é um plano.

ReliabilityDistributed SystemsScalabilityReplicationSRE
5
Advanced12 min

Upload em Chunks, Deduplicação, e Delta Sync

Como produtos de sincronização estilo Dropbox lidam com arquivos grandes demais para uma única requisição e evitam retransferir bytes que o servidor já tem — dividindo arquivos em chunks endereçados por conteúdo, gerando fingerprint de cada um, e sincronizando apenas o que mudou.

Object StorageScalabilityDistributed SystemsPerformance
6
Intermediate11 min

Armazenamento de Objetos e o Padrão de Upload Direto

Por que arquivos grandes nunca deveriam ser transmitidos através do seu servidor de aplicação ou armazenados como blobs em um banco de dados relacional — e como URLs pré-assinadas permitem que clientes façam upload diretamente para o armazenamento de objetos enquanto seu banco de dados só mantém metadados.

Object StorageScalabilityAPI DesignEvent-Driven Architecture
7
Intermediate9 min

Rate Limiting (Limitação de Taxa)

Por que taxas de requisição irrestritas permitem que um punhado de clientes degrade o serviço para todos os outros, os algoritmos (janela fixa, janela deslizante, token bucket) usados para limitá-las, e onde na stack um rate limiter realmente pertence.

ScalabilityCachingAPI DesignFault Tolerance
8
Intermediate10 min

O API Gateway

Por que um sistema distribuído precisa de uma única porta de entrada que termina o tráfego de clientes, roteia para o serviço certo e centraliza preocupações transversais como autenticação — em vez de expor cada microsserviço diretamente para a internet.

MicroservicesAPI DesignAuthenticationNetworking
9
Intermediate9 min

Estratégias de Load Balancing

Por que round-robin é apenas o ponto de partida para balanceamento de carga — como algoritmos ponderados, least-connections e roteamento consciente de saturação lidam com servidores e requisições desiguais, e quando balancear na camada de transporte versus na camada de aplicação.

Load BalancingScalabilityNetworkingFundamentals
10
Intermediate8 min

Estratégias de Caching e CDNs

O punhado de padrões de caching — cache-aside, write-through, write-behind — que cobre a maioria dos cenários de entrevista e produção, além do que uma CDN adiciona sobre um cache dentro do datacenter.

CachingPerformanceCDNScalability

Messaging & Streaming

1
Advanced15 min

Desmembrando o Banco de Dados e a Arquitetura de Dataflow

Como um log de eventos ordenado pode se tornar a espinha dorsal do lado da escrita para um ecossistema de bancos de dados, índices, caches, warehouses e stores de ML, permitindo que equipes reconstruam estado derivado, unifiquem batch e streaming, e raciocinem sobre correção de ponta a ponta em vez de esperar que cada sistema especializado permaneça magicamente consistente.

StreamingData IntegrationEvent-Driven ArchitectureDistributed SystemsData Consistency
2
Advanced14 min

Joins de Stream e Processamento Exactly-Once

Como processadores de stream unem streams de eventos não limitados com outros streams e tabelas em mudança, por que esses joins dependem do tempo, e como checkpoints, replay, escritas idempotentes e transações fazem falhas parecerem efetivamente uma vez em vez de exatamente mágicas.

Stream ProcessingFault ToleranceEvent-Driven ArchitectureDistributed Systems
3
Advanced14 min

Processamento de Stream: Tempo e Janelas

Como processadores de stream transformam streams de eventos não limitados em resultados úteis separando tempo de evento de tempo de processamento, usando watermarks para raciocinar sobre dados atrasados, e escolhendo o tipo certo de janela para análises contínuas, monitoramento e visões materializadas.

Stream ProcessingEvent TimeWatermarksWindowing
4
Advanced14 min

Dataflow Engines e Joins Distribuídos

Como engines modernos de dataflow em batch substituem cadeias de jobs MapReduce materializados por DAGs otimizados, e como sistemas distribuídos escolhem entre joins reduce-side, broadcast, particionados e merge sob restrições de shuffle, memória, skew e otimizador.

Batch ProcessingDistributed SystemsData EngineeringQuery Optimization
5
Intermediate12 min

Padrões de Dataflow: Bancos de Dados, Serviços e Eventos

As três formas pelas quais dados codificados realmente viajam entre processos — armazenados em um banco de dados e lidos de volta mais tarde, requisitados sincronamente via REST ou RPC, ou publicados como um evento para consumidores desconhecidos — e como cada caminho muda quem precisa concordar com o schema, quando, e o que acontece quando uma etapa falha no meio do caminho.

API DesignEvent-Driven ArchitectureDistributed SystemsData Modeling
6
Advanced12 min

Event Sourcing e CQRS

Por que armazenar o log somente-append de tudo o que aconteceu — em vez de uma linha mutável mantendo o que é verdade agora — te dá uma trilha de auditoria de graça e permite construir novos modelos de leitura sobre dados antigos, e como as projeções do CQRS transformam esse log em algo consultável.

Data ModelingEvent-Driven ArchitectureCQRSAudit Trail
7
Intermediate10 min

O Modelo de Programação MapReduce

O padrão de quatro passos — dividir a entrada em registros, mapear cada registro em um par chave/valor, ordenar por chave, reduzir o grupo de cada chave — que transforma o clássico pipeline Unix de análise de logs em um modelo de programação distribuído, e por que o MapReduce puro foi substituído por motores que mantêm dados intermediários em memória em vez de escrevê-los em disco entre cada job.

Distributed SystemsData ProcessingBatch ProcessingFunctional Programming
8
Intermediate12 min

Processamento em Lote em Sistemas Distribuídos

Como frameworks de batch distribuído transformam um cluster de máquinas em algo parecido com um sistema operacional distribuído — um gerenciador de recursos, executores de tarefas, e um scheduler que rodam jobs de entrada imutável e saída regenerada em escala — e por que tolerância a falhas por tarefa, não retry do job inteiro, é o ponto central do modelo.

Distributed SystemsData ProcessingScalabilityFault Tolerance
9
Intermediate12 min

Message Brokers: Filas vs. Streaming Baseado em Log

Como brokers tradicionais no estilo JMS/AMQP (RabbitMQ, SQS) tratam a entrega de mensagens como destrutiva e de curta duração, como brokers baseados em log (Kafka, Redpanda, Kinesis) tratam o próprio log como armazenamento durável que os consumidores repetem de forma independente, e por que escolher entre eles é na verdade uma escolha entre paralelismo por mensagem e ordenação estrita com replay.

Distributed SystemsStreamingEvent-Driven ArchitectureMessaging
10
Intermediate14 min

Change Data Capture (CDC)

Como seguir o próprio log de replicação de um banco de dados — em vez de fazer polling em uma tabela ou dual-write — transforma cada mudança commitada em um stream ordenado de eventos, e por que esse stream, não a tabela, é indiscutivelmente a real fonte de verdade.

Distributed SystemsData ConsistencyEvent-Driven ArchitectureStreamingReplication
11
Advanced10 min

Read/Write Splitting e CQRS-Lite

Quando separar o caminho de leitura do caminho de escrita é uma técnica de escalonamento legítima versus quando é apenas dois bancos de dados discutindo sobre qual deles está falando a verdade.

Distributed SystemsData ConsistencyCQRSDatabase ReplicationScalability
12
Intermediate16 min

O Padrão Outbox Transacional

Como atualizar um banco de dados e publicar um evento sobre essa atualização de forma atômica, sem uma transação distribuída.

Distributed SystemsMessagingData ConsistencyEvent-Driven ArchitectureMicroservices

Observability & SRE

System Design Case Studies

1
Advanced16 min

Design de um Serviço de Armazenamento e Sincronização de Arquivos

Como um produto estilo Dropbox ou Google Drive mantém um arquivo idêntico em todos os dispositivos que um usuário possui — o serviço de metadados que rastreia versões e namespace separadamente do armazenamento de blocos que guarda os bytes, o canal de notificação que avisa outros dispositivos que algo mudou, e por que conflitos de sincronização são uma decisão de produto, não apenas de engenharia.

Distributed SystemsStorageScalabilityConsistencyObject Storage
2
Intermediate12 min

Estimativa de Capacidade em Guardanapo (Back-of-the-Envelope)

Como transformar "projete um sistema para um bilhão de usuários" em números concretos de QPS, armazenamento e banda em alguns minutos de aritmética — atalhos de potências de dois, os números de latência que todo engenheiro deveria ter memorizados, e por que o ponto real não é precisão, é capturar um design que está errado por três ordens de grandeza antes de você construí-lo.

System DesignPerformanceScalabilityDistributed SystemsEstimation
3
Advanced16 min

Projetando uma Bolsa de Valores

Por que um motor de matching é o único sistema onde microssegundos — não throughput ou disponibilidade — são a restrição primária, e como prioridade preço-tempo, um livro de ordens em memória de thread única por símbolo, e um log de eventos append-only e sequenciado se combinam para tornar o matching rápido, justo, determinístico e replayável.

Low LatencyConcurrency ControlDistributed SystemsFault ToleranceConsensus
4
Advanced15 min

Projetando uma Carteira Digital

Como uma carteira mantém o saldo de cada usuário comprovadamente igual à soma do seu histórico de transações — o ledger somente-anexação, a transferência atômica única de débito-mais-crédito, e o locking, as constraints e a idempotência que impedem que transferências concorrentes criem ou destruam dinheiro.

Data ConsistencyACID TransactionsIdempotencyFault Tolerance
5
Advanced17 min

Projetando um Sistema de Pagamentos

Por que a restrição definidora de um sistema de pagamentos é que dinheiro nunca deve ser perdido ou cobrado em duplicidade quando uma chamada a um provedor de pagamento externo expira com um resultado desconhecido — chaves de idempotência, execução exatamente-uma-vez, um ledger de partida dobrada, e reconciliação noturna contra o arquivo de liquidação do provedor.

Data ConsistencyACID TransactionsDistributed SystemsFault ToleranceIdempotency
6
Intermediate11 min

Projetando um Leaderboard de Jogo em Tempo Real

Por que "qual é meu ranking?" e "quem são os top 10?" são duas consultas muito diferentes com milhões de jogadores, e como um sorted set — mais sharding, um cache de top-N, e réplicas de leitura — responde ambas em tempo logarítmico.

CachingData StructuresReal-Time SystemsScalability
7
Intermediate13 min

Projetando um Serviço de E-mail Distribuído

Como um serviço de e-mail em escala Gmail se divide em três sistemas com três pressões de design diferentes — aceitar correio da internet pública via SMTP, armazenar petabytes de metadados de caixas de entrada e anexos, e servir carregamentos rápidos de caixa de entrada e busca de texto completo em cima disso.

MessagingObject StorageScalabilityData Modeling
8
Intermediate13 min

Projetando um Sistema de Reservas de Hotel

Por que um sistema de reservas é um dos raros designs onde correção supera throughput — o modelo de inventário por tipo de quarto, a corrida de reserva dupla entre dois usuários comprando o último quarto, e os mecanismos pessimistas, otimistas e baseados em restrições que de fato a impedem.

Data ConsistencyACID TransactionsConcurrency ControlScalability
9
Advanced14 min

Agregação de Eventos de Cliques em Anúncios

Como contar um bilhão de eventos de clique em anúncios por dia, agrupados por anúncio e janela de tempo, sem contar um único evento duas vezes — o caminho de streaming que responde dashboards em minutos, o caminho batch que produz os números pelos quais os anunciantes são realmente cobrados, e a deduplicação, o watermarking e a reconciliação que mantêm tudo honesto.

Batch ProcessingStream ProcessingData ModelingScalability
10
Intermediate15 min

Projetando um Sistema de Monitoramento de Métricas e Alertas

Como uma plataforma de monitoramento no estilo Prometheus ou Datadog absorve dezenas de milhões de escritas de métricas por intervalo em um armazenamento de séries temporais, enquanto um segundo caminho, deliberadamente mais simples, avalia regras de alerta sobre os mesmos dados em segundos.

ObservabilityTime-Series DataScalabilityAlerting
11
Advanced16 min

Projetando uma Fila de Mensagens Distribuída

Como construir um broker baseado em log estilo Kafka do zero — um log append-only em disco dividido em partições, replicação líder/seguidor com réplicas em sincronia, grupos de consumidores com offsets confirmados e rebalanceamento, e o que cada semântica de entrega (no máximo uma vez, pelo menos uma vez, exatamente uma vez) realmente custa.

MessagingDistributed SystemsFault ToleranceConsensus
12
Advanced15 min

Design do Google Maps

Três sistemas não relacionados se escondem atrás de um único prompt — uma pirâmide de tiles estáticos em escala de petabytes servida por uma CDN, um geocodificador que transforma texto em coordenadas, e um motor de menor caminho sobre um grafo rodoviário do tamanho de um continente que o Dijkstra não consegue tocar.

GeospatialRouting AlgorithmsScalabilityCaching
13
Advanced14 min

Projetando Amigos Próximos (Nearby Friends)

Por que mostrar quais amigos estão próximos é um problema de fan-out em tempo real e alta escrita, em vez de uma busca indexada — o cache de localização em memória, canais pub/sub por usuário, e push via WebSocket que transformam ~334 mil atualizações de localização por segundo em ~14 milhões de pushes por segundo sem um banco de dados no caminho crítico.

GeospatialReal-Time SystemsMessagingWebSockets
14
Intermediate14 min

Projetando um Serviço de Proximidade

Como uma consulta de "encontre todo negócio a até 5 km de mim" é respondida em milissegundos — por que uma varredura de intervalo bidimensional é a ferramenta errada, e como geohash, quadtree, e o S2 do Google achatam o globo em um índice unidimensional sobre o qual um banco de dados de fato consegue buscar.

GeospatialShardingCachingScalability
15
Advanced15 min

Design do YouTube

Por que uma plataforma de vídeo é um problema de transcodificação e distribuição em vez de um problema de armazenamento — transformar um arquivo enviado em uma matriz de renderizações de bitrate adaptativo através de um DAG de tarefas de codificação paralelas, e depois empurrar essas renderizações para caches de borda próximos dos espectadores.

Object StorageCDNVideo StreamingScalabilityPolyglot Persistence
16
Intermediate11 min

Projetando um Sistema de Autocomplete de Busca

Como uma caixa de busca com sugestões (typeahead) retorna cinco sugestões ranqueadas em menos de 100ms a cada tecla digitada — uma trie anotada com resultados top-k pré-computados, construída offline por um pipeline de agregação em batch, particionada, cacheada e protegida por debouncing no cliente.

Data StructuresCachingBatch ProcessingScalability
17
Advanced13 min

Projetando um Sistema de Feed de Notícias

Como um feed no estilo Facebook/Instagram/Twitter se divide em dois pipelines escalados independentemente — um caminho de escrita que distribui uma postagem para milhões de caches de feed pré-computados por usuário, e um caminho de leitura que hidrata uma lista de IDs em um feed renderizável em milissegundos — mais o problema da chave-quente de celebridade que força um modelo de fan-out híbrido.

Fan-outCachingScalabilityData Modeling
18
Intermediate13 min

Projetando um Sistema de Notificações

Como distribuir um único evento de notificação através de push, SMS e e-mail — filas por canal que absorvem APIs lentas de terceiros, retries e dead-lettering que garantem que nada se perca, e a deduplicação, preferências e rate limits que evitam que usuários desativem notificações completamente.

MessagingScalabilityFault ToleranceAPI Design
19
Advanced14 min

Projetando um Web Crawler

Como um crawler que busca bilhões de páginas por mês permanece educado com hosts individuais, atualizado contra uma web que muda por baixo dele, e robusto contra armadilhas e conteúdo malformado — e por que a fronteira de URL, não o downloader, é onde o design realmente vive.

Distributed SystemsBatch ProcessingFault ToleranceScalability
20
Beginner10 min

Projetando um Encurtador de URLs

Um design resolvido para um serviço estilo TinyURL — dimensionando a carga de escrita e leitura, a API de dois endpoints, o trade-off entre redirecionamento 301 e 302, e por que o caminho de redirecionamento é na verdade um problema de design de cache.

API DesignData ModelingCachingScalability
21
Intermediate15 min

Projetando um Key-Value Store Distribuído

Um design resolvido para um key-value store distribuído estilo Dynamo/Cassandra — dimensionando o cluster, particionando e replicando o keyspace, ajustando consistência com quóruns N/W/R, e mantendo réplicas sincronizadas através de hinted handoff, Merkle trees, e gossip.

Distributed SystemsNoSQLShardingFault ToleranceData Modeling
22
Advanced16 min

Escalando Mensageria em Tempo Real: Ordenação, Fan-out, e Presença

A metade de deep-dive de uma entrevista de design de sistema de chat — garantindo ordenação de mensagens por chat com Kafka, desacoplando fan-out do servidor de chat via CDC, escalando entrega WebSocket com pub/sub, domando churn de WebSocket com subscrições arrendadas, e particionando/cacheando armazenamento para bilhões de usuários.

System Design InterviewsReal-Time SystemsScalabilityMessage OrderingPub/Sub
23
Intermediate18 min

Design de um Sistema de Chat em Larga Escala (estilo Slack)

Um passo a passo de entrevista de design de sistemas para um produto de chat estilo Slack — requisitos funcionais e não funcionais, entidades centrais, por que WebSockets substituem polling de requisição/resposta, e o design de alto nível para envio de mensagens, mídia rica, entrega offline e exclusão de mensagens.

System Design InterviewsReal-Time SystemsWebSocketsMessagingAPI Design