O algoritmo de consenso Raft é um algoritmo de computador que distribui uma máquina de estado em um cluster de sistemas de computador. Ele garante que cada nó do cluster concorde com a mesma série de transições de estado, mesmo em caso de falhas. O algoritmo foi projetado como uma alternativa de compreensão mais fácil aos protocolos Paxos para resolução de falhas. Ele tem implementações de referência de código aberto, como C ++, Java e Scala.
O que é consenso
Consenso é o processo de fazer com que vários servidores concordem em um valor específico com base nos votos de cada servidor. Depois de tomada uma decisão sobre um valor, a decisão é final. O valor decidido deve ser enviado por um servidor, o que significa que o algoritmo de consenso não pode criar um valor sozinho. De forma mais simples, o valor pode ser 0 ou 1, permitindo que todos os servidores tomem a decisão de fazer algo ou não. O consenso é usado no contexto de máquinas de estado replicadas, um modelo matemático de computação.
Como funciona a jangada
A jangada funciona elegendo um líder no agrupamento. Um servidor em um cluster é líder ou seguidor e pode possivelmente ser um candidato se o líder não estiver disponível. O líder gerencia a replicação do log para outros servidores e aceita solicitações do cliente. Um líder lidera até falhar ou desconectar, caso em que um novo líder é escolhido entre os candidatos. Os dados fluem em uma direção: do líder para outros servidores.
Raft decompõe o consenso em três subproblemas independentes:
- Eleição do líder: Quando o líder atual falha, um novo líder precisa ser eleito.
- Replicação de log: Por meio da replicação, o líder precisa manter seu próprio servidor sincronizado com os logs de todos os outros servidores.
- Segurança: Nenhum outro servidor pode solicitar uma entrada de log em um índice específico se um servidor já tiver se comprometido com uma entrada de log para esse índice. Isso é para garantir que os logs sejam consistentes e o estado usinado execute o mesmo conjunto de comandos.
O Raft pode ser usado para replicação em sistemas distribuídos. Ele constrói sistemas fortes e consistentes sem sacrificar o desempenho ou a precisão. Bancos de dados distribuídos como TiDB e YugabyteDB usam Raft para eleição de líder e replicação de dados para gerenciamento de banco de dados NewSQL.