Konsul als Mitgliedschaftsanbieter verwenden
Konsul ist eine verteilte, hoch verfügbare und rechenzentrumsfähige Dienstermittlungsplattform, die einfache Dienstregistrierung, Integritätsprüfung, Fehlererkennung und Schlüsselwertspeicher umfasst. Es basiert auf der Premisse, dass jeder Knoten im Rechenzentrum einen Consul-Agent ausführt, der entweder als Server oder als Client fungiert. Jeder Agent kommuniziert über ein skalierbares Gossip-Protokoll.
Es gibt eine detaillierte Übersicht über Konsul, einschließlich Vergleiche mit ähnlichen Lösungen hier.
Konsul wird in Go geschrieben und ist Open Source; Kompilierte Downloads sind für macOS X, FreeBSD, Linux, Solaris und Windowsverfügbar.
Warum Konsul auswählen?
Als Orleans Mitgliedschaftsanbieterist Consul eine gute Wahl, wenn Sie eine lokale Lösung bereitstellen müssen, die nicht erfordert, dass Ihre potenziellen Kunden über vorhandene Infrastruktur oder einen kooperativen IT-Anbieter verfügen. Consul ist eine leichte, eigenständige ausführbare Datei, hat keine Abhängigkeiten und lässt sich daher problemlos in Ihre Middleware-Lösung integrieren. Wenn Consul Ihre Lösung für das Auffinden, Überprüfen und Verwalten Ihrer Microservices ist, ist es sinnvoll, vollständig in Orleans Mitgliedschaft integriert zu werden, um Einfachheit und Benutzerfreundlichkeit zu gewährleisten. Es gibt in Consul eine Mitgliedschaftstabelle (auch als „Benutzerdefinierter Systemspeicher von Orleans“ bezeichnet), die vollständig in die Clusterverwaltung von Orleans integriert ist.
Konsul einrichten
Es gibt umfangreiche Dokumentation zu Consul.io zum Einrichten eines stabilen Consul-Clusters, und es wäre nicht sinnvoll, dies hier zu wiederholen. Zu Ihrer Bequemlichkeit fügen wir diesen Leitfaden bei, damit Sie Orleans schnell mit einem eigenständigen Consul-Agenten starten können.
Erstellen Sie einen Ordner zum Installieren von Consul in (z. B. C:\Consul).
Erstellen Sie einen Unterordner: C:\Consul\Data (Konsul erstellt dieses Verzeichnis nicht, wenn es nicht vorhanden ist).
Laden Sie herunter, und entpacken Sie Consul.exe in C:\Consul.
Öffnen Sie eine Eingabeaufforderung unter C:\Consul, und führen Sie den folgenden Befehl aus:
./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
Im vorherigen Befehl:
-
agent
weist Consul an, den Agent-Prozess auszuführen, der die Dienste hostet. Ohne diesen Schalter versucht der Konsulprozess, RPC zum Konfigurieren eines ausgeführten Agents zu verwenden. -server
: Definiert den Agent als Server und nicht als Client (A Consul Client ist ein Agent, der alle Dienste und Daten hostet, aber keine Stimmrechte hat, um zu entscheiden, und kann nicht zum Clusterführer werden.-bootstrap
: Der erste (und nur der erste!) Knoten in einem Cluster muss initialisiert werden, damit er die Clusterführung übernimmt.-data-dir [path]
: Gibt den Pfad an, in dem alle Konsulendaten gespeichert sind, einschließlich der Clustermitgliedschaftstabelle.-client='0.0.0.0'
: Informiert den Konsul darüber, auf welcher IP der Dienst geöffnet werden soll.
Es gibt viele andere Parameter und die Option, eine JSON-Konfigurationsdatei zu verwenden. Eine vollständige Auflistung der Optionen finden Sie in der Konsuldokumentation.
-
Vergewissern Sie sich, dass Consul ausgeführt wird und bereit ist, Mitgliedschaftsanforderungen von Orleans anzunehmen, indem Sie unter
http://localhost:8500/v1/catalog/services
den Dienstendpunkt in Ihrem Browser öffnen. Wenn der Browser ordnungsgemäß funktioniert, zeigt der Browser die folgende JSON an:{ "consul": [] }
Konfigurieren von Orleans
Um Orleans für die Verwendung von Consul als Mitgliedschaftsanbieter zu konfigurieren, muss Ihr Siloprojekt auf das Microsoft.Orleans.Clustering.Consul NuGet-Paket verweisen. Nachdem Sie dies getan haben, können Sie den Mitgliedschaftsanbieter in der Program.cs Datei Ihres Silos wie folgt konfigurieren:
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleans(silo =>
{
silo.UseConsulSiloClustering(options =>
{
// The address of the Consul server
var address = new Uri("http://localhost:8500");
options.ConfigureConsulClient(address);
});
})
.UseConsoleLifetime();
using IHost host = builder.Build();
host.Run();
Der vorangehende Code:
- Erstellt einen IHostBuilder mit Standardwerten aus Host.CreateDefaultBuilder()
- Verkettet einen Aufruf von UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>), der das Orleans-Silo konfiguriert
- Ruft UseConsulSiloClustering mit dem ISiloBuilder auf
- Konfiguriert den Clustermitgliedschaftsanbieter für die Verwendung von Consul anhand der Consul-
address
Um den Client zu konfigurieren, verweisen Sie auf dasselbe NuGet-Paket, und rufen Sie die UseConsulClientClustering Erweiterungsmethode auf.
Client-SDK
Wenn Sie Consul für Ihre Dienstentdeckung verwenden möchten, gibt es Client-SDKs für die gängigsten Sprachen.
Implementierungsdetails
Der Mitgliedschaftstabellenanbieter nutzt die Schlüssel-Wert-Speicherfunktion von Consul mit Check-And-Set-Vorgängen (CAS). Beim Start jedes Silos werden zwei Schlüsselwerteinträge registriert: einer, der die Silo-Details enthält, und einer, der den Zeitpunkt enthält, zu dem das Silo zuletzt gemeldet hat, dass es am Leben ist. Letzteres bezieht sich auf Diagnoseeinträge zur Aktivität und nicht auf Heartbeats zur Fehlererkennung, die direkt zwischen den Silos gesendet und nicht in die Tabelle geschrieben werden. Alle Schreibvorgänge in die Tabelle erfolgen mithilfe von CAS, um Parallelitätssteuerung zu ermöglichen, wie dies vom Clusterverwaltungsprotokoll von Orleans verlangt wird.
Sobald der Silo aktiviert ist, können Sie diese Einträge in Ihrem Webbrowser unter http://localhost:8500/v1/kv/?keys&pretty
anzeigen. Dort wird etwa Folgendes angezeigt:
[
"orleans/default/192.168.1.11:11111@43165319",
"orleans/default/192.168.1.11:11111@43165319/iamalive",
"orleans/default/version"
]
Allen Schlüsseln wird das Präfix orleans
vorangestellt, das im Anbieter hartcodiert ist und zur Vermeidung von Keyspacekonflikten mit anderen Benutzer*innen von Consul dient. Sie können einen dieser Schlüssel verwenden, um zusätzliche Informationen abzurufen. Jeder dieser Schlüssel kann gelesen werden, indem Sie den Schlüsselnamen (ohne Anführungszeichen) an den Consul KV-Stamm unter http://localhost:8500/v1/kv/
anfügen. Dadurch wird Ihnen der folgende JSON-Code angezeigt:
[
{
"LockIndex": 0,
"Key": "orleans/default/192.168.1.11:11111@43165319",
"Flags": 0,
"Value": "[BASE64 UTF8 Encoded String]",
"CreateIndex": 321,
"ModifyIndex": 322
}
]
Durch Decodieren der base64 UTF-8-codierten Zeichenfolge Value
erhalten Sie die tatsächlichen Orleans Mitgliedschaftsdaten:
http://localhost:8500/v1/KV/orleans/default/[SiloAddress]
{
"Hostname": "[YOUR_MACHINE_NAME]",
"ProxyPort": 30000,
"StartTime": "2023-05-15T14:22:00.004977Z",
"Status": 3,
"SiloName": "Silo_fcad0",
"SuspectingSilos": []
}
http://localhost:8500/v1/KV/orleans/default/[SiloAddress]/IAmAlive
"2023-05-15T14:27:01.1832828Z"
Wenn die Clients eine Verbindung herstellen, lesen sie die KVs für alle Silos im Cluster in einem einzigen HTTP-GET mithilfe der URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse
.
Begrenzungen
Bei der Verwendung von Consul als Mitgliedschaftsanbieter müssen einige Einschränkungen beachtet werden.
Erweitertes Mitgliedschaftsprotokoll von Orleans (Tabellenversion & ETag)
Consul KV unterstützt derzeit keine atomaren Updates. Daher implementiert der Orleans Consul Membership Provider nur das Orleans grundlegende Mitgliedschaftsprotokoll, wie in Clusterverwaltung in Orleansbeschrieben, und unterstützt das Erweiterte Mitgliedschaftsprotokoll nicht. Dieses erweiterte Protokoll wurde als zusätzliche, aber nicht wesentliche Überprüfung der Silokonnektivität und als Grundlage für Funktionen eingeführt, die noch nicht implementiert wurden.
Mehrere Rechenzentren
Die Schlüssel-Wert-Paare in Consul werden derzeit nicht zwischen Consul-Datenzentren repliziert. Es gibt ein separates Projekt, um diese Replikation zu ermöglichen, aber die Unterstützung für Orleans wurde noch nicht nachgewiesen.
Wenn sie unter Windows ausgeführt wird
Wenn konsulul unter Windows gestartet wird, protokolliert es die folgende Meldung:
==> WARNING: Windows is not recommended as a Consul server. Do not use in production.
Diese Warnung ist auf die fehlende Konzentration auf Tests in einer Windows-Umgebung zurückzuführen und nicht auf bekannte Probleme. Lesen Sie die Diskussion, bevor Sie entscheiden, ob Konsul die richtige Wahl für Sie ist.
Mögliche zukünftige Verbesserungen
- Beweisen Sie, dass das Replikationsprojekt consul KV einen Orleans Cluster in einer WAN-Umgebung zwischen mehreren Konsulen-Rechenzentren unterstützen kann.
- Implementieren Sie die Erinnerungstabelle in Konsul.
- Implementieren Sie das Erweiterte Mitgliedschaftsprotokoll. Das Team hinter Consul plant die Implementierung von Atomoperationen, sobald diese Funktionalität verfügbar ist, ist es möglich, die Einschränkungen im Anbieter zu entfernen.