Clustering et coordination, sans coordinateur à exécuter
Nodus est un cœur léger de clustering et de messagerie qui permet à votre service de rejoindre un cluster pair-à-pair, de s'accorder sur un leader, d'échanger des messages typés et de détecter les pannes — sans coordinateur externe comme ZooKeeper, etcd ou Consul à déployer, sécuriser ou maintenir. C'est une bibliothèque que vous embarquez, de sorte que le cluster se forme et se répare de lui-même.
Les parties difficiles de l'exécution de plusieurs instances — résolues et embarquées
Dès que votre application s'exécute en plusieurs processus, l'appartenance, la coordination, la messagerie et la détection de pannes deviennent des problèmes de systèmes distribués. Nodus livre les quatre dans une seule dépendance qui s'exécute à l'intérieur de votre processus.
Appartenance pair-à-pair
Les nœuds se découvrent et s'admettent mutuellement à partir d'un ensemble de pairs statique ou dynamique. Les adhésions et les départs remontent sous forme d'événements, sans service de registre à exploiter.
Élection de leader
Des stratégies déterministes de type bully — plus grand id ou nœud le plus ancien — avec un compteur d'époque et un départage pour les collisions à époque égale, de sorte que le cluster s'accorde sur exactement un coordinateur.
Messagerie typée
Envoyez une charge utile typée en point à point, diffusez à chaque membre, ou descendez au message filaire brut pour les identifiants de corrélation et le plan de priorité.
Requête / réponse
Posez une question à un nœud et attendez une réponse typée, appariée par identifiant de corrélation, avec un timeout que vous contrôlez.
Événements à l'échelle du cluster
Un bus de publication/abonnement typé, distinct de la messagerie directe, qui propage les événements de cycle de vie et personnalisés à chaque membre.
Santé et détection de pannes
Les battements de cœur, la joignabilité par pair et une fenêtre de suspicion gardent l'appartenance honnête — distinguant « lent » de « parti » sans oscillation — et un condensé de gossip chevauche le même trafic.
Les nœuds s'accordent — même quand le cluster change de forme
Chaque membre exécute la même élection déterministe sur les mêmes pairs joignables, de sorte qu'ils choisissent indépendamment le même leader sans scrutin multi-tours. Quand un nœud rejoint ou que le leader tombe, les survivants réélisent et l'époque avance — de sorte qu'un leader obsolète peut toujours être distingué du leader actuel.
- Un point d'entrée unique construit le conteneur, rejoint le cluster et renvoie un handle en cours d'exécution.
- La perte du leader est détectée rapidement lors d'un départ gracieux, ou après la fenêtre de suspicion lors d'un arrêt brutal.
- Chaque survivant calcule le même nouveau leader et l'époque s'incrémente.
- La libération quitte le cluster proprement, afin que les pairs évincent promptement et que le basculement soit rapide.
Partout où un ensemble de processus doit s'accorder
Faites appel à Nodus dès que votre service s'exécute en plusieurs instances et doit se coordonner — et il fonctionne avec votre application dès aujourd'hui.
Construire des services conscients du cluster
Donnez à tout service multi-instances une vue en direct de ses pairs, un leader partagé et un moyen de communiquer directement avec les membres — la fondation sur laquelle Zaris lui-même se met en cluster.
Singletons et planificateurs réservés au leader
Exécutez une tâche de type cron sur exactement une instance, conditionnée à IsSelf, et laissez un survivant prendre le relais automatiquement à une époque supérieure quand le leader tombe.
Détection de pannes et appartenance auto-réparatrice
Les battements de cœur et une fenêtre de suspicion évincent les pairs morts et admettent les nouveaux, maintenant le cluster exact à travers les plantages et les redémarrages.
Messagerie typée et requête-réponse
Adressez un pair spécifique, envoyez-lui du travail et attendez une réponse typée — ou diffusez à tous — sur un transport persistant et priorisé.
Cache et invalidation entre pairs
Diffusez une éviction à chaque membre dès qu'une valeur change, afin qu'aucune instance ne serve une entrée obsolète.
Répartition du travail entre les nœuds
Laissez un coordinateur distribuer des lots de travail entre les membres actifs et agréger les résultats — exactement ce que fait l'exemple de coordination de cluster fourni.
Rejoindre un cluster et suivre le leader
Un point d'entrée construit le nœud, rejoint le cluster et renvoie un handle en cours d'exécution. Abonnez-vous au leadership et conditionnez le travail singleton au nœud qui dirige.
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.