Balsa (algoritmo)

(redireccionado de " algoritmo balsa ")

Raft  es un algoritmo para resolver problemas de consenso en una red de computación no confiable [1] . Fue desarrollado teniendo en cuenta las deficiencias del antiguo algoritmo Paxos . A la hora de elegir las ideas clave, se dio preferencia a las soluciones más sencillas y prácticas. Sin embargo, a pesar de su relativa simplicidad, Raft proporciona una implementación de máquina de estado segura y eficiente sobre un sistema informático de clúster .

Hay muchas implementaciones de código abierto de Raft en diferentes lenguajes de programación [2] . A pesar de la oposición común entre Raft y Paxos, de hecho Raft es un protocolo de la familia Paxos y comparte muchos detalles de implementación con MultiPaxos, ZAB ( Zookeeper Atomic Broadcast ) y otros.

Características

Una clara separación de fases: Raft ofrece una descomposición de la tarea de administración de clústeres en varias subtareas poco acopladas, las principales de las cuales son: elección de líder (votación) y replicación de protocolo. Cada una de estas tareas permite una división más detallada. Esto simplifica la comprensión del algoritmo y reduce el riesgo de errores en su implementación.

Líder explícito: Raft asume que siempre hay un líder explícito en el clúster. Solo este líder envía nuevos registros a otros nodos del clúster. Así, los nodos restantes siguen al líder y no interactúan entre sí (excepto en la fase de votación). Si un cliente externo se conecta al clúster a través de un nodo normal, todas sus solicitudes se redirigen al líder y solo desde allí llegan a los nodos.

Los protocolos de trabajo no pueden contener lagunas: es decir, las entradas se agregan de manera estrictamente secuencial. Esto impone algunas restricciones en comparación con Paxos, pero le permite simplificar mucho el algoritmo. Además, los detalles de las tareas aplicadas, en la mayoría de los casos, no permiten trabajar correctamente con protocolos que contienen lagunas. El hecho de que Paxos permita que ocurran tales brechas es a menudo una desventaja de Paxos, que es muy difícil de manejar.

Cambio de tamaño del clúster: Raft facilita la reconfiguración de un clúster sin detener el trabajo: agregue o elimine nodos.

Despliegue

Raft se construye sobre un clúster, cada nodo ejecuta una máquina de estado. Raft proporciona una entrega confiable de señales a todos los nodos en un orden determinado. Así, se asegura la transición de todas las máquinas de estados a lo largo de las mismas secuencias de estados. Por lo tanto, se garantiza que cada nodo se ponga de acuerdo con otros nodos.

Una circunstancia importante es que Raft numera estrictamente todas las entradas en el protocolo de trabajo. Las entradas deben ser estrictamente consecutivas. Estos números juegan un papel importante en el funcionamiento del algoritmo. Según ellos, se determina el grado de relevancia del estado del nodo. Al elegir un líder, el nodo más actualizado siempre se convierte en el líder. Los mismos números se utilizan para numerar las sesiones de votación. Un nodo solo puede votar una vez por solicitud de voto.

Elección del líder

Si un nodo normal no recibe mensajes del líder durante mucho tiempo, pasa al estado de "candidato" y envía una solicitud a otros nodos para votar. Otros nodos votan por el candidato del que recibieron la primera solicitud. Si el candidato recibe un mensaje del líder, entonces retira su candidatura y vuelve al estado normal. Si el candidato obtiene la mayoría de los votos, se convierte en el líder. Si no obtuvo la mayoría (este es el caso cuando varios candidatos aparecieron en el grupo a la vez y los votos se dividieron), entonces el candidato espera un tiempo aleatorio e inicia un nuevo procedimiento de votación.

El procedimiento de votación se repite hasta que se elige un líder.

Replicación de protocolos

El líder es totalmente responsable de la replicación adecuada del protocolo. Envía una solicitud a todos los nodos del clúster para agregar un nuevo registro y considera que la transacción fue exitosa solo después de que la mayoría de los nodos hayan confirmado que los datos se han aplicado y el resultado se ha guardado en medios persistentes.

Sobrecarga

Como puede verse en la descripción del algoritmo, la votación se basa en expectativas aleatorias. Para que el algoritmo funcione de manera efectiva, se deben cumplir las siguientes relaciones:

En problemas aplicados, estas condiciones, en la mayoría de los casos, se cumplen fácilmente. El tiempo de interacción de los nodos generalmente se mide en milisegundos. El tiempo de votación es de segundos. El tiempo de funcionamiento normal entre fallos es de meses.

Notas

  1. Ongaró, Diego; Ousterhout, John En busca de un algoritmo de consenso comprensible (enlace inaccesible) (2013). Consultado el 2 de septiembre de 2015. Archivado desde el original el 8 de septiembre de 2014. 
  2. Algoritmo de consenso de balsa (2014). Consultado el 29 de septiembre de 2017. Archivado desde el original el 29 de septiembre de 2017.

Enlaces