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

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

Здесь представлен подробный обзор Consul, включая сравнения с аналогичными решениями.

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

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

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

Настройка Consul

Существует обширная документация по Consul.io о настройке стабильного кластера 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': сообщает consul, на какой IP-адрес нужно открыть службу.

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

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

    {
        "consul": []
    }
    

Настройка Orleans

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

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. Вы можете использовать любой из этих ключей для получения дополнительных сведений о каждом из этих ключей, добавив их имя ключа (без кавычки) в корневой каталог http://localhost:8500/v1/kv/Consul 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"

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

Ограничения

Существует несколько ограничений, которые следует учитывать при использовании Consul в качестве поставщика членства.

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

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

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

Пары "ключ-значение" в 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 реплика tion может поддерживать Orleans кластер в среде глобальной сети между несколькими центрами обработки данных Consul.
  2. Реализуйте таблицу напоминаний в Consul.
  3. Реализуйте протокол расширенного членства. Команда consul планирует реализовать атомарные операции, как только эта функциональность доступна, можно удалить ограничения в поставщике.