Sobre el proyecto
hashicorp/raft es una biblioteca de Go que implementa el algoritmo de consenso Raft, proporcionando una base para construir máquinas de estado replicadas en sistemas distribuidos. La biblioteca gestiona un registro replicado y se integra con una abstracción de máquina de estado finito (FSM) para mantener un estado consistente en múltiples nodos.
Las capacidades clave incluyen:
- **Elección de líder**: Los nodos transicionan entre los estados de seguidor, candidato y líder. Los seguidores se autopromueven a candidatos si no reciben entradas durante un período de tiempo de espera, y luego solicitan votos a sus pares. Un candidato que recibe un quórum de votos se convierte en líder.
- **Replicación de registros**: El líder añade nuevas entradas de registro (blobs binarios opacos) al almacenamiento duradero y las replica a un quórum de seguidores. Una vez confirmadas, las entradas se aplican a la FSM.
- **Snapshots automáticos**: Para evitar el crecimiento ilimitado del registro, Raft realiza automáticamente snapshots del estado actual de la FSM y compacta el registro, eliminando las entradas que ya han sido aplicadas.
- **Gestión dinámica de pares**: La biblioteca admite añadir y eliminar nodos del clúster siempre que haya un quórum disponible.
- **Backends de almacenamiento**: El backend principal MDBStore está en un repositorio separado (raft-mdb), y hay disponible un backend de Go puro que utiliza BoltDB (raft-boltdb). Ambos pueden servir como implementaciones de LogStore y StableStore.
- **Emisión de métricas**: Admite métricas a través de armon/go-metrics (predeterminado) o hashicorp/go-metrics (mediante etiqueta de compilación), con una ruta de migración desde la biblioteca armon obsoleta.
La biblioteca requiere Go 1.16+ y está licenciada bajo MPL 2.0. Está basada en el artículo de Raft 'In Search of an Understandable Consensus Algorithm' y es comparable en rendimiento a Paxos, con una latencia de confirmación de registro limitada por la E/S de disco y los viajes de ida y vuelta de red a la mitad del clúster.
Los tamaños de clúster recomendados son de 3 o 5 nodos, que toleran 1 o 2 fallos de nodo respectivamente mientras maximizan la disponibilidad. La biblioteca es utilizada por productos de HashiCorp como Consul y Nomad para coordinación distribuida.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.