Инициализация выборов лидера для нескольких ролей в кластерной среде - PullRequest
0 голосов
/ 31 мая 2018

В настоящее время я работаю с реализацией, основанной на:

org.springframework.integration.support.leader.LockRegistryLeaderInitiator

Наличие нескольких ролей-кандидатов, так что только один экземпляр приложения в кластере выбирается в качестве лидера для каждой роли.Во время инициализации кластера, если для свойства autoStartup установлено значение true, первый инициализированный экземпляр приложения будет выбран в качестве лидера для всех ролей.Это то, чего мы хотим избежать, и вместо этого имеем справедливое распределение ведущих ролей в кластере.

Одним из возможных решений, описанных выше, может быть то, что, когда кластер готов и правильно инициализирован, затем вызывается конечная точка, котораявыполнит:

lockRegistryLeaderInitiator.start()

Для всех экземпляров в кластере, чтобы начался процесс выборов и роли были справедливо распределены по экземплярам.Один из недостатков заключается в том, что это должно быть частью процесса развертывания, добавляя каким-то образом сложность.

Каков предлагаемый наилучший метод для вышеизложенного?Есть ли планы на дополнительные функции, связанные?Например, чтобы автоматически запускать выборы лидера только тогда, когда доступны экземпляры приложения X?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Было бы относительно легко с Zookeeper LeaderInitiator, потому что вы могли бы проверить в zookeeper количество экземпляров перед его запуском.

С реестром блокировки не так просто, потому что нет внутренней информации об экземплярах;вам понадобится какой-нибудь внешний механизм (например, zookeeper, в этом случае вы также можете использовать ZK).

Или вы можете использовать что-то вроде Spring Cloud Bus (с RabbitMQ или Kafka) для отправки сигналавсе случаи, когда пришло время избирать руководство.

0 голосов
/ 31 мая 2018

Предлагаю вам взглянуть на проект Spring Cloud Bus .Я не знаю его подробностей, но похоже, что ваша идея о autoStartup = false для всех LockRegistryLeaderInitiator экземпляров и их запуск по какому-либо распределенному событию - это путь.

Не уверен, что мы можем сделать длявы с точки зрения Spring Integration, но вы чувствуете, что не несете за это ответственность, и все согласования и перебалансировки должны выполняться с помощью какого-либо другого инструмента.К счастью, все наши проекты Spring можно использовать вместе как единую платформу.

Я думаю, что с помощью шины вы даже можете реально отслеживать количество экземпляров, присоединившихся к кластеру, и самим решать, когда и как публиковать событие StartLeaderInitiators.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...