Использование 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.
Создайте папку для установки 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'
: сообщает consul, на какой IP-адрес нужно открыть службу.
Существует множество других параметров и возможность использования файла конфигурации JSON. Полный список параметров см. в документации consul.
Убедитесь, что 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();
Предыдущий код:
- Создает объект IHostBuilder с значениями по умолчанию из .Host.CreateDefaultBuilder()
- Цепочки вызовов, к UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) которым настраивается 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. Вы можете использовать любой из этих ключей для получения дополнительных сведений о каждом из этих ключей, добавив их имя ключа (без кавычки) в корневой каталог 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 правильным выбором для вас.
Потенциальные будущие улучшения
- Убедитесь, что проект consul KV реплика tion может поддерживать Orleans кластер в среде глобальной сети между несколькими центрами обработки данных Consul.
- Реализуйте таблицу напоминаний в Consul.
- Реализуйте протокол расширенного членства. Команда consul планирует реализовать атомарные операции, как только эта функциональность доступна, можно удалить ограничения в поставщике.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по