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, incluido el registro de servicio simple, la comprobación de estado, la detección de errores y el almacenamiento de clave-valor. Se basa en la premisa de que cada nodo del centro de datos ejecuta un agente de Consul que actúa como servidor o cliente. Cada agente se comunica a través de un protocolo de chismes escalable.

Puede encontrar información general detallada sobre Consul, incluidas las comparaciones con soluciones similares, en ¿Qué es Consul?.

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?

Orleans Como proveedor de pertenencia, Consul es una buena opción para ofrecer soluciones locales que no requieren que los clientes tengan una infraestructura existente o un proveedor de TI cooperativo. Consul es un único ejecutable ligero sin dependencias, lo que facilita la compilación en una solución de middleware. Al usar Consul para descubrir, comprobar y mantener microservicios, integrarse completamente con la membresía de Orleans ofrece simplicidad y facilidad de operación. Consul también proporciona una tabla de pertenencia (también conocida como "Orleans Almacén de sistema personalizado") que se integra completamente con Orleansla administración de clústeres.

Configuración de Consul

La amplia documentación sobre cómo configurar un clúster de Consul estable está disponible en la documentación de Consul, de modo que la información no se repita aquí. Sin embargo, para mayor comodidad, en esta guía se muestra cómo ejecutar Orleans rápidamente con un agente de Consul independiente.

  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 servidor, no como cliente. (Un cliente de Consul es un agente que hospeda servicios y datos, pero carece de derechos de votación 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 asumir 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.

    Existen muchos otros parámetros, incluida la opción de usar un archivo de configuración JSON. Consulte la documentación de Consul para obtener una lista completa.

  5. Compruebe que Consul se está ejecutando y listo para aceptar solicitudes de pertenencia desde Orleans abriendo el endpoint 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 membresía, el proyecto de silo debe hacer referencia al paquete NuGet Microsoft.Orleans.Clustering.Consul. Después de agregar la referencia, configure el proveedor de pertenencia en el archivo Program.cs del 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 está interesado en usar Consul para la detección de servicios, los SDK de cliente están disponibles para los idiomas más populares.

Detalles de la implementación

El proveedor de tablas de pertenencia usa la funcionalidad de almacén de claves y valores de Consul con las operaciones check-And-Set (CAS). Cuando se inicia cada Silo, registra dos entradas clave-valor: una que contiene los detalles del Silo y otra que contiene la última vez que el Silo informó de que estaba en funcionamiento. Este último se refiere a registros de diagnóstico "Estoy vivo", no a latidos de detección de fallos, que se envían directamente entre silos y no se escriben en la tabla. Todas las escrituras en la tabla usan CAS para proporcionar el control de simultaneidad, como lo requiere Orleansel Protocolo de Administración de Clústeres.

Una vez que se ejecute el Silo, vea estas entradas en un explorador web en http://localhost:8500/v1/kv/?keys&pretty. La salida tiene un aspecto similar al siguiente:

[
    "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. Este prefijo está codificado de forma codificada en el proveedor y está pensado para evitar colisiones de espacios de claves con otros usuarios de Consul. Recupere información adicional para cada clave anexando su nombre (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
    }
]

La descodificación de la cadena Value codificada UTF-8 de Base64 proporciona 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 KVs para todos los silos del clúster en una solicitud HTTP GET mediante el URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Limitaciones

Tenga en cuenta algunas limitaciones al usar Consul como proveedor de pertenencia.

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

Consul KV no admite actualmente actualizaciones atómicas. Por lo tanto, el Orleans proveedor de pertenencia de Consul solo implementa el Orleans protocolo de pertenencia básico, como se describe en Administración de clústeres en Orleans. No admite el Protocolo de pertenencia extendida. Este protocolo extendido se introdujo como un adicional, aunque no esencial, para la validación de conectividad de silo, y como base para la funcionalidad aún no implementada.

Varios centros de datos

Los pares clave-valor de Consul no se replican actualmente entre los centros de datos de Consul. Existe un proyecto independiente para abordar este esfuerzo de replicación, pero aún no se ha demostrado que admite 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 aparece debido a la falta de foco en las pruebas cuando se ejecuta en un entorno de Windows, no debido a problemas conocidos reales. Lea la discusión antes de decidir si Consul es la opción correcta.

Posibles mejoras futuras

  1. Demuestre que el proyecto de replicación de Consul KV puede admitir un Orleans clúster 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 disponible esta funcionalidad, es posible quitar las limitaciones del proveedor.