Utiliser Consul comme fournisseur d’appartenances
Consul est une plateforme de découverte de services distribuée, hautement disponible et compatibles avec les centres de données, qui inclut l’inscription simplifiée des services, la vérification de l’intégrité, la détection de pannes et le stockage clé-valeur. Il est basé sur le principe que chaque nœud du centre de données exécute un agent Consul agissant en tant que serveur ou client. Chaque agent communique via un protocole de bavardage évolutif.
Il existe une vue d’ensemble détaillée de Consul, y compris les comparaisons avec des solutions similaires ici.
Consul est écrit dans Go et est open source ; Les téléchargements compilés sont disponibles pour macOS X, FreeBSD, Linux, Solaris et Windows.
Pourquoi choisir Consul ?
En tant que fournisseur d’appartenances Orleans, Consul est un bon choix lorsque vous devez fournir une solution locale qui ne nécessite pas que vos clients potentiels disposent d’une infrastructure existante et d’un fournisseur informatique coopératif. Consul est un exécutable unique léger, n’a pas de dépendances et, par conséquent, peut être facilement intégré à votre solution d’intergiciel. Lorsque Consul est votre solution pour découvrir, vérifier et maintenir vos microservices, il est judicieux de s’intégrer entièrement à l'adhésion Orleans pour simplifier et faciliter l'utilisation. Il existe également une table d’appartenance dans Consul (également appelée « magasin de système personnalisé Orleans »), qui s’intègre entièrement à la gestion de clusters d’Orleans.
Configurer Consul
Il existe une documentation complète disponible sur Consul.io sur la configuration d’un cluster Consul stable, et il n’est pas judicieux de répéter cela ici. Toutefois, pour votre commodité, nous incluons ce guide afin que vous puissiez rapidement faire fonctionner Orleans avec un agent Consul autonome.
Créez un dossier dans lequel installer Consul (par exemple, C :\Consul).
Créez un sous-dossier : C :\Consul\Data (Consul ne crée pas ce répertoire s’il n’existe pas).
Télécharger et décompresser Consul.exe dans C :\Consul.
Ouvrez une invite de commandes à C :\Consul et exécutez la commande suivante :
./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
Dans la commande précédente :
-
agent
: indique à Consul d’exécuter le processus d’agent qui héberge les services. Sans ce commutateur, le processus Consul tente d’utiliser RPC pour configurer un agent en cours d’exécution. -server
: définit l’agent en tant que serveur et non un client (Un consul client est un agent qui héberge tous les services et données, mais qui n’a pas les droits de vote à décider et ne peut pas devenir le responsable du cluster.-bootstrap
: le premier nœud (et seulement le premier !) d’un cluster doit être démarré afin qu’il assume la direction du cluster.-data-dir [path]
: spécifie le chemin d’accès où toutes les données Consul sont stockées, y compris la table d’appartenance au cluster.-client='0.0.0.0'
: informe Consul sur quelle adresse IP ouvrir le service.
Il existe de nombreux autres paramètres et l’option permettant d’utiliser un fichier de configuration JSON. Pour obtenir une liste complète des options, consultez la documentation consul.
-
Vérifiez que Consul est en cours d’exécution et prêt à accepter les demandes d’appartenance depuis Orleans en ouvrant le point de terminaison des services dans votre navigateur à l’adresse
http://localhost:8500/v1/catalog/services
. Lorsque vous fonctionnez correctement, le navigateur affiche le code JSON suivant :{ "consul": [] }
Configurer Orleans
Pour configurer Orleans pour utiliser Consul en tant que fournisseur d’appartenances, votre projet de silo doit référencer le package NuGet Microsoft.Orleans.Clustering.Consul. Une fois que vous avez terminé, vous pouvez configurer le fournisseur d’appartenances dans le fichier Program.cs de votre silo comme suit :
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();
Code précédent :
- Crée une IHostBuilder avec des valeurs par défaut basées sur l’Host.CreateDefaultBuilder().
- Chaîne un appel à UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) qui configure le silo Orleans.
- Étant donné que ISiloBuilder appelle UseConsulSiloClustering.
- Configure le fournisseur d’appartenance de cluster pour utiliser Consul, selon l’
address
Consul.
Pour configurer le client, référencez le même package NuGet et appelez la méthode d’extension UseConsulClientClustering.
Kit de développement logiciel (SDK) client
Si vous souhaitez utiliser Consul pour la découverte de votre service, il existe Kits de développement logiciel (SDK) clients pour les langues les plus populaires.
Détails de l’implémentation
Le fournisseur de tables d’appartenance utilise la fonctionnalité de magasin de données clé-valeur de Consul avec les opérations CAS (Vérifier et définir). Lorsque chaque Silo démarre, il inscrit deux entrées clé-valeur, une qui contient les détails du silo et l’autre qui contient la dernière fois que le silo a signalé qu’il était actif. Ce dernier fait référence aux entrées de diagnostic « Je suis vivant » et non aux pulsations de détection de défaillances, qui sont envoyées directement entre les silos et ne sont pas écrites dans la table. Toutes les écritures dans la table sont effectuées avec CAS pour fournir un contrôle d’accès concurrentiel, comme le nécessite le protocole de gestion des clusters d’Orleans.
Une fois que le Silo est en cours d’exécution, vous pouvez afficher ces entrées dans votre navigateur web à l’adresse http://localhost:8500/v1/kv/?keys&pretty
, qui affiche similaire à ça :
[
"orleans/default/192.168.1.11:11111@43165319",
"orleans/default/192.168.1.11:11111@43165319/iamalive",
"orleans/default/version"
]
Toutes les clés sont précédées du terme orleans
, codées en dur par le fournisseur et visant à éviter les collisions dans l’espace de clés avec d’autres utilisateurs de Consul. Vous pouvez utiliser l’une de ces clés pour récupérer des informations supplémentaires sur chacune de ces clés en ajoutant leur nom de clé (sans guillemets) à la racine Consul KV à l’adresse http://localhost:8500/v1/kv/
. Cela vous présente le code JSON suivant :
[
{
"LockIndex": 0,
"Key": "orleans/default/192.168.1.11:11111@43165319",
"Flags": 0,
"Value": "[BASE64 UTF8 Encoded String]",
"CreateIndex": 321,
"ModifyIndex": 322
}
]
En décodant la chaîne encodée en Base64 UTF-8 Value
, vous obtenez les véritables données d'appartenance Orleans :
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"
Lorsque les clients se connectent, ils lisent les KV pour tous les silos du cluster dans une requête HTTP GET au moyen de l’URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse
.
Limitations
Il existe quelques limitations à prendre en compte lors de l’utilisation de Consul en tant que fournisseur d’appartenances.
protocole d’appartenance étendu Orleans (version de table et ETag)
Consul KV ne prend actuellement pas en charge les mises à jour atomiques. Par conséquent, le fournisseur d’appartenance Orleans Consul implémente uniquement le protocole d’appartenance de base Orleans, comme décrit dans Gestion du cluster dans Orleanset ne prend pas en charge le protocole d’appartenance étendu. Ce protocole étendu a été introduit comme une validation supplémentaire, mais pas essentielle, de connectivité de silo et comme base pour les fonctionnalités qui n’ont pas encore été implémentées.
Plusieurs centres de données
Les paires clé-valeur dans Consul ne sont pas répliquées actuellement entre les centres de données Consul. Il y a un projet distinct pour aborder cet effort de réplication, mais il n’a pas encore été prouvé qu'il puisse soutenir Orleans.
Lors de l’exécution sur Windows
Lorsque Consul démarre sur Windows, il enregistre le message suivant :
==> WARNING: Windows is not recommended as a Consul server. Do not use in production.
Ce message d’avertissement s’affiche en raison d’un manque de focus sur le test lors de l’exécution dans un environnement Windows et non en raison de problèmes connus réels. Lisez la discussion avant de décider si Consul est le bon choix pour vous.
Améliorations futures potentielles
- Prouvez que le projet de réplication Consul KV peut prendre en charge un cluster Orleans dans un environnement WAN entre plusieurs centres de données Consul.
- Implémentez la table de rappels dans Consul.
- Implémentez le protocole d’appartenance étendue. L’équipe derrière Consul planifie l’implémentation d’opérations atomiques, une fois que cette fonctionnalité est disponible, il est possible de supprimer les limitations du fournisseur.