Зачем беспокоиться об открытии службы, когда связующее ПО, ориентированное на сообщения, выполняет эту работу?

Я получаю проблему, что etcd/consul/$все, что пытаются решить. Потребители услуг должны разговаривать с поставщиками услуг, чрезвычайно распределенная система с жидкостью нуждается в механизме для вступления в брак с двумя.

Однако проблема "где потребители услуг идут с их запросами"? является старым, и IMO была решена с помощью MOM - ориентированного на сообщения промежуточного программного обеспечения.

В MOM идея состоит в том, что потребителям услуг не важно, где живут поставщики услуг. Они просто отправляют сообщение и имеют шину обмена сообщениями, заботясь о маршрутизации сообщения соответствующему потребителю. Могут быть несколько провайдеров, которые все делают одно и то же (кругооборот на основе очереди) или поставщик версий (/v1/request переходит к одному,/v2/запрос переходит к другому).

Это простой и мощный шаблон интеграции, который полностью отделяет интерфейс службы от его реализации.

И все же я вижу эту странную одержимость открытием поставщиков услуг, которая, как представляется, создает плотную связь между потребителями и провайдерами (в дополнение к нескольким другим анти-шаблонам).

Итак, что мне здесь не хватает? ТИА.

Ответ 1

В MOM все проходит через шину, поэтому это может стать узким местом. При открытии службы потребитель ищет производителя "один раз" (нормально, возможно, придется через некоторое время проверить его), а затем "прямо" (ok может быть через прокси) говорит об этом.

Или, если вы предпочитаете запоминающиеся фразы: умные конечные точки и немые трубы vs (я думаю), тупые конечные точки и интеллектуальные каналы.

Ответ 2

Лично я не вижу этих двух, как или для этого типа архитектуры. Вы можете использовать обнаружение службы, чтобы узнать, какие услуги доступны на данный момент, и подписаться на MOM для событий, которые вы тогда знаете, будет там. Если вы не можете найти службы, от которых вы зависите, вы можете повысить оповещение. Не все MOM сообщают вам, когда нет издателя для канала.

Вы также можете объединить их так, чтобы обнаружение службы находилось там, где вы находите службы, с которыми хотите напрямую связаться, например хранилище данных, которое не выполняет работу, и все еще использовать MOM для подписки на события для изменений, которые другие системы. Не все варианты использования подходят для работы с очередью заданий, так как некоторые задачи должны решаться синхронно, а затем обнаружение службы - отличный способ иметь динамическую среду.

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