Информация об изменениях

Сообщение Re: Service Discovery от 11.02.2017 6:40

Изменено 11.02.2017 6:48 scf

Re: Service Discovery
Здравствуйте, Blazkowicz, Вы писали:

B>Привет,


B> Есть менее десятка разных проектов, которые друг с другом общаются.

B>Один сервер на С#
B>Одно клиентское приложение на С# для рабочих станций
B>Несколько разных серверов на Java

B>Основной протокол общения — SOAP. Но иногда просто XML по HTTP.


B>Хочется упростить конфигурацию и прописывание разнообразных пар хост\порт где попало.


B>Посоветуйте что-нибудь из практики. Вот что удалось нарыть в гугле

B>- Eureka, ZooKeeper, Consul и подобные — умеют делать Discovery, но все остальные фичи ориентированы на кластер, плюс приходится содержать некий центральный реестр.
B>- WS-Discovery, вроде как, стандартная штука, но давно всеми забытая и мало кем вообще реализованая.
B>- UPnP, вроде как, подходит, с той лишь разницей что протокол больше ориентируется на девайсы в сети, чем на сервисы.

B>Хочется что-то простое и кроссплатформенное. Посоветуйте, пожалуйста.


Consul. Централизованный реестр не нужен — используйте сервисы с инвалидацией по таймауту. Т.е. схема примерно такая:
— поставить кластер консула, можно из одной ноды
— на каждый сервер поставить клиент консула, ему много ресурсов не требуется
— каждое приложение при старте регистрируется в консуле раз в 10 секунд отправляет в localhost:8500 (локальный консул) healthcheck с TTL 15 секунд. Если приложение остановить, его запись в консуле "протухнет" через 15 секунд.
Тогда в консуле всегда будет актуальная информация о живых приложениях, их хостах и портах.
Инфа о сервисах запрашивается тоже через localhost:8500, так что в приложение даже адрес консула зашивать не нужно.
Re: Service Discovery
Здравствуйте, Blazkowicz, Вы писали:

B>Привет,


B> Есть менее десятка разных проектов, которые друг с другом общаются.

B>Один сервер на С#
B>Одно клиентское приложение на С# для рабочих станций
B>Несколько разных серверов на Java

B>Основной протокол общения — SOAP. Но иногда просто XML по HTTP.


B>Хочется упростить конфигурацию и прописывание разнообразных пар хост\порт где попало.


B>Посоветуйте что-нибудь из практики. Вот что удалось нарыть в гугле

B>- Eureka, ZooKeeper, Consul и подобные — умеют делать Discovery, но все остальные фичи ориентированы на кластер, плюс приходится содержать некий центральный реестр.
B>- WS-Discovery, вроде как, стандартная штука, но давно всеми забытая и мало кем вообще реализованая.
B>- UPnP, вроде как, подходит, с той лишь разницей что протокол больше ориентируется на девайсы в сети, чем на сервисы.

B>Хочется что-то простое и кроссплатформенное. Посоветуйте, пожалуйста.


Consul. Централизованный реестр не нужен — используйте сервисы с инвалидацией по таймауту. Т.е. схема примерно такая:
— поставить кластер консула, можно из одной ноды
— на каждый сервер поставить клиент консула, ему много ресурсов не требуется
— каждое приложение при старте регистрируется в консуле раз в 10 секунд отправляет в localhost:8500 (локальный консул) healthcheck с TTL 15 секунд. Если приложение остановить, его запись в консуле "протухнет" через 15 секунд.
Тогда в консуле всегда будет актуальная информация о живых приложениях, их хостах и портах.
Инфа о сервисах запрашивается тоже через localhost:8500, так что в приложение даже адрес консула зашивать не нужно.

edit: а вот для клиентского приложения адрес сервера лучше всего раздавать через DNS, ну или намутить проксирующий nginx c автообновлением конфига из консула.