Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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.
Создайте папку для установки Consul в (например, C:\Consul).
Создайте вложенную папку: C:\Consul\Data (Consul не создает этот каталог, если он не существует).
Скачайте и распакуйте Consul.exe в C:\Consul.
Откройте командную строку 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.
-
Убедитесь, что 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();
Предыдущий код:
- Создает значение IHostBuilder по умолчанию из Host.CreateDefaultBuilder().
- Цепляет вызов к UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) для настройки "silo" Orleans.
- Учитывая ISiloBuilder, производится вызов UseConsulSiloClustering.
- Настраивает поставщика членства в кластере для использования Consul, при наличии Consul
address
.
Чтобы настроить клиент, используйте тот же пакет 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 правильным выбором.
Потенциальные будущие улучшения
- Доказать, что проект репликации Consul KV может поддерживать Orleans кластер в среде глобальной сети между несколькими центрами обработки данных Consul.
- Реализуйте таблицу напоминаний в Consul.
- Реализуйте протокол расширенного членства. Команда, стоящая за Consul, планирует реализовать атомарные операции. После того как эта функция будет доступна, возможно удаление ограничений в поставщике.