Clustering und Koordination — ohne Koordinator, den Sie betreiben müssen
Nodus ist ein schlanker Clustering- und Messaging-Kern, mit dem Ihr Service einem Peer-to-Peer-Cluster beitreten, sich auf einen Leader einigen, typisierte Nachrichten austauschen und Ausfälle erkennen kann — ohne externen Koordinator wie ZooKeeper, etcd oder Consul, den Sie aufsetzen, absichern oder am Laufen halten müssten. Es ist eine Bibliothek zum Einbetten, sodass sich der Cluster selbst bildet und selbst heilt.
Die schwierigen Teile beim Betrieb mehrerer Instanzen — gelöst und eingebettet
Sobald Ihre App als mehr als ein Prozess läuft, werden Mitgliedschaft, Koordination, Messaging und Fehlererkennung zu Problemen verteilter Systeme. Nodus liefert alle vier in einer einzigen Abhängigkeit, die in Ihrem Prozess läuft.
Peer-to-Peer-Mitgliedschaft
Nodes erkennen und akzeptieren sich gegenseitig aus einem statischen oder dynamischen Peer-Set. Beitritte und Austritte werden als Events bereitgestellt — ohne Registry-Service, den Sie betreiben müssen.
Leader-Election
Deterministische Bully-artige Strategien — höchste ID oder ältester Node — mit einem Epochenzähler und einem Tiebreaker für Kollisionen bei gleicher Epoche, sodass sich der Cluster auf genau einen Koordinator einigt.
Typisiertes Messaging
Senden Sie einen typisierten Payload punktuell, per Broadcast an jedes Mitglied, oder greifen Sie auf die rohe Wire-Nachricht für Korrelations-IDs und die Prioritätsebene zurück.
Request / Reply
Stellen Sie einem Node eine Frage und warten Sie auf eine typisierte Antwort, zugeordnet per Korrelations-ID, mit einem Timeout, den Sie selbst steuern.
Clusterweite Events
Ein typisierter Publish/Subscribe-Bus, getrennt vom direkten Messaging, der Lifecycle- und benutzerdefinierte Events an jedes Mitglied weitergibt.
Health- & Fehlererkennung
Heartbeats, Erreichbarkeit pro Peer und ein Verdachtsfenster halten die Mitgliedschaft korrekt — sie unterscheiden „langsam“ von „weg“, ohne zu flattern — und ein Gossip-Digest läuft über denselben Datenverkehr mit.
Nodes einigen sich — auch wenn sich der Cluster verändert
Jedes Mitglied führt dieselbe deterministische Wahl über dieselben erreichbaren Peers durch und wählt so unabhängig denselben Leader, ohne mehrstufige Abstimmung. Wenn ein Node beitritt oder der Leader ausfällt, wählen die verbleibenden Mitglieder neu und die Epoche rückt vor — so lässt sich ein veralteter Leader stets vom aktuellen unterscheiden.
- Ein einziger Einstiegspunkt baut den Container auf, tritt dem Cluster bei und liefert ein laufendes Handle zurück.
- Der Verlust des Leaders wird bei einem geordneten Austritt schnell erkannt, bei hartem Abbruch nach Ablauf des Verdachtsfensters.
- Jedes verbleibende Mitglied berechnet denselben neuen Leader, und die Epoche wird erhöht.
- Beim Dispose verlässt der Node den Cluster sauber, sodass Peers ihn zügig ausschließen und das Failover schnell erfolgt.
Überall dort, wo sich mehrere Prozesse einigen müssen
Greifen Sie zu Nodus, sobald Ihr Service als mehr als eine Instanz läuft und koordiniert werden muss — und es funktioniert schon heute mit Ihrer App.
Cluster-fähige Services bauen
Geben Sie jedem Service mit mehreren Instanzen einen Live-Überblick über seine Peers, einen gemeinsamen Leader und eine Möglichkeit, Mitglieder direkt anzusprechen — die Grundlage, auf der Zaris selbst clustert.
Leader-only-Singletons & Scheduler
Führen Sie einen Cron-ähnlichen Job auf genau einer Instanz aus, abgesichert über IsSelf, und lassen Sie automatisch ein verbleibendes Mitglied in einer höheren Epoche übernehmen, wenn der Leader ausfällt.
Fehlererkennung & selbstheilende Mitgliedschaft
Heartbeats und ein Verdachtsfenster schließen ausgefallene Peers aus und nehmen neue auf, sodass der Cluster auch bei Abstürzen und Neustarts korrekt bleibt.
Typisiertes Messaging & Request-Reply
Sprechen Sie einen bestimmten Peer an, senden Sie ihm Arbeit und warten Sie auf eine typisierte Antwort — oder senden Sie per Broadcast an alle — über einen persistenten, priorisierten Transport.
Cache- & Peer-Invalidierung
Senden Sie eine Eviction per Broadcast an jedes Mitglied, sobald sich ein Wert ändert, damit keine Instanz einen veralteten Eintrag ausliefert.
Arbeitsverteilung über Nodes hinweg
Lassen Sie einen Koordinator Arbeitspakete auf aktive Mitglieder verteilen und die Ergebnisse aggregieren — genau das, was das mitgelieferte Cluster-Coordination-Beispiel tut.
Einem Cluster beitreten und dem Leader folgen
Ein Einstiegspunkt baut den Node auf, tritt dem Cluster bei und liefert ein laufendes Handle zurück. Abonnieren Sie die Leadership und binden Sie Singleton-Arbeit an den Node, der führt.
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.