Service Discovery
От: Blazkowicz Россия  
Дата: 09.02.17 15:18
Оценка:
Привет,

Есть менее десятка разных проектов, которые друг с другом общаются.
Один сервер на С#
Одно клиентское приложение на С# для рабочих станций
Несколько разных серверов на Java

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

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

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

Хочется что-то простое и кроссплатформенное. Посоветуйте, пожалуйста.
microservices discovery upnp ws-discovery eureka
Re: Service Discovery
От: sr_dev  
Дата: 10.02.17 16:51
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Привет,


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

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

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


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


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

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

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


На практике так и не дотянулся (пока), но вроде как именно для таких задач есть Enterprise service bus
Отредактировано 10.02.2017 16:52 sr_dev . Предыдущая версия .
Re: Service Discovery
От: andrey.desman  
Дата: 10.02.17 17:08
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>- UPnP, вроде как, подходит, с той лишь разницей что протокол больше ориентируется на девайсы в сети, чем на сервисы.


UPnP как раз ориентируется на сервисы, однако это overkill, скорее всего, потому как твои сервисы вряд ли вписываются в стандартные схемы UPnP.

Можно взять кусок оттуда, а именно SSDP (Simple Service Discovery Protocol).
Вот есть библиотечка для .NET https://github.com/Yortw/RSSDP, есть для C https://github.com/zlargon/lssdp
Для Java библиотек не знаю, но протокл простой как валенок, есть куча реализаций в качестве примера.
Re: Service Discovery
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 10.02.17 17:19
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>- UPnP, вроде как, подходит, с той лишь разницей что протокол больше ориентируется на девайсы в сети, чем на сервисы.


UPnP — отличный вариант. Девайсы в сети не просто же так, они для того, чтобы предоставлять сервисы. Собственно, тебе нужен SSDP

Можно еще всякие ZeroConf посмотреть, но я , лучше он или хуже. Я ковырялся с SSDP, все девайсы у меня в домашней сети откликаются — роутер (старый и новый), NAS, компы. Не знаю, есть ли у всего этого хозяйства поддержка ZeroConf и подобного.

Еще плюс — винда такие устройства сама видит и отображает в корне "Сети", можно какую-то инфу посмотреть без вспомогательных инструментов, перейти на веб-страницу устройства
Маньяк Робокряк колесит по городу
Re[2]: Service Discovery
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 10.02.17 17:23
Оценка:
Здравствуйте, andrey.desman, Вы писали:

B>>- UPnP, вроде как, подходит, с той лишь разницей что протокол больше ориентируется на девайсы в сети, чем на сервисы.


AD>UPnP как раз ориентируется на сервисы, однако это overkill, скорее всего, потому как твои сервисы вряд ли вписываются в стандартные схемы UPnP.


За давностью могу ошибаться, но UPnP, помимо нескольких протоколов, описывает какой-то набор стандартных сервисов/устройств. Но никто не мешает создать свой девайс сервис, не обязательно его где-то регистрировать. UUID сгенерировал свой собственный, и пользуйся, вряд ли с чем-то пересечется
Маньяк Робокряк колесит по городу
Re[3]: Service Discovery
От: andrey.desman  
Дата: 10.02.17 19:16
Оценка:
Здравствуйте, Marty, Вы писали:

M>За давностью могу ошибаться, но UPnP, помимо нескольких протоколов, описывает какой-то набор стандартных сервисов/устройств. Но никто не мешает создать свой девайс сервис, не обязательно его где-то регистрировать. UUID сгенерировал свой собственный, и пользуйся, вряд ли с чем-то пересечется


Именно поэтому upnp не нужен, а нужна его часть — SSDP.
Re[4]: Service Discovery
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.02.17 01:07
Оценка:
Здравствуйте, andrey.desman, Вы писали:

M>>За давностью могу ошибаться, но UPnP, помимо нескольких протоколов, описывает какой-то набор стандартных сервисов/устройств. Но никто не мешает создать свой девайс сервис, не обязательно его где-то регистрировать. UUID сгенерировал свой собственный, и пользуйся, вряд ли с чем-то пересечется


AD>Именно поэтому upnp не нужен, а нужна его часть — SSDP.


А я что-то другое написал?
Маньяк Робокряк колесит по городу
Re: Service Discovery
От: scf  
Дата: 11.02.17 06:40
Оценка: 5 (1)
Здравствуйте, 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 автообновлением конфига из консула.
Отредактировано 11.02.2017 6:48 scf . Предыдущая версия .
Re[5]: Service Discovery
От: andrey.desman  
Дата: 11.02.17 10:43
Оценка:
Здравствуйте, Marty, Вы писали:

AD>>Именно поэтому upnp не нужен, а нужна его часть — SSDP.

M>А я что-то другое написал?

Да, ты написал про upnp.
Re: Service Discovery
От: elmal  
Дата: 12.02.17 07:18
Оценка: 7 (2)
Здравствуйте, Blazkowicz, Вы писали:

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

Если без легаси можно было бы, то все взаимодействие между сервисами делать через брокер сообщений. То есть на подписку на сообщения или отсылку их.
Но так как у тебя легаси, тут вопрос не архитектуры, а развертывания. Можно развернуть все на облаке в docker контейнерах. А местоположение куда что слать реализовать через API оркестратора этих контейнеров. Например я сейчас подобную проблему через kubernates пытаюсь сделать. Все развертывание делаю на kubernates кластере, едином для всего. На этой платформе у меня есть другие кластеры, объединенные например через hazelcast. Ну а hazelcast сконфигурил таким образом, чтоб он IP нод, которые он будет объединять, узнавал через Kubernates API. Почти доделал уже .
Re[2]: Service Discovery
От: Blazkowicz Россия  
Дата: 13.02.17 06:52
Оценка:
Здравствуйте, elmal, Вы писали:

E>Но так как у тебя легаси, тут вопрос не архитектуры, а развертывания. Можно развернуть все на облаке в docker контейнерах.

Похоже, самого главного я не указал. У меня коробочный продукт. Поэтому и столько возни с развертыванием. Ни облако, ни docker, тут особо не помогают.
Re[2]: Service Discovery
От: Blazkowicz Россия  
Дата: 13.02.17 06:53
Оценка:
Здравствуйте, sr_dev, Вы писали:

_>На практике так и не дотянулся (пока), но вроде как именно для таких задач есть Enterprise service bus

Нет. ESB это транспортный узел связи. Да, он частично решает и мою проблему. Но у нас транспорт уже реализован.
Re[2]: Service Discovery
От: Blazkowicz Россия  
Дата: 13.02.17 06:55
Оценка:
Здравствуйте, scf, Вы писали:

scf>- каждое приложение при старте регистрируется в консуле раз в 10 секунд отправляет в localhost:8500 (локальный консул) healthcheck с TTL 15 секунд. Если приложение остановить, его запись в консуле "протухнет" через 15 секунд.

Это уже всё реализовано в клиентском коде?

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

Почему? Надобность крутить DNS у клиентов только усложняет деплоймент. У нас коробочный продукт. Прошу прощения, если сразу не указал.
Re[2]: Service Discovery
От: Blazkowicz Россия  
Дата: 13.02.17 06:57
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Можно взять кусок оттуда, а именно SSDP (Simple Service Discovery Protocol).

Да, после ресёрча я именно у этому склоняюсь. Но хотел посоветоваться. Вроде как, микросервисы популярый базворд. Может кто-то разбирался.
Re[3]: Service Discovery
От: elmal  
Дата: 13.02.17 16:54
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Похоже, самого главного я не указал. У меня коробочный продукт. Поэтому и столько возни с развертыванием. Ни облако, ни docker, тут особо не помогают.

У меня тоже коробочный . При этом облако интранетовское. Соответственно нужно на нужные ноды поставить соответствующий оркестратор и докер, настроить это как нужно. У меня админы за неделю справились . И далее это развертывается на раз два и прекрасно мониторится. Как доделаю наконец, будет полный фен шуй .
Re[3]: Service Discovery
От: scf  
Дата: 14.02.17 08:00
Оценка: 5 (1)
Здравствуйте, Blazkowicz, Вы писали:

B>Это уже всё реализовано в клиентском коде?

Нет, но реализовывать все равно придется, т.к. именно приложение должно сообщать о себе в service discovery. Другие варианты а-ля централизованный каталог сервисов требует больше времени на обслуживание. Реализация проста, у консула есть REST API.

Впрочем, если у вас не облако (все сервера надежны, приложения деплоятся по одному, а не кластером) и не пугает поддержка каталога, можно просто захостить XML с каталогом сервисов на одной из машин по HTTP и вытягивать его из других приложений.

B>Почему? Надобность крутить DNS у клиентов только усложняет деплоймент. У нас коробочный продукт. Прошу прощения, если сразу не указал.

Тем более, только крутить не у клиентов, а у себя . Схема примерно такая: DNS указывает на 1-2 машины с nginx, а они перенаправляют запросы на нужный бэкенд. Простой и надежный способ обеспечить аптайм и возможность реконфигурации бэкенда. Прослойка в виде nginx нужна, т.к. изменения в DNS применяются не сразу + при балансировке частенько нужно более сложное поведение, чем простой DNS round-robin.
Re[4]: Service Discovery
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 03.03.17 15:16
Оценка:
Здравствуйте, elmal, Вы писали:

E>У меня тоже коробочный . При этом облако интранетовское. Соответственно нужно на нужные ноды поставить соответствующий оркестратор и докер, настроить это как нужно. У меня админы за неделю справились . И далее это развертывается на раз два и прекрасно мониторится. Как доделаю наконец, будет полный фен шуй .

Не в службу, а в дружбу... Можешь небольшую статью написать по этому поводу тут, например? Было бы архиполезно почитать про что-то подобное.
Sic luceat lux!
Re[3]: Service Discovery
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.03.17 17:01
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

AD>>Можно взять кусок оттуда, а именно SSDP (Simple Service Discovery Protocol).

B>Да, после ресёрча я именно у этому склоняюсь. Но хотел посоветоваться. Вроде как, микросервисы популярый базворд. Может кто-то разбирался.

Хочу напомнить, что UPnP, SSDP и т.п. используют мултикасты. И если сеть в вашей конторе разбита на подсети связанные роутерам, мултикасты из одной подсети вряд ли будут попадать в другую подсеть.
Re[5]: Service Discovery
От: elmal  
Дата: 04.03.17 06:19
Оценка:
Здравствуйте, Kernan, Вы писали:

K>Не в службу, а в дружбу... Можешь небольшую статью написать по этому поводу тут, например? Было бы архиполезно почитать про что-то подобное.

Сильно лень . Хоть и пилотный кластерный проект удалось запустить со всем этим, но пока это больше эксперимент, у меня даже нужного количества нод нет для кластера.
Если и созрею на статью, это когда проект посерьезнее получится запустить, и когда все таки удастся всю контору на это пересадить. Чтоб был нормальный уровень компетенции у меня, учитывая текущий уровень бюрократии на согласование задач, несколько лет еще потребуется, хотя б пилот удалось нормально запустить.

Собственно и инете до черта инфы по этому делу. В основном рассчитано на готовые развернутые облака. В моем случае все отличия — облако развертывали сами. Развертывал не я, я себе на машине сначала поставил для экспериментов, потом дал админам ссылки как и что ставить и сказал какие машины объединить в кластер. Потом начал развертывать уже не на локальном компе, а на кластере — немного огреб, ибо там виртуальные ip контейнеров оказались в разных сетях, и hazelcast ни хрена не нашел автоматом, у меня получилось не распределенное приложение, а n приложений независимых, выполняющих одно и тоже, и не в состоянии загрузить данные, ибо они не влезали в оперативку . Но погуглив нашел решение, и через kubernetes api узнавал при старте список нод, на котором приложение развернуто, и эти ip кормил hazelcast явно — таким образом заработало. У hazelcast кстати поддержка — я просто в восторге, отвечают практически мгновенно прям в чате, если какая проблема — говорят где в коде посмотреть отладчиком, причем отвечают сами разработчики.

Вроде можно было попробовать для того же самого mesos использовать, но показалось что kubernetes попроще будет для развертывания и там больше из коробки есть. Каких то принципиальных косяков у kubernetes не нашел, хоть и на баги напарывался. Не очень мне правда понятно как обновление самого kubernetes делать чтоб все к чертям не слетело, но это дело будущего.
Re[4]: Service Discovery
От: Blazkowicz Россия  
Дата: 04.03.17 12:47
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Хочу напомнить, что UPnP, SSDP и т.п. используют мултикасты. И если сеть в вашей конторе разбита на подсети связанные роутерам, мултикасты из одной подсети вряд ли будут попадать в другую подсеть.

Да, я в курсе. Спасибо.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.