Clustering y coordinación, sin un coordinador que ejecutar
Nodus es un núcleo ligero de clustering y mensajería que permite que tu servicio se una a un clúster peer-to-peer, acuerde un líder, intercambie mensajes tipados y detecte fallos, sin un coordinador externo como ZooKeeper, etcd o Consul que levantar, proteger o mantener activo. Es una biblioteca que integras, de modo que el clúster se forma y se repara por sí mismo.
Las partes difíciles de ejecutar más de una instancia, resueltas e integradas
En el momento en que tu aplicación se ejecuta como más de un proceso, la membresía, la coordinación, la mensajería y la detección de fallos se convierten en problemas de sistemas distribuidos. Nodus incluye los cuatro en una sola dependencia que se ejecuta dentro de tu proceso.
Membresía peer-to-peer
Los nodos se descubren y se admiten entre sí a partir de un conjunto de pares estático o dinámico. Las incorporaciones y salidas se exponen como eventos, sin ningún servicio de registro que operar.
Elección de líder
Estrategias deterministas de estilo bully —mayor id o nodo más antiguo— con un contador de épocas y un criterio de desempate para colisiones de igual época, de modo que el clúster acuerda exactamente un coordinador.
Mensajería tipada
Envía una carga tipada punto a punto, difunde a cada miembro, o baja al mensaje de red en bruto para los ids de correlación y el plano de prioridad.
Solicitud / respuesta
Haz una pregunta a un nodo y espera una respuesta tipada, emparejada por id de correlación, con un tiempo de espera que tú controlas.
Eventos en todo el clúster
Un bus de publicación/suscripción tipado, distinto de la mensajería directa, que propaga eventos de ciclo de vida y personalizados a todos los miembros.
Salud y detección de fallos
Los latidos, la accesibilidad por par y una ventana de sospecha mantienen la membresía fiable —distinguiendo «lento» de «caído» sin oscilaciones— y un resumen de gossip viaja sobre el mismo tráfico.
Los nodos se ponen de acuerdo, incluso mientras el clúster cambia de forma
Cada miembro ejecuta la misma elección determinista sobre los mismos pares accesibles, de modo que escogen de forma independiente el mismo líder sin una votación de varias rondas. Cuando un nodo se une o el líder falla, los supervivientes reeligen y la época avanza, de modo que siempre se puede distinguir un líder obsoleto del actual.
- Un único punto de entrada construye el contenedor, se une al clúster y devuelve un identificador en ejecución.
- La pérdida del líder se detecta rápido ante una salida ordenada, o tras la ventana de sospecha ante una caída abrupta.
- Cada superviviente calcula el mismo nuevo líder y la época se incrementa.
- La disposición abandona el clúster de forma limpia para que los pares expulsen con prontitud y la conmutación por error sea rápida.
Dondequiera que un conjunto de procesos deba ponerse de acuerdo
Recurre a Nodus siempre que tu servicio se ejecute como más de una instancia y necesite coordinarse, y funciona con tu aplicación hoy mismo.
Crea servicios conscientes del clúster
Da a cualquier servicio de varias instancias una vista en vivo de sus pares, un líder compartido y una forma de enviar mensajes directamente a los miembros: la base sobre la que el propio Zaris se agrupa en clúster.
Singletons y planificadores solo en el líder
Ejecuta un trabajo tipo cron en exactamente una instancia, condicionado a IsSelf, y haz que un superviviente tome el relevo automáticamente en una época superior cuando el líder falla.
Detección de fallos y membresía autorreparable
Los latidos y una ventana de sospecha expulsan a los pares caídos y admiten nuevos, manteniendo el clúster preciso a través de caídas y reinicios.
Mensajería tipada y solicitud-respuesta
Dirígete a un par concreto, envíale trabajo y espera una respuesta tipada —o difunde a todos— sobre un transporte persistente y priorizado.
Caché e invalidación entre pares
Difunde una expulsión a cada miembro en el instante en que un valor cambia, de modo que ninguna instancia sirva una entrada obsoleta.
Distribución del trabajo entre nodos
Deja que un coordinador reparta fragmentos de trabajo entre los miembros activos y agregue los resultados: exactamente lo que hace el ejemplo de coordinación de clúster incluido.
Únete a un clúster y sigue al líder
Un punto de entrada construye el nodo, se une al clúster y devuelve un identificador en ejecución. Suscríbete al liderazgo y condiciona el trabajo singleton al nodo que lidera.
Read the docsusing Clustron.Nodus.Abstractions;
using Clustron.Nodus.Client;
// this process's slice of the cluster, resolved from a launch input
var self = config.Cluster.Nodes.Single(n => n.NodeId == myId);
await using INodusNode node = await NodusNode
.Configure(config)
.WithNodeIdentity(self)
.StartAsync();
// react the moment the cluster agrees on a coordinator
node.Leadership.Changed += (leader, epoch) =>
Console.WriteLine($"leader is now {leader.NodeId} (epoch {epoch})");
// run the singleton only where we lead
if (node.Leadership.IsSelf)
await RunTheSingletonJob();
Ready to build with Nodus?
Get started in minutes, or talk to us about your architecture.