Actualmente en pruebas: el código de GitHub se abrirá al finalizar.

Tipos de RPC ​

El tag de una trama determina el tipo de RPC. Todos los payloads son un tipo de openraft serializado con postcard.

tagNombrePayload de solicitudPayload de respuestaPapel
1VoteVoteRequestVoteResponseElección de líder — un candidato pide el voto a otros nodos
2AppendEntriesAppendEntriesRequestAppendEntriesResponseReplicación de log + heartbeat — el líder propaga comandos replicados a los seguidores
3FullSnapshotuna tupla (Vote, SnapshotMeta, snapshot_bytes)SnapshotResponseEnvía el snapshot completo a un nodo que se ha quedado atrás
  • Vote — cuando el líder muere, un nodo cuyo heartbeat se ha detenido se convierte en candidato y pide votos; el nodo que obtiene la mayoría se convierte en el nuevo líder.
  • AppendEntries — el líder transporta los comandos de bloqueo a confirmar como entradas de log. Un AppendEntries sin entradas es el heartbeat — no hay ningún mensaje de heartbeat aparte.
  • FullSnapshot — envía todo el estado actual a un nodo demasiado atrasado para ponerse al día vía el log (o uno que acaba de unirse). Se envía entero, en una sola trama, sin streaming.

Flujo — cuando el líder muere ​

Nodo A
Nodo B
Nodo C
detecta que el heartbeat del líder desapareció → se convierte en candidato
Vote · solicitando un voto
Vote · solicitando un voto
sí
mayoría incluyéndose a sí mismo → nuevo líder
AppendEntries (sin entradas = heartbeat)
AppendEntries (sin entradas = heartbeat)
RPC de consenso (Raft)

En cuanto llega el primer heartbeat del líder recién elegido, el clúster vuelve al servicio normal — el hueco total suele ser de 0,5-1 segundo. Consulta Comandos replicados para el flujo de AppendEntries (replicación de log) durante la operación normal.

Terminología ​

  • Replicación de log (log replication) — el líder convierte sus comandos decididos en un log ordenado y hace que los seguidores lo registren tal cual. Aplicar el mismo log en el mismo orden lleva a todos los nodos al mismo estado.
  • Heartbeat — una señal periódica de "estoy vivo". Cuando se detiene, los seguidores concluyen que el líder ha muerto e inician una elección.