Pular para o conteúdo principal

Patterns of Distributed Systems

Catálogo pessoal baseado no Catalog of Patterns of Distributed Systems, de Unmesh Joshi, publicado no site de Martin Fowler e que resume o livro Patterns of Distributed Systems (2023). Os grupos seguem as partes do livro. Cada padrão tem descrição, problemas que resolve, quando usar, trade-offs, etiquetas (garantias distribuídas) e um diagrama Mermaid.

Padrões marcados com ★ são compartilhados com outro catálogo: este catálogo aponta para o documento original, revisado com o conteúdo desta fonte.

Total: 30 padrões em 5 grupos. Etiquetas: Garantia distribuída.

Grupos​

Data Replication (16)​

PadrãoResumoEtiquetas
Write-Ahead LogO Write-Ahead Log (WAL) é um arquivo de log somente com acréscimos (append-only) em disco no qual cada mudança de estado é registrada como um comando antes de ser aplicada às estruturas de dados em memória ou aos arquivos de dados.Durability Fault Tolerance
Segmented LogO Segmented Log divide o Write-Ahead Log em vários arquivos menores, chamados segmentos, em vez de manter um único arquivo que cresce indefinidamente.Performance Durability
Low-Water MarkO Low-Water Mark é um índice (offset) no log abaixo do qual as entradas não são mais necessárias e podem ser descartadas com segurança.Performance Durability
Leader and FollowersEm Leader and Followers, um servidor do cluster é escolhido como líder e passa a tomar as decisões em nome do grupo: ele recebe as escritas, define a ordem das atualizações e as propaga para os demais servidores, os seguidores.Consistency Fault Tolerance
HeartBeatNo HeartBeat, cada servidor envia periodicamente a outros servidores uma mensagem curta indicando que continua ativo.Availability Fault Tolerance
Majority QuorumNo Majority Quorum, uma atualização só é considerada aceita pelo cluster quando a maioria dos nós a reconhece.Consistency Fault Tolerance Availability
Generation ClockO Generation Clock é um número que só cresce e identifica o "mandato" do líder atual.Consistency Fault Tolerance
High-Water MarkO High-Water Mark é um índice no log que marca a última entrada replicada com sucesso em uma maioria (quórum) de nós.Consistency Durability
PaxosPaxos é um protocolo de consenso, proposto por Leslie Lamport, que permite a um grupo de nós concordar em um valor mesmo com falhas de nós e de rede e sem um líder fixo.Consistency Fault Tolerance
Replicated LogNo Replicated Log, cada nó do cluster mantém um Write-Ahead Log cujas entradas guardam as requisições do usuário e o estado necessário para o consenso.Consistency Fault Tolerance Durability
Singular Update QueueA Singular Update Queue usa uma fila de trabalho processada por uma única thread para aplicar mudanças de estado.Consistency Performance
Request Waiting ListA Request Waiting List é uma estrutura que associa uma chave a uma função de callback.Consistency Performance
Idempotent Receiver ★O padrão Idempotent Consumer projeta consumidores de mensagens de forma que processar a mesma mensagem mais de uma vez produza exatamente o mesmo efeito que processá-la uma única vez.Reliability
Follower ReadsNo Follower Reads, as escritas continuam passando pelo líder, mas as requisições somente de leitura podem ser atendidas pelos seguidores, em especial o mais próximo do cliente.Scalability Performance Availability
Versioned ValueNo Versioned Value, cada valor de uma chave é guardado junto com um número de versão que aumenta a cada atualização.Consistency Performance
Version VectorO Version Vector associa a cada valor de uma chave um vetor com um contador por nó do cluster.Consistency Availability

Data Partitioning (3)​

PadrãoResumoEtiquetas
Fixed PartitionsFixed Partitions mantém constante o número de partições lógicas de um cluster.Scalability Performance
Key-Range PartitionsKey-Range Partitions divide o espaço de chaves ordenadas em intervalos contíguos, e cada intervalo vira uma partição lógica.Scalability Performance
Two-Phase CommitTwo-Phase Commit (2PC) grava dados de forma atômica em vários nós, normalmente em partições diferentes.Consistency Durability

Distributed Time (3)​

PadrãoResumoEtiquetas
Lamport ClockO Lamport Clock é um contador lógico, um simples inteiro, mantido por cada nó do cluster para ordenar eventos sem depender do relógio de parede.Consistency
Hybrid ClockO Hybrid Clock (relógio lógico híbrido, ou HLC) combina o relógio de parede do sistema com um contador lógico.Consistency Performance
Clock-Bound WaitO Clock-Bound Wait lida com a incerteza dos relógios físicos de um cluster esperando que ela passe.Consistency Performance

Cluster Management (5)​

PadrãoResumoEtiquetas
Consistent CoreO Consistent Core separa o cluster em duas partes: um pequeno grupo de nós (tipicamente três a cinco) que executa um algoritmo de consenso e oferece linearizabilidade com tolerância a falhas, e um cluster de dados, que pode ter centenas de nós.Consistency Fault Tolerance Scalability
LeaseUm Lease é uma concessão de acesso exclusivo a um recurso por um tempo limitado.Fault Tolerance Availability
State WatchNo State Watch, o cliente registra no servidor o interesse em mudanças de determinados valores (uma chave, um prefixo, o estado de um nó).Performance Scalability
Gossip DisseminationNo Gossip Dissemination, cada nó guarda os metadados que conhece sobre o cluster (membership, estado de nós, informações de partições) e, em intervalos regulares, por exemplo a cada segundo, escolhe um ou poucos nós aleatórios e troca com eles o que sabe.Scalability Fault Tolerance Availability
Emergent LeaderEm clusters peer-to-peer, todos os nós são iguais e não existe uma eleição explícita como em Leader and Followers.Availability Fault Tolerance

Communication between Nodes (3)​

PadrãoResumoEtiquetas
Single-Socket ChannelO Single-Socket Channel usa uma única conexão TCP, aberta e mantida de forma duradoura, para todo o tráfego entre um par de nós, por exemplo entre um follower e o seu líder.Consistency Fault Tolerance Performance
Request BatchO Request Batch agrupa várias requisições pequenas em uma única mensagem de rede, enviada de uma vez a um nó do cluster.Performance Scalability
Request PipelineO Request Pipeline faz um nó enviar várias requisições a outro nó sem esperar a resposta de cada uma antes de enviar a seguinte.Performance Scalability

Por etiqueta​

Consistency (16)​

Leader and Followers, Majority Quorum, Generation Clock, High-Water Mark, Paxos, Replicated Log, Singular Update Queue, Request Waiting List, Versioned Value, Version Vector, Two-Phase Commit, Lamport Clock, Hybrid Clock, Clock-Bound Wait, Consistent Core, Single-Socket Channel

Durability (6)​

Write-Ahead Log, Segmented Log, Low-Water Mark, High-Water Mark, Replicated Log, Two-Phase Commit

Availability (7)​

HeartBeat, Majority Quorum, Follower Reads, Version Vector, Lease, Gossip Dissemination, Emergent Leader

Fault Tolerance (12)​

Write-Ahead Log, Leader and Followers, HeartBeat, Majority Quorum, Generation Clock, Paxos, Replicated Log, Consistent Core, Lease, Gossip Dissemination, Emergent Leader, Single-Socket Channel

Scalability (8)​

Follower Reads, Fixed Partitions, Key-Range Partitions, Consistent Core, State Watch, Gossip Dissemination, Request Batch, Request Pipeline

Performance (14)​

Segmented Log, Low-Water Mark, Singular Update Queue, Request Waiting List, Follower Reads, Versioned Value, Fixed Partitions, Key-Range Partitions, Hybrid Clock, Clock-Bound Wait, State Watch, Single-Socket Channel, Request Batch, Request Pipeline

Reliability (1)​

Idempotent Receiver