Поделиться через


Использование Consul в качестве поставщика членства

Consul — это распределенная, высокодоступная и поддерживающая работу с центрами обработки данных платформа обнаружения служб, включая простую регистрацию служб, проверку работоспособности, выявление сбоев и хранилище пар ключ-значение. Он построен на предпосылке, что каждый узел в центре обработки данных запускает агент Consul, который действует как сервер или клиент. Каждый агент взаимодействует через масштабируемый протокол обмена сообщениями.

Подробный обзор Consul, в том числе сравнения с аналогичными решениями, доступен в статье "Что такое Consul?".

Consul написан в Go и является открытым исходным кодом. Скомпилированные скачиваемые файлы доступны для macOS X, FreeBSD, Linux, Solaris и Windows.

Почему выбираете консула?

Orleans Как поставщик членства, Consul является хорошим выбором для доставки локальных решений, которые не требуют от клиентов существующей инфраструктуры или совместного ИТ-поставщика. Consul — это легковесный, одинарный исполняемый файл без зависимостей, что облегчает интеграцию в промежуточное программное решение. При использовании Consul для обнаружения, проверки и обслуживания микрослужб полная интеграция с Orleans членством обеспечивает простоту и легкость работы. Consul также предоставляет таблицу членства (также известную какOrleans Custom System Store), которая полностью интегрируется с Orleansуправлением кластерами.

Настройка Consul

Обширная документация по настройке стабильного кластера Consul доступна в документации consul, чтобы информация не повторялась здесь. Однако для удобства в этом руководстве показано, как быстро запустить Orleans с автономным агентом Consul.

  1. Создайте папку для установки Consul в (например, C:\Consul).

  2. Создайте вложенную папку: C:\Consul\Data (Consul не создает этот каталог, если он не существует).

  3. Скачайте и распакуйте Consul.exe в C:\Consul.

  4. Откройте командную строку C:\Consul и выполните следующую команду:

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

    В приведенной выше команде:

    • agent: указывает consul запустить процесс агента, в котором размещаются службы. Без этого параметра процесс Consul пытается использовать RPC для настройки работающего агента.
    • -server: определяет агент как сервер, а не клиент. (Клиент Consul является агентом, который размещает сервисы и данные, но не имеет прав голоса и не может стать лидером кластера).
    • -bootstrap: первый (и только первый!) узел в кластере должен быть загружен, чтобы принять руководство в кластере.
    • -data-dir [path]: указывает путь, в котором хранятся все данные Consul, включая таблицу членства в кластере.
    • -client='0.0.0.0': сообщает консулу, на какой IP-адрес нужно открыть службу.

    Существует множество других параметров, включая параметр использования файла конфигурации JSON. Полный список см. в документации Consul.

  5. Убедитесь, что Consul запущен и готов принять запросы на членство, затем Orleans откройте в браузере конечную точку служб по адресу http://localhost:8500/v1/catalog/services. При правильном функционировании в браузере отображается следующий код JSON:

    {
        "consul": []
    }
    

Настройка Orleans

Чтобы настроить Orleans для использования Consul в качестве поставщика членства, проект Silo должен подключить пакет Microsoft.Orleans.Clustering.Consul NuGet. После добавления ссылки настройте поставщика членства в silo в файле Program.cs следующим образом:

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

Предыдущий код:

Чтобы настроить клиент, используйте тот же пакет NuGet и вызовите метод расширения UseConsulClientClustering.

Клиентский пакет SDK

Если вы хотите использовать Consul для обнаружения служб, пакеты SDK клиента доступны для большинства популярных языков.

Сведения о реализации

Поставщик таблиц членства использует функциональность хранилища ключей и значений Consul с помощью операций Check-And-Set (CAS). Когда начинается каждый Silo, он регистрирует две записи с ключом-значением: одна из которых содержит сведения о Silo, и одна, хранящая последнее время, когда Silo сообщил, что он был жив. Последний относится к записям диагностики "Я жив", а не к сигналам обнаружения сбоев, отправляемым непосредственно между силосами и не записывающимся в таблицу. Все записи в таблицу используют CAS для обеспечения управления параллелизмом, как это требуется Orleansпротоколом управления кластером.

После запуска Silo просмотрите эти записи в веб-браузере http://localhost:8500/v1/kv/?keys&pretty. Выходные данные выглядят примерно так:

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

Все ключи имеют префикс orleans. Этот префикс жёстко задан в поставщике и предназначен для предотвращения конфликтов в пространстве ключей с другими пользователями Consul. Получите дополнительные сведения для каждого ключа, добавляя его имя (без кавычек) в корневой каталог Consul KV на http://localhost:8500/v1/kv/. Для этого представлен следующий код JSON:

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

Декодирование строки Value кодировки Base64 UTF-8 предоставляет фактические 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"

При подключении клиентов они считывают ключевые показатели эффективности для всех силосов в кластере в одном HTTP-запросе GET с помощью URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Ограничения

Помните о нескольких ограничениях при использовании Consul в качестве поставщика членства.

Orleans расширенный протокол членства (версия таблицы и ETag)

Consul KV в настоящее время не поддерживает атомарные обновления. Orleans Поэтому поставщик членства consul реализует только базовый Orleans протокол членства, как описано в Orleansразделе "Управление кластерами". Он не поддерживает протокол расширенного членства. Этот расширенный протокол был представлен как дополнительный, хотя и не обязательный, для проверки подключения силосов и в качестве основы для функциональных возможностей, которые еще не реализованы.

Несколько центров обработки данных

Пары "ключ-значение" в Consul в настоящее время не реплицируются между центрами обработки данных Consul. Отдельный проект существует для решения этой задачи репликации, но он еще не был проверен для поддержкиOrleans.

При запуске в Windows

При запуске Consul в Windows он записывает следующее сообщение:

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

Это предупреждение появляется из-за отсутствия фокуса на тестировании при запуске в среде Windows, а не из-за каких-либо фактических известных проблем. Прочитайте обсуждение , прежде чем решить, является ли Consul правильным выбором.

Потенциальные будущие улучшения

  1. Доказать, что проект репликации Consul KV может поддерживать Orleans кластер в среде глобальной сети между несколькими центрами обработки данных Consul.
  2. Реализуйте таблицу напоминаний в Consul.
  3. Реализуйте протокол расширенного членства. Команда, стоящая за Consul, планирует реализовать атомарные операции. После того как эта функция будет доступна, возможно удаление ограничений в поставщике.