GH GambleHub

Algoritmos de consenso

1) O que é o consenso e o que é necessário

Consenso: alinhamento do mesmo valor/seqüência de valores entre vários nós em casos de falhas e atrasos. Tradicionalmente, o desafio de replicar o estado (SMR, State Machine Replicação) é que há uma máquina de estado determinada e uma ordem geral de operações.

Diferenciar:
  • Consenso (SMR): ordem total unificada de comandos → armazenamento/registro linear, metadados de cluster, coordenadores de transação.
  • Operações quórum sem ordem total (Dinamo-similares, CRDT): permite a divergência e posterior fusão; não substituem o consenso onde a serialização global é necessária.

2) Modelo de tempo e falhas

2. 1 Modelo de tempo

Rede Asincrona: atrasos são ilimitados; o teorema FLP ⇒ não pode ser garantido por safety e liveness sem suposições adicionais.
Parcialmente sincronizado (muitas vezes na prática): Depois do desconhecido T, o sistema «age» em sincronia - a maioria dos algoritmos (Raft, Paxos) depende disso.
Sincronizado: limites de tempo rígidos por canal (raramente vendidos, exceto redes especiais/PTP).

2. 2 Modelo de falha

Crash-fault tolerant (CFT): Os nódulos podem cair/pendurar, mas não são maliciosos.
Byzantine-fault tolerant (BFT): nós podem mentir/falsificar mensagens. São necessários 3f + 1 nós para tolerância f bizantino.

3) Propriedades de consenso

Safety (segurança): inadequado (dois nódulos corretos não resolvem valores diferentes).
Liveness: Se a rede for «saudável», a solução será alcançada.
Linearização (linearidade): As operações são «vistas» como atômicas em ordem unificada.
Durabilidade: decisões tomadas não são revertidas (proteção por revista/quórum).

4) Quórum, maioria e cruzamento

No mundo CFT clássico: quórum> N/2. Os registos e as eleições do líder usam o cruzamento de quórum, por isso duas operações «validas» não são conflitantes.
No mundo BFT: quorum 2f + 1 de 3f + 1 permite a interseção de um mínimo de f + 1 nós honestos.

Regra de cruzamento: Qualquer quórum de dois deve ter um nó genérico genérico (CFT) ou (BFT).

5) Replicar estado (registro + aplicação)

Os comandos são colocados em um registro com ID (índice/era). Princípio: «Primeiro concordar com o registro (commit) e depois aplicar determinadamente ao estado». Para controlar o crescimento, fazem:
  • Seaschots (corte de estado após o qual as gravações iniciais podem ser removidas/compiladas).
  • Compactuação de revista e loga-triim.
  • Verificações de determinismo (versão idêntica do código/configs).

6) Esquemas de liderança e não-idêntico

Líder (Raft, Multi-Paxos, ZAB): um líder serializa as gravações de forma → mais simples mentalmente e operacionalmente, melhor latency em um líder estável.
Ilimitados/multilidéricos (EPaxos, Caestar): mais paralelismo e tolerância com o líder, mas mais difícil implementação e conflito-solução; o lucro é visível em pequenos conflitos de comandos.

7) Algoritmos CFT clássicos

7. 1 Paxos/Multi-Paxos (e práticas)

A ideia é duas fases (prepare/propose), promessas de aceitadores, quórum majoritário. A Multi-Paxos deixa um «líder estável» e transforma as operações em gravações de uma só rodada (para novos registros) depois de «aquecer».

Características:
  • Modelo flexível, mas difícil de implementar.
  • Configurações de r através de gravações especiais (joint consensus).
  • Na prática, bibliotecas/motores (Chubby/Spanner-geração).

7. 2 Raft

Descompromisso para aprendizado: seleção de líder, replicação de logs, configuração de ré.

Elation: temporizações aleatórias, votação de termos; um líder para o mandato.
AppendEntries: O líder estoura as gravações, monitora a correspondência do prefixo (índice/termo), o comit de fixação majoritária.
Read-path: lease-reads (com um líder forte) ou read-index para leitura linear.
Reconfig: «configuração compartilhada» (joint) - Os nós votam em dois clusters antes da transição.

Mais fácil de desenvolver/debag, invariantes fortes da ordem. O líder é um ponto de pressão.

7. 3 ZAB (ZooKeeper Atomic Broadcast) / Viewstamped Replication (VRR)

ZAB: Líder divulga transações, fase de recuperação, zxid (era + índice).
VRR: «vistas» (views) com replicante primário, semelhante ao Multi-Paxos de espírito.

8) CFT ilíder/multilídeo

8. 1 EPaxos

Sem um líder permanente, qualquer nó pode iniciar um comando.
Comandos de conflito recebem ordem parcial; Sem conflito - compactuado em 1-2 RPT localmente.
Ganhos na distribuição geográfica com baixa conflitância, mas complexos códigos de dependências/gráficos.

8. 2 Caesar, Mencius

Variações que otimizam atrasos/balanceamento e trabalho na WAN.

9) algoritmos BFT e família PoS

9. 1 PBFT (Practical BFT)

Três fases (pré-prepare/predare/commit), necessita de 3f + 1 nós.
Baixa latência em redes locais, caminhos multifacetados e mensagens de O (N ²).

9. 2 Tendermint (estilo BFT-PoS)

Rodadas com proposal e duas vozes (predote/precomit).
Um detector detector, temporais, sincronia parcial.
Bom para as redes permissioned/PoS com dezenas/centenas de validadores.

9. 3 HotStuff (e derivados)

O esquema de três fases foi unificado em «pacotes» com certificados de quórum (QC).
A complexidade linear das comunicações, o suporte a pacotes e a pipinização paralela são fáceis de implementar em blockchain (por exemplo, o ecossistema Diem/Move).
Com liminares (threshold signaturas), o tráfego diminui.

9. 4 PoW/consenso de poupança (resumo)

Não a BFT no sentido mais rigoroso, mas a convergência provável (a cadeia com mais trabalho). Virtudes: simplicidade/abertura; falhas: energia, £ segundos a minutos até a finalidade.

10) Leituras: lineares, sequenciais e em dinheiro

Leituras lineares: um líder com lease ativo ou através do read-index (Raft) → a confirmação através do quórum.
Sequenciais: pode ser lido a partir de qualquer nó, mas sem garantia de frescura.
Follower reads: Permitidos quando exigências fracas; Para o dinheiro, está bem.

11) Configuração de re (mudar a composição do cluster)

Requer duas configurações sobrepostas (joint consensus): qualquer comitiva passa por quórum de ambas as configurações sem «buracos».
Adicione/remova um, cumpra o tamanho do quórum.
A transferência de liderança (liderança transfer) reduz as quedas.

12) Desempenho e sintonização

12. 1 Atrasos

Algoritmos de liderança: 1 PTT por gravação (com um líder estável) + replicação.
Distribuição Geoespacial: WAN RENAULT domina → use regiões locais + replicagem regional cruzada ou abordagens EPaxos/HotStuff.

12. 2 Largada de banda

Batching (agrupamento de comandos), AppendEntries paralelos, edição-kesh do diário, aplicações paralelas (quando as operações são trocadas).
Disco: NVMe/Registro em um dispositivo separado, 'O _ DIRECTION '/AIO, grande' fsync '- interdição com restrições SLA (comprometimento durability/latency).

12. 3 Caudas p99

Evite os nós quentes (líder sempre sozinho): rotação periódica ou read-offload para os folkers.
Controle as pausas GC (JVM/Go), pinos CPU, NUMA.

13) Geografia e topologia

1 região, 3 zonas: cluster CFT clássico (N = 3/5).
2 regiões: evite - Não há quórum confiável para separar 1-1.
3 + regiões: líder no «meio» ou algoritmos ilimitados; é possível ter proxy/frentes locais com uma revista asincrona.

14) Questões práticas de exploração

14. 1 Snapshots e recuperação

Limite de tamanho de registro/número de operações.
Transferir o sistema para novos nós; Verificação de quantias de controle.

14. 2 Monitoramento

Liderança: Quem é o líder, quanto tempo (term/epoch) mudou.
Лаги: `append_latency`, `commit_index - applied_index`.

Saúde Quórum: «A maioria está viva/2f + 1?»

Tamanho do registro/taxa de compactação, fila de snapshots.
Para o BFT: proporção de votos, afastamento de signatários, atrasos de QC.

14. 3 Segurança/coerência do código

Versão do protocolo no fio, migração com compatibilidade de registro.
(Consulte «Bloqueios distribuídos»): prazo de liderança (term) para CRON/jobs.

15) Anti-pattern

Fazer um consenso para a moda, onde um DPD ou leitura quórum é suficiente sem ser seriado.
Misturar COP e AP sem limites claros (CAP) → um UX imprevisível.
Superestimar PoW/PoS para tarefas corporativas com dezenas de nós (difícil/caro).
Ignorar a configuração e os «quóruns que se cruzam» quando a composição é alterada.
Falta de read-barrier (lease/read-index) → leitura «suja».
Executar clusters de 2 nós (sem maioria).
Subestimar discos e fsync: «Tudo voa na memória» - antes do primeiro reinício.

16) Folha de cheque de seleção

1. O modelo de falha é CFT ou BFT?
2. Geografia: uma região/três zonas ou WAN? A RPT decide.
3. Semântica de leitura: Você precisa de leitura linear? Lease/read-index/folhetim-rids.
4. Carga: espera de p50/p99, throughput; se precisa de uma liderança multi.
5. Complexidade operacional: biblioteca/motor pronto (etcd/ZK/Consul/Raft-liba) vs sua própria implementação.
6. Reconfiguração frequente? Precisamos de uma joint consensus e ferramentas de migração.
7. Integração: Efeitos secundários externos - Há fencing por epoch/term?
8. Segurança: autenticação de nós, criptografia de canal, controle de versões de protocolo.
9. Playbooks de teste: partition, GC-stop, líder kill, slow disk, clock skew.
10. Observabilidade: métricas de líder/laje/registro e alertas configuradas.

17) Mini-guia: quando pegar

etcd/Raft-cluster para configurações/bloqueios/coordenação dentro da DC.
ZooKeeper/ZAB para serviços já amarrados em ZK (pilhas antigas, filas, liderança).
Multi-Paxos através de um serviço/biblioteca pronto em sistemas restritos.
ePaxos para distribuição geográfica e baixa conflitância de comandos.
Tendermint/HotStuff para redes permissionadas/leitor PoS com dezenas a centenas de validadores e exigências de finalidade.
Dínamo-similares/CRDT quando o consenso não é necessário, mas é importante disponibilidade/escala posterior à fusão.

18) Exemplos de interface (pseudo)

18. 1 Composição de gravação (estilo Raft)

pseudo client -> leader: Propose(cmd)
leader. appendLog(cmd)
leader. replicateToQuorum()
if quorum_acked:
leader. commit(index)
leader. apply(index)
leader. reply(client, ok)

18. 2 Read-index para leitura linear (Raft)

pseudo client -> any: LinearizableRead node -> leader: ReadIndex?
leader -> quorum: Heartbeat (barrier)
leader -> node: ReadIndex=commit_index node. wait_until(applied_index >= ReadIndex)
node. reply(client, state_at(ReadIndex))

18. 3 Configuração conjunta

pseudo old_conf + new_conf # quorums must intersect commit (entries under joint)
switch_to(new_conf)

18. 4 BFT (HotStuff-próximo)

pseudo propose(block)
collect votes -> QC lock on highest QC commit when have consecutive QCs across phases

19) FAQ

Porque não usamos dois nódulos e um tai breaker?
A: Dois nódulos sem um terceiro árbitro não dão quórum na separação. É preciso ≥3 (CFT) ou 3f + 1 (BFT).

Q: Do que Raft «mais fácil» Paxos?
A: Descomposição clara, invariantes compreensíveis do logo e configuração; mais fácil de implementar e acompanhar.

Como ler rápido sem carregar o líder?
A: Follower-reads (sequenciais) para não-ríticos ou lease-reads/read-index para lineares; armazenem-no.

O que mata o p99?
A: WAN-PTT, fsync disk, pés GC, líder superaquecido, grandes snapshots em «hora de ponta».

Q: O consenso é necessário para o cachê/catálogo?
A: Se houver consistency evolutiva suficiente, não. Se você precisar de invariantes transacionais, sim.

20) Resultado

O consenso é uma ferramenta de coerência e ordenamento rigorosos. Escolha um algoritmo com base no modelo de falha e geografia; forneça cruzamentos quórum, configuração de ré, leituras lineares onde for crítico e observabilidade. Não se esqueça de fencing para efeitos externos, snapshots e disciplina de revistas. Então a replicação do estado será previsível e os incidentes raros e compreensíveis.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.