Partager via


Utiliser Consul comme fournisseur d’appartenances

Consul est une plateforme de découverte de services distribuée, hautement disponible et prenant en charge les centres de données, notamment l’inscription de service simple, la vérification de l’intégrité, la détection des défaillances 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.

Une vue d’ensemble détaillée de Consul, y compris les comparaisons avec des solutions similaires, est disponible dans Qu’est-ce que Consul ?.

Consul est écrit en 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’appartenancesOrleans, Consul est un bon choix pour fournir des solutions locales qui ne nécessitent pas que les clients disposent d’une infrastructure existante ou d’un fournisseur informatique coopératif. Consul est un exécutable unique et léger sans dépendances, ce qui facilite son intégration dans une solution de middleware. Lorsque vous utilisez Consul pour découvrir, vérifier et maintenir des microservices, l'intégration complète avec Orleans offre simplicité et facilité d'exploitation. Consul fournit également une table d’appartenance (également appelée «Orleans Magasin système personnalisé ») qui s’intègre entièrement à Orleansla gestion des clusters.

Configurer Consul

Une documentation approfondie sur la configuration d’un cluster Consul stable est disponible dans la documentation consul, afin que les informations ne soient pas répétées ici. Toutefois, pour des raisons pratiques, ce guide montre comment faire fonctionner rapidement Orleans avec un agent Consul autonome.

  1. Créez un dossier dans lequel installer Consul (par exemple, C :\Consul).

  2. Créez un sous-dossier : C :\Consul\Data (Consul ne crée pas ce répertoire s’il n’existe pas).

  3. Télécharger et décompresser Consul.exe dans C :\Consul.

  4. 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 : Charge Consul de faire fonctionner le processus de l'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 en tant que client. (Un client Consul est un agent hébergeant des services et des données, mais n’a pas de droits de vote et ne peut pas devenir le leader du cluster).
    • -bootstrap: Le premier nœud (et uniquement le premier !) d’un cluster doit être démarré pour assumer la direction du cluster.
    • -data-dir [path]: spécifie le chemin d’accès où toutes les données Consul, y compris la table d’appartenance au cluster, sont stockées.
    • -client='0.0.0.0': informe Consul de l’adresse IP sur laquelle ouvrir le service.

    De nombreux autres paramètres existent, notamment l’option permettant d’utiliser un fichier de configuration JSON. Consultez la documentation consul pour obtenir une liste complète.

  5. Vérifiez que Consul est en cours d'exécution et prêt à accepter les demandes d'appartenance de Orleans en ouvrant l'endpoint des services dans votre navigateur à 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 de membres, le projet de silo doit référencer le package NuGet Microsoft.Orleans.Clustering.Consul. Après avoir ajouté la référence, configurez le fournisseur d’appartenances dans le fichier Program.cs du 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 :

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 services, les kits SDK clients sont disponibles pour les langues les plus populaires.

Informations d’implémentation

Le fournisseur de tableau de membres utilise la fonctionnalité de magasin de clés/valeurs de Consul avec Check-And-Set (CAS). Lorsque chaque Silo démarre, il enregistre deux entrées clé-valeur : l'une contenant les détails du Silo et l'autre indiquant la dernière fois que le Silo a signalé qu'il était actif. Ce dernier fait référence aux entrées de diagnostic « I’m alive », et non aux signaux de détection d’échec, qui sont envoyés directement entre les silos et ne sont pas enregistrés dans la table. Toutes les écritures dans la table utilisent CAS pour fournir un contrôle de concurrence, comme requis par Orleans le protocole de gestion des clusters.

Une fois que le Silo s’exécute, affichez ces entrées dans un navigateur web à l’adresse http://localhost:8500/v1/kv/?keys&pretty. La sortie ressemble à ceci :

[
    "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éfixées par orleans. Ce préfixe est codé en dur dans le fournisseur et est destiné à éviter les collisions de keyspace avec d'autres utilisateurs de Consul. Récupérez des informations supplémentaires pour chaque clé en ajoutant son nom (sans guillemets) à la racine Consul KV à l’adresse http://localhost:8500/v1/kv/. Cela 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
    }
]

Le décodage de la chaîne Value encodée UTF-8 Base64 fournit les données d’appartenance réelles 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 KVS pour tous les silos du cluster dans une requête HTTP GET à l’aide de l’URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Limites

Tenez compte de quelques limitations lors de l’utilisation de Consul en tant que fournisseur d’appartenances.

Orleans protocole d’appartenance étendu (version de table et ETag)

Consul KV ne prend actuellement pas en charge les mises à jour atomiques. Par conséquent, le Orleans fournisseur d’appartenance Consul implémente uniquement le Orleans protocole d’appartenance de base, comme décrit dans la gestion du cluster dans Orleans. Il ne prend pas en charge le protocole d’appartenance étendue. Ce protocole étendu a été introduit comme une validation supplémentaire, bien que non essentielle, de la connectivité de silo et comme base pour les fonctionnalités non encore implémentées.

Plusieurs centres de données

Les paires clé-valeur dans Consul ne sont actuellement pas répliquées entre les centres de données Consul. Un projet distinct existe pour traiter cet effort de réplication, mais il n’a pas encore été prouvé pour prendre en charge 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.

Améliorations futures potentielles

  1. Prouvez que le projet de réplication Consul KV peut prendre en charge un Orleans cluster dans un environnement WAN entre plusieurs centres de données Consul.
  2. Implémentez la table de rappels dans Consul.
  3. Implémentez le protocole d’appartenance étendue. L’équipe derrière Consul prévoit d’implémenter des opérations atomiques. Une fois cette fonctionnalité disponible, la suppression des limitations dans le fournisseur peut être possible.