Compartir a través de


Uso de Consul como proveedor de pertenencia

Consul es una plataforma de detección de servicios distribuida, de alta disponibilidad y compatible con el centro de datos que incluye un registro de servicio simple, comprobación de estado, detección de errores y almacenamiento de clave-valor. Se basa en la premisa de que cada nodo del centro de datos está ejecutando un agente de Consul que actúa como servidor o como cliente. Cada agente se comunica a través de un protocolo de chismes escalable.

Hay información general detallada de Consul, incluidas las comparaciones con soluciones similares aquí.

Consul está escrito en Go y es de código abierto; Las descargas compiladas están disponibles para macOS X, FreeBSD, Linux, Solaris y Windows.

¿Por qué elegir Consul?

Como proveedor de membresía Orleans, Consul es una buena opción cuando necesites ofrecer una solución local que no requiera que los clientes potenciales tengan infraestructura existente y un proveedor de TI cooperativo. Consul es un único ejecutable ligero, no tiene dependencias y, como tal, se puede integrar fácilmente en la solución de middleware. Cuando Consul es su solución para descubrir, comprobar y mantener los microservicios, tiene sentido integrarse completamente con la membresía de Orleans para simplificar y facilitar la operación. También existe una tabla de pertenencia en Consul (también conocida como " Orleans Custom System Store"), que se integra completamente con la administración de clústeres de Orleans.

Configuración de Consul

Hay una amplia documentación disponible en Consul.io sobre cómo configurar un clúster de Consul estable y no tiene sentido repetirlo aquí. Sin embargo, para su comodidad, incluimos esta guía para que pueda poner en marcha rápidamente Orleans con un agente independiente de Consul.

  1. Cree una carpeta para instalar Consul en (por ejemplo, C:\Consul).

  2. Cree una subcarpeta: C:\Consul\Data (Consul no crea este directorio si no existe).

  3. Descargar y descomprimir Consul.exe en C:\Consul.

  4. Abra una ventana de comandos en C:\Consul y ejecute el siguiente comando:

    ./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
    

    En el comando anterior:

    • agent: indica a Consul que ejecute el proceso del agente que hospeda los servicios. Sin este modificador, el proceso de Consul intenta usar RPC para configurar un agente en ejecución.
    • -server: define el agente como un servidor y no un cliente (un cliente de Consul es un agente que hospeda todos los servicios y datos, pero no tiene derechos de voto para decidir y no puede convertirse en el líder del clúster.
    • -bootstrap: el primer nodo (y solo el primero) de un clúster debe arrancarse para que asuma el liderazgo del clúster.
    • -data-dir [path]: especifica la ruta de acceso donde se almacenan todos los datos de Consul, incluida la tabla de pertenencia al clúster.
    • -client='0.0.0.0': informa a Consul en qué dirección IP se va a abrir el servicio.

    Hay muchos otros parámetros y la opción de usar un archivo de configuración JSON. Para obtener una lista completa de las opciones, consulte la documentación de Consul.

  5. Para comprobar que Consul se ejecuta y está listo para aceptar solicitudes de pertenencia de Orleans, abra el punto de conexión de servicios en el explorador en http://localhost:8500/v1/catalog/services. Cuando funciona correctamente, el explorador muestra el siguiente JSON:

    {
        "consul": []
    }
    

Configuración de Orleans

Para configurar Orleans para usar Consul como proveedor de pertenencia, el proyecto de silo deberá hacer referencia al paquete NuGet Microsoft.Orleans.Clustering.Consul. Una vez hecho esto, puede configurar el proveedor de pertenencia en el archivo Program.cs de su silo como se indica a continuación:

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();

El código anterior:

Para configurar el cliente, haga referencia al mismo paquete NuGet y llame al método de extensión UseConsulClientClustering.

SDK de cliente

Si le interesa usar Consul para la detección de servicios, hay SDK de cliente para los idiomas más populares.

Detalles de implementación

El proveedor de tablas de pertenencia usa la funcionalidad de almacén clave-valor de Consul con operaciones check-and-set (CAS). Cuando se inicia cada Silo, registra dos entradas de clave-valor, una que contiene los detalles del Silo y otra que contiene la última vez que el Silo informó de que estaba activo. Este último hace referencia a las entradas de diagnóstico "Estoy activo" y no a los latidos de detección de errores, que se envían directamente entre los silos y no se escriben en la tabla. Todas las escrituras en la tabla se realizan con CAS para proporcionar control de simultaneidad, como exige el protocolo de administración de clústeres de Orleans.

Una vez que se ejecuta el Silo, puede ver estas entradas en el explorador web en http://localhost:8500/v1/kv/?keys&pretty, que muestra algo parecido a:

[
    "orleans/default/192.168.1.11:11111@43165319",
    "orleans/default/192.168.1.11:11111@43165319/iamalive",
    "orleans/default/version"
]

Todas las claves tienen el prefijo orleans, que está codificado de forma rígida en el proveedor y está pensado para evitar la colisión de espacios de claves con otros usuarios de Consul. Puede usar cualquiera de estas claves para recuperar información adicional sobre cada una de estas claves y se puede leer anexando su nombre de clave (sin comillas) a la raíz de Consul KV en http://localhost:8500/v1/kv/. Al hacerlo, se presenta el siguiente código JSON:

[
    {
        "LockIndex": 0,
        "Key": "orleans/default/192.168.1.11:11111@43165319",
        "Flags": 0,
        "Value": "[BASE64 UTF8 Encoded String]",
        "CreateIndex": 321,
        "ModifyIndex": 322
    }
]

Al descodificar la cadena Value codificada en Base64 UTF-8, obtienes los datos de pertenencia reales 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"

Cuando los clientes se conectan, leen los KV de todos los silos del clúster en un HTTP GET mediante el URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse.

Limitaciones

Hay algunas limitaciones que debe tener en cuenta al usar Consul como proveedor de pertenencia.

Protocolo de pertenencia extendida de Orleans (versión de tabla y ETag)

Consul KV no admite actualmente actualizaciones atómicas. Por lo tanto, el proveedor de membresía Orleans Consul solo implementa el protocolo de membresía básico Orleans, como se describe en gestión de clústeres en Orleans, y no admite el Protocolo de Membresía Extendida. Este protocolo extendido se introdujo como una validación de conectividad de silo adicional, pero no esencial, y como base para funcionalidades que aún no se han implementado.

Varios centros de datos

Los pares clave-valor de Consul no se replican actualmente entre los centros de datos de Consul. Hay un proyecto independiente para abordar este trabajo de replicación, pero aún no se ha demostrado que sea compatible con Orleans.

Cuando se ejecuta en Windows

Cuando Consul se inicia en Windows, registra el siguiente mensaje:

==> WARNING: Windows is not recommended as a Consul server. Do not use in production.

Este mensaje de advertencia se muestra debido a la falta de foco en las pruebas cuando se ejecuta en un entorno de Windows y no debido a problemas conocidos reales. Lea la discusión antes de decidir si Consul es la opción adecuada para usted.

Posibles mejoras futuras

  1. Demuestre que el proyecto de replicación de Consul KV puede admitir un clúster de Orleans en un entorno WAN entre varios centros de datos de Consul.
  2. Implemente la tabla de recordatorio en Consul.
  3. Implemente el Protocolo de pertenencia extendida. El equipo detrás de Consul planea implementar operaciones atómicas, una vez que esta funcionalidad está disponible, es posible quitar las limitaciones del proveedor.