Consul gebruiken als lidmaatschapsprovider
Consul is een gedistribueerd, maximaal beschikbaar en datacentrumbewust servicedetectieplatform dat eenvoudige serviceregistratie, statuscontrole, foutdetectie en sleutelwaardeopslag omvat. Het is gebaseerd op het uitgangspunt dat elk knooppunt in het datacenter een Consul-agent uitvoert die fungeert als een server of client. Elke agent communiceert via een schaalbaar geruchtenprotocol.
Er is een gedetailleerd overzicht van Consul inclusief vergelijkingen met vergelijkbare oplossingen hier.
Consul is geschreven in Go en is open source; gecompileerde downloads zijn beschikbaar voor macOS X, FreeBSD, Linux, Solaris en Windows.
Waarom kiezen voor Consul?
Als Orleans lidmaatschapsprovider, is Consul een goede keuze wanneer u een on-premises oplossing moet leveren waarvoor uw potentiële klanten geen bestaande infrastructuur en een coöperatieve IT-provider hoeven te hebben. Consul is een lichtgewicht uitvoerbaar bestand, heeft geen afhankelijkheden en kan als zodanig eenvoudig worden ingebouwd in uw middleware-oplossing. Wanneer Consul uw oplossing is voor het ontdekken, controleren en onderhouden van uw microservices, is het zinvol om volledig te integreren met Orleans lidmaatschap voor eenvoud en gebruiksgemak. Er bestaat ook een lidmaatschapstabel in Consul (ook wel bekend als "Orleans Custom System Store"), die volledig kan worden geïntegreerd met Orleansclusterbeheer.
Consul instellen
Er is uitgebreide documentatie beschikbaar over Consul.io over het opzetten van een stabiel Consul-cluster, en het is niet logisch om dat hier te herhalen. Voor uw gemak nemen we deze gids echter op, zodat u Orleans snel aan de slag kunt laten werken met een zelfstandige Consul-agent.
Maak een map om Consul in te installeren (bijvoorbeeld C:\Consul).
Maak een submap: C:\Consul\Data (Consul maakt deze map niet als deze niet bestaat).
Download en pak Consul.exe uit in C:\Consul.
Open een opdrachtprompt op C:\Consul en voer de volgende opdracht uit:
./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
In de voorgaande opdracht:
-
agent
: Instrueert Consul om het agentproces uit te voeren dat als host fungeert voor de services. Zonder deze switch probeert het Consul-proces RPC te gebruiken om een actieve agent te configureren. -
-server
: Definieert de agent als een server en niet als een client (A Consul client is een agent die als host fungeert voor alle services en gegevens, maar geen stemrecht heeft om te beslissen en niet kan worden, de clusterleider. -
-bootstrap
: Het eerste (en alleen het eerste!) knooppunt in een cluster moet ge-bootstrapped worden, zodat het de leidersrol van het cluster op zich neemt. -
-data-dir [path]
: Hiermee geeft u het pad op waar alle Consul-gegevens worden opgeslagen, inclusief de tabel clusterlidmaatschap. -
-client='0.0.0.0'
: Informeert Consul op welk IP-adres de dienst moet worden geopend.
Er zijn veel andere parameters en de optie om een JSON-configuratiebestand te gebruiken. Zie de Consul-documentatie voor een volledig overzicht van de opties.
-
Controleer of Consul wordt uitgevoerd en klaar is om lidmaatschapsaanvragen van Orleans te accepteren door het service-eindpunt in uw browser te openen op
http://localhost:8500/v1/catalog/services
. Wanneer de browser correct werkt, wordt de volgende JSON weergegeven:{ "consul": [] }
Orleans configureren
Als u Orleans wilt configureren voor het gebruik van Consul als lidmaatschapsprovider, moet uw siloproject verwijzen naar de Microsoft.Orleans. Clustering.Consul NuGet-pakket. Zodra u dat hebt gedaan, kunt u de lidmaatschapsprovider als volgt configureren in het Program.cs bestand van uw silo:
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();
De voorgaande code:
- Hiermee maakt u een IHostBuilder met standaardwaarden op basis van de Host.CreateDefaultBuilder().
- Koppelt een aanroep aan UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) die de Orleans silo configureert.
- Gezien ISiloBuilderUseConsulSiloClusteringroept.
- Hiermee configureert u de clusterlidmaatschapsprovider voor het gebruik van Consul, gezien de Consul-
address
.
Als u de client wilt configureren, verwijst u naar hetzelfde NuGet-pakket en roept u de UseConsulClientClustering-extensiemethode aan.
Client-SDK
Als u consul wilt gebruiken voor uw servicedetectie, zijn er client-SDK's voor de populairste talen.
Implementatiedetail
De lidmaatschapstabelprovider maakt gebruik van Consul's sleutel-/waardearchief functionaliteit met cas-bewerkingen (Check-And-Set). Wanneer elke Silo wordt gestart, registreert het twee sleutelwaardeparen: een vermelding die de Silo-details bevat en een die de laatste keer vastlegt dat de Silo heeft gerapporteerd dat het actief was. Het laatstgenoemde verwijst naar diagnostische vermeldingen met 'Ik leef' en niet naar heartbeats voor foutdetectie, die rechtstreeks tussen de silo's worden verzonden en niet in de tabel worden geschreven. Alle schrijfbewerkingen naar de tabel worden uitgevoerd met CAS om gelijktijdigheidsbeheer te bieden, zoals nodig is voor OrleansCluster Management Protocol.
Zodra de Silo draait, kunt u deze invoeringen bekijken in uw webbrowser op http://localhost:8500/v1/kv/?keys&pretty
, die er ongeveer zo uitziet:
[
"orleans/default/192.168.1.11:11111@43165319",
"orleans/default/192.168.1.11:11111@43165319/iamalive",
"orleans/default/version"
]
Alle sleutels worden voorafgegaan door orleans
, die vastgelegd is in de provider en is bedoeld om keyspace-conflicten met andere gebruikers van Consul te voorkomen. U kunt elk van deze sleutels gebruiken om aanvullende informatie op te halen. Elk van deze sleutels kan worden gelezen door hun sleutelnaam (zonder aanhalingstekens) toe te voegen aan de Consul KV-hoofdmap op http://localhost:8500/v1/kv/
. Als u dit doet, krijgt u de volgende JSON:
[
{
"LockIndex": 0,
"Key": "orleans/default/192.168.1.11:11111@43165319",
"Flags": 0,
"Value": "[BASE64 UTF8 Encoded String]",
"CreateIndex": 321,
"ModifyIndex": 322
}
]
Door de met Base64 UTF-8 gecodeerde tekenreeks te decoderen Value
krijgt u de werkelijke Orleans lidmaatschapsgegevens:
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"
Wanneer de clients verbinding maken, lezen ze de KV's voor alle silo's in het cluster in één HTTP GET-aanroep met behulp van de URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse
.
Beperkingen
Er zijn enkele beperkingen waar u rekening mee moet houden bij het gebruik van Consul als lidmaatschapsprovider.
Orleans uitgebreid lidmaatschapsprotocol (tabelversie & ETag)
Consul KV biedt momenteel geen ondersteuning voor atomische updates. Daarom implementeert de Orleans Consul-lidmaatschapsprovider alleen het Orleans basislidmaatschapsprotocol, zoals beschreven in Clusterbeheer in Orleansen biedt geen ondersteuning voor het uitgebreide lidmaatschapsprotocol. Dit uitgebreide protocol is geïntroduceerd als extra, maar niet essentieel, siloconnectiviteitsvalidatie en als basis voor functionaliteit die nog niet is geïmplementeerd.
Meerdere datacenters
De sleutel-waardeparen in Consul worden momenteel niet gerepliceerd tussen Consul-datacenters. Er is een afzonderlijk project om deze replicatie-inspanning aan te pakken, maar het is nog niet bewezen dat het Orleansondersteunt.
Bij uitvoering in Windows
Wanneer Consul in Windows start, wordt het volgende bericht vastgelegd:
==> WARNING: Windows is not recommended as a Consul server. Do not use in production.
Dit waarschuwingsbericht wordt weergegeven vanwege een gebrek aan focus op testen bij het uitvoeren in een Windows-omgeving en niet vanwege werkelijke bekende problemen. Lees de discussie voordat u beslist of Consul de juiste keuze voor u is.
Mogelijke toekomstige verbeteringen
- Bewijs dat het Consul KV-replicatieproject een Orleans cluster in een WAN-omgeving tussen meerdere Consul-datacenters kan ondersteunen.
- Implementeer de herinneringstabel in Consul.
- Implementeer het uitgebreide lidmaatschapsprotocol. Het team achter Consul plant de implementatie van atomische bewerkingen, zodra deze functionaliteit beschikbaar is, is het mogelijk om de beperkingen in de provider te verwijderen.