Está en la página 1de 6

Integrantes: Valeria De La Rosa R.

- 67000320

Juan David Montoya L. - 67000322

María Fernanda Valero P. - 67000328

Tema: Algoritmo de Consenso

Fecha: 22 de octubre de 2021

RAFT Consensus

Se realiza el uso de una biblioteca de RAFT consensus en este caso el


repositorio de dragonboat, el objetivo de estos algoritmos es proporcionar
tolerancia a fallos y permitiendo que el sistema continue funcionando mientras
los servidores siguen funcionando.

1. Hello World

Se realiza la ejecución del algoritmo habilitando el uso de las terminales y


el uso de los nodos indicados en la página de referencia GitHub donde
encontramos esta biblioteca Dragonboat.

Se puede evidenciar que en este caso el nodo N° 3 hace de servidor para


dicho algoritmo. Adicionalmente se puede notar que la comunicación se
puede realizar entre los nodos y todos van a recibir las peticiones y
contendrán de una instancia que realiza la actualización del conteo de las
peticiones realizadas por los distintos nodos.
En esta instancia se hace el reinicio de un nodo, en este mismo nodo
indicamos la adición al cluster de un nuevo puerto de escucha para el
algoritmo en proceso, una vez realizado el comando “add localhost:63100 4”
nos dirigimos a abrir una terminal nueva que contendrá parámetros como
“-join” para que así pueda comunicarse con el nodehost.

Realizamos pruebas de peticiones para evidenciar la interacción entre los


demás nodos del algoritmo.
Finalmente realizamos le remoción de este nodo que se agregó al cluster,
y hacemos la respectiva prueba de realizar una petición y que los demás
nodos interpreten el mensaje enviado en determinada terminal en uso.
2. State Machine

Para este ejemplo es necesaria la interfaz StateMachine para administrar


datos de aplicaciones, instancia que fue utilizada en el ejemplo anterior de
Helloworld.

Como primer paso implementamos los métodos Update y Lookup para


manejar las actualizaciones y consultas entrantes. En este ejemplo hay
un único entero para representar el estado de StateMachine denominado
Count, el cual se incrementa cada vez que se invoca Update.

En el método Update se van cargando las entradas con fines de


demostración, por otro lado, Lookup, es un método solo de lectura para
consultar en que estado se encuentra StateMachine. En este ejemplo
colocamos el valor Count en un segmento de byte y posteriormente se
retornó.

SaveSnapshot es un método únicamente de lectura por lo que no interfiere


en que cambie el estado del StateMachine, de igual forma se utiliza para
implementar operaciones de guardado y carga de instantáneas al igual
que RecoverFromSnapshot.
3. Multiple Raft Groups
Se inician tres instancias del programa de ejemplo en la misma máquina
pero en tres terminales diferentes usando el comando: “./example-
multigroup -nodeid 1”, se usa el mismo comando en los 3 ejemplos
cambiando el nodo que se identifica por los valores de NodeID
especificados en cada línea de comando.
Al igual que el ejemplo anterior de helloworld, se puede mandar un
mensaje en cada una de las terminales y dicho mensaje se retorna en los
otros nodos.
4. On Disk State Machine

En este ejemplo del dragonboat se abren las tres instancias y cuando se


produce la conexión entre ellas se puede modificar el valor asignado en el
cluster con el comando put key (value), para verificar que se haya
modificado se puede obtener en los otros nodos la llave que esta
almacenada con el comando get key.

La diferencia que se presenta entre este ejemplo y los anteriores es que


en este no se generan peticiones entre cada uno de los nodos, pero estos
si pueden modificar el valor almacenado.

También podría gustarte