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)
- Data Partitioning (3)
- Distributed Time (3)
- Cluster Management (5)
- Communication between Nodes (3)
Data Replication (16)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Write-Ahead Log | O 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 Log | O 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 Mark | O 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 Followers | Em 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 |
| HeartBeat | No HeartBeat, cada servidor envia periodicamente a outros servidores uma mensagem curta indicando que continua ativo. | Availability Fault Tolerance |
| Majority Quorum | No Majority Quorum, uma atualização só é considerada aceita pelo cluster quando a maioria dos nós a reconhece. | Consistency Fault Tolerance Availability |
| Generation Clock | O Generation Clock é um número que só cresce e identifica o "mandato" do líder atual. | Consistency Fault Tolerance |
| High-Water Mark | O 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 |
| Paxos | Paxos é 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 Log | No 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 Queue | A Singular Update Queue usa uma fila de trabalho processada por uma única thread para aplicar mudanças de estado. | Consistency Performance |
| Request Waiting List | A 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 Reads | No 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 Value | No 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 Vector | O Version Vector associa a cada valor de uma chave um vetor com um contador por nó do cluster. | Consistency Availability |
Data Partitioning (3)
| Padrão | Resumo | Etiquetas |
|---|---|---|
| Fixed Partitions | Fixed Partitions mantém constante o número de partições lógicas de um cluster. | Scalability Performance |
| Key-Range Partitions | Key-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 Commit | Two-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ão | Resumo | Etiquetas |
|---|---|---|
| Lamport Clock | O 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 Clock | O 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 Wait | O 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ão | Resumo | Etiquetas |
|---|---|---|
| Consistent Core | O 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 |
| Lease | Um Lease é uma concessão de acesso exclusivo a um recurso por um tempo limitado. | Fault Tolerance Availability |
| State Watch | No 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 Dissemination | No 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 Leader | Em 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ão | Resumo | Etiquetas |
|---|---|---|
| Single-Socket Channel | O 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 Batch | O 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 Pipeline | O 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