Gossip es un protocolo de comunicación de datos utilizado en sistemas distribuidos, funciona de manera parecida a la expansión del contagio de una enfermedad o de un rumor, de persona a persona, ya que básicamente trabaja esparciendo un mensaje de nodo en nodo.

Algunas de las fortalezas de los protocolos gossip son:

  • Escalables en relación al trabajo que toma esparcir un mensaje por toda la red, aún cuando la cantidad de nodos instalados crezca.
  • Ningún nodo debería tener una función especial en la red, por lo que es fácil reemplazarlos si fuese necesario. De igual manera si se agrega o quita un nodo a la red esta no debería sufrir problemas.

Las redes que utilizan protocolos gossip son resistentes a los fallos de sus nodos y estos mismos pueden autónomamente dirigir sus mensajes a sus pares vivos, obviando los nodos que no estén respondiendo a los mensajes que les llegan. Por otro lado los protocolos gossip no necesariamente se encargan de manejar mensajes que llegan corruptos o incompletos, lo que se conoce como el problema de los generales bizantinos.

Cómo funciona

La red gossip está compuesta por “N nodos”, los cuales periódicamente se comunican entre sí. Cada nodo no necesariamente conoce al resto de los nodos de la red, por lo general solo saben de los más próximos. Estos deben ser capaces de encontrar sus pares.

Cada cierto tiempo un nodo elige al azar “M nodos” con el fin de enviar su mensaje(dato recogido), este proceso se repite en cada nodo llegando a la mayor cantidad de nodos disponibles en la red, hasta que idealmente todos los nodos tengan la información. Debido a la manera que difunden la información se dice que los protocolos gossip funcionan de manera parecida a la de una epidemia, considerando que cada mensaje es como la enfermedad y los nodos que reciben el mensaje los contagiados.

Además, los mensajes son enviados por cada nodo mientras se cumpla cierto criterio, por ejemplo un nodo puede enviar cierto mensaje durante 30 minutos o también puede existir un límite de veces que un nodo enviará un mensaje. Cuando se cumple este criterio el nodo deja de repetir el mensaje (se considera sano de la enfermedad).

Para asegurar un correcto funcionamiento de la red, es decir que los mensajes se esparzan correctamente por esta, se debe cumplir los siguiente:

  • Se debe seleccionar aleatoriamente a qué nodos se enviará cada mensaje (nodos pares), esto con el objetivo de evitar que el mismo nodo sea siempre el que reciba el flujo de los datos. La idea es que la carga se balancee por todos los pares disponibles.
  • Los nodos no necesitan conocer todo el estado de la red, solo basta con sus pares de nodos más cercanos.
  • Cada mensaje tiene un tamaño límite conocido por los nodos.

El tiempo que toma que un mensaje llegue al 100% de los nodos depende de los siguientes parámetros:

  1. Intervalo de tiempo entre que se envía cada mensaje.
  2. El total de nodos en la red.
  3. El porcentaje de mensajes que se pierden en cada comunicación.
  4. Cuantos nodos presentan problemas.
  5. A cuántos nodos se le enviará el mensaje en cada intervalo.

El siguiente gráfico muestra cómo el mensaje llega a más nodos a medida que pasa el tiempo, con 30 nodos en la red, se envía el mensaje a 3 pares cada 5 segundos, asumiendo que no hay nodos con fallas y que no se están perdiendo mensajes.

Simulador de convergencia del Protocolo Gossip

Fuente: https://www.serf.io/docs/internals/simulator.htm

También, se puede observar que toma algo de tiempo (30 segundos) en este caso para que un mensaje llegue a toda la red. Por este motivo se dice que las redes que utilizan protocolos gossip son eventualmente consistentes.

Quién utiliza protocolos Gossip.

Hashicorp Consul

Consul es un servicio para devOps que permite automatizar y comunicar programas que corren en diversos proveedores de la nube como aws o google cloud. Consul utiliza gossip para administrar y enviar mensaje entre cada uno de sus clusters de clientes.

Apache Cassandra

Cassandra es una base de datos NoSQL, distribuida que promete ser escalable, mantener alta disponibilidad y ser tolerante a los fallos. En cassandra los nodos se comunican entre sí utilizando un protocolo gossip. Luego de enviar un mensaje se espera a que el nodo receptor envíe una respuesta que indique recibió el mensaje correctamente, si esto no ocurre se considera al nodo como caído y el resto de sus pares periódicamente revisarán su estado para verificar si es que revivió. Mientras tanto no se le enviarán mensajes, de esta manera Cassandra detecta errores en los nodos de su red y automáticamente reacciona para rutear los mensajes sólo a sus nodos disponibles.

DynamoDB

AWS DynamoDB es una de datos NoSQL, serverless que permite cargas de 10 billones de consultas diarias. Al igual que Apache Cassandra, DynamoDB utiliza una red gossip para detectar nodos que no están disponibles para así balancear la carga entre el resto de pares y además asegurarse que toda la base de datos será eventualmente consistente, cuando los mensajes lleguen a toda la red.

Gossip en Octopull

La base de la plataforma Octopull es una red distribuida de sensores de diversos tipos, tales como clima, flujo de líquido o movimiento, entre otros. Estos sensores se comunican entre sí principalmente utilizando el protocolo de comunicación LoRa, el cual permite a dispositivos comunicarse a través de grandes distancias y requiriendo poca energía. Al final de la red se encuentra el gateway el cual se encarga de recibir los datos medidos por los sensores para luego subirlos a la nube.

Para asegurar la estabilidad, escalabilidad del sistema y disponibilidad de los datos Octopull utiliza una red gossip en la cual se encuentran sensores, gateway y nodos intermedios. De esta manera se asegura que los datos lleguen correctamente al gateway y se simplifica la instalación de nuevos nodos y sensores, los cuales deberían unirse a la red automáticamente.

Cada nodo en la red periódicamente busca a todos los pares que tienen disponibles, enviando un mensaje por LoRa, para luego poder elegir aleatoriamente algunos de estos para transmitirles un mensaje. Cada mensaje tiene un identificador único y lleva consigo un contador el cual indica la cantidad de veces que le quedan para ser repetido, de esta manera se evita llenar la red de mensajes antiguos. Utilizando el identificador único del mensaje se evita almacenar información duplicada en la base de datos.

El lograr que la red se comunique utilizando un protocolo gossip permite que la plataforma Octopull pueda escalar en el momento en que sea necesario agregar más nodos a la red y resiliente para adaptarse a problemas que puedan surgir.

Foto Hector Orellana

Escrito por:

Hector Orellana
Software Developer

OCTOPULL

Digitalizamos tu operación y tu planta