Saltar al contenido principal
Arquitectura

Un clúster que se coordina a sí mismo

Nodus es un núcleo de clustering y mensajería que incorporas en tu proceso. Cada miembro ejecuta las mismas capas sobre un transporte compartido — de modo que la membresía, el liderazgo y la mensajería emergen de los propios nodos, sin un coordinador externo que operar.

La forma que tiene

Pares, no un coordinador

Cada miembro mantiene una conexión persistente con todos los pares y ejecuta las mismas cuatro capas. No hay un nodo privilegiado del que dependan los demás — el líder es simplemente el miembro que todos eligen.

Tu servicio — un proceso por miembroNodus es una biblioteca que incorporas · sin coordinador externo que ejecutarCLÚSTER ENTRE PARES · cada miembro ejecuta las mismas capasnode-1LÍDER · época 3TransporteMembresíaCoordinaciónMensajeríanode-2seguidorTransporteMembresíaCoordinaciónMensajeríanode-3seguidorTransporteMembresíaCoordinaciónMensajeríalatidos · resumen de gossip · mensajes tipados — una conexión persistente por par
Las capas

Cuatro capas, una sola dependencia

Las partes difíciles de ejecutar más de una instancia — resueltas una vez e incorporadas, para que escribas código de aplicación, no la fontanería de los sistemas distribuidos.

Transporte

Conexiones persistentes y priorizadas

Una conexión de larga duración con cada par transporta todos los planos — membresía, mensajería, eventos y salud — con un carril prioritario para que el tráfico de control nunca quede desplazado por las cargas masivas.

Membresía

Quién está en el clúster, en este momento

Los nodos se admiten entre sí a partir de un conjunto de pares y mantienen una lista de miembros en vivo. Las altas y bajas se exponen como eventos; un resumen de gossip viaja sobre el tráfico existente para reconciliar las vistas sin un servicio de registro.

Coordinación

Elección de líder determinista

Cada miembro ejecuta la misma elección sobre los mismos pares alcanzables y elige de forma independiente al mismo líder — sustentada en un contador de época, de modo que un líder obsoleto siempre se distingue del actual.

Mensajería

Punto a punto tipado, difusión y eventos

Envía una carga tipada a un par o a todos ellos, espera una respuesta tipada emparejada por correlation id, o publica en un bus de eventos de todo el clúster — todo sobre el mismo transporte.

La apuesta de diseño

Sin coordinador externo, por diseño

  • Sin ZooKeeper, etcd ni ConsulLa coordinación vive dentro de tu proceso como una biblioteca. No hay un servicio de quórum externo que levantar, proteger, actualizar o mantener con vida — un sistema distribuido menos que operar.
  • Cada nodo ejecuta la misma lógicaNo hay un proceso coordinador especial. Cada miembro calcula la membresía y el liderazgo a partir de las mismas entradas, de modo que el clúster sigue funcionando mientras los miembros puedan comunicarse entre sí.
  • Se forma y se repara soloLos nodos descubren pares, acuerdan un líder y vuelven a converger tras altas, bajas y fallos por sí mismos — el clúster es una propiedad emergente de los miembros, no un servicio del que dependen.
Épocas

Liderazgo sustentado en una época

Cada resultado de elección se sella con una época que aumenta de forma monótona. Cuando un nodo se une o el líder falla, los supervivientes vuelven a elegir y la época avanza — de modo que un mensaje o reclamo de un líder obsoleto siempre puede distinguirse del actual, y la conmutación por error nunca deja a dos nodos creyendo cada uno que lidera.

  • Estrategia determinista — mayor id o nodo más antiguo — sobre los mismos pares alcanzables
  • Un criterio de desempate resuelve las colisiones de igual época en exactamente un líder
  • La época se incrementa en cada cambio, de modo que el liderazgo siempre es ordenable

Míralo funcionar en tu propio servicio

Incorpora Nodus, únete a un clúster y sigue al líder en unas pocas líneas — luego lee cómo la membresía y la detección de fallos lo mantienen honesto.