Почему вы используете систему, основанную на сообщениях? - PullRequest
15 голосов
/ 17 декабря 2008

Каковы мотивы для использования системы на основе сообщений?

Я много вижу о сервисных шинах, таких как NServiceBus и Mass Transit , и мне интересно, каковы преимущества базовой методологии.

Ответы [ 6 ]

23 голосов
/ 17 декабря 2008

Существует несколько преимуществ использования систем на основе сообщений.

  1. Сообщения образуют четко определенный технологически нейтральный интерфейс между приложениями.
  2. Включает слабую связь приложений.
  3. Множество опций для производительности, настройки и масштабирования:
    • Развертывание инициатора запросов и процесса обслуживания на другом оборудовании
    • Несколько запрашивающих, совместно использующих один сервер
    • Несколько заказчиков, использующих несколько серверов
  4. Различные промежуточные программы обмена сообщениями реализуют общие шаблоны обмена сообщениями независимо от вашего приложения.
    • Запрос / Ответ
    • Огонь и забудь офлайн обновления
    • Публикация / подписка
  5. Многие продукты промежуточного программного обеспечения обрабатывают преобразование сообщений (например, SWIFT в SWIFTXML).
  6. Многие продукты промежуточного программного обеспечения могут разбивать один большой запрос на несколько меньших запросов.
  7. Они почти все поддерживают несколько платформ.

Между прочим, двумя лидерами рынка в этой области являются IBM с их Websphere MQ и сопутствующими продуктами и TIBCO с их Enterprise Service Bus.

11 голосов
/ 17 декабря 2008

Архитектура, основанная на сообщениях, разделяет производителей и потребителей сообщений как во времени, так и в пространстве. Это имеет много преимуществ:

  • производители и потребители могут работать на разных машинах
  • производители и потребители могут работать в разное время.
  • производители и потребители могут работать на разных аппаратных / программных платформах (им нужно только понимать один и тот же протокол сообщений)
  • легко координировать работу нескольких производителей / потребителей (например, для ресурсоемких заданий, которые требуют нескольких машин, как описал Дейв Маркл)
  • более высокая стабильность, когда сервисы временно недоступны (например, при обработке заказов использование системы обмена сообщениями может помочь избежать «отбрасывания» заказов)

Большинство этих преимуществ теряется при взаимодействии в стиле RPC (т. Е. При блокировке в ожидании ответа службы)

10 голосов
/ 17 декабря 2008

Один вариант использования - это когда у вас есть пул ресурсов, которые могут работать с данным элементом, и список работ, которые необходимо распределять в масштабируемом режиме.

Однажды у меня был проект, в котором мне нужно было интегрировать мэйнфрейм с несколькими скребками экрана 3270 (все медленно). Я мог бы одновременно открыть не более 10 таких процессов. У меня были тысячи учетных записей для скрининга и обновления экрана, поэтому я поместил работу в очередь, и мои машины (у меня было около 3 из них) просто забирали рабочие элементы из очереди сообщений (MSMQ) и выполняли очистку экрана и это было все. Я мог легко раскрутить новую машину или деактивировать старые, не прерывая работу, так что это было приятно.

4 голосов
/ 17 декабря 2008

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

например. У нас есть система, подобная этой, каждая команда реализована как часть общего графического интерфейса пользователя. Если мы хотим добавить новую функцию или изменить существующую, мы просто пишем новую часть и добавляем ее в систему. Когда он вызывается, он не зависит от остальных. Это означает, что мы можем очень легко расширить наше приложение. Кроме того, у нас есть сообщение, передаваемое между узлами в нашей сети - когда что-то изменяется на 1 компьютере, сообщение отправляется всем остальным, чтобы они могли обновиться. У нас есть сотни разных сообщений для разных событий, поэтому мы можем расширить систему, добавив новую службу, которая реагирует на соответствующие сообщения.

Архитектура передачи сообщений обычно имеет те же функции, что и веб-службы, у вас есть отдельные службы, к которым вы можете обращаться, и вы можете легко добавлять новые.

Не думайте, что архитектурам передачи сообщений требуются причудливые (и дорогостоящие!) Продукты промежуточного программного обеспечения, хотя Windows работает на архитектуре передачи сообщений - каждое сообщение WM_ *, передаваемое окну, является ... ну, сообщение, и я думаю, что показывает лучший пример архитектуры - ни одна часть системы не должна знать ни о какой другой части, вы можете расширять ее бесконечно, поскольку вы можете обрабатывать столько элементов управления, сколько вам нужно в любом диалоговом окне и т. д. и т. д.

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

0 голосов
/ 17 декабря 2008

Система, ориентированная на сообщения, как правило, подходит для определенных классов проблем интеграции. Другие альтернативы имеют общее хранилище данных (возможно, на основе файлов или БД) для приложений, с которыми можно взаимодействовать, или приложений, интегрируемых через RPC.

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

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

0 голосов
/ 17 декабря 2008

Я помог разработать одно для системы, в которой использовались C # и Remoting, клиент (служба или графический интерфейс) мог отправить сообщение с некоторыми пользовательскими данными, а получатель (получатели) могли бы его получить, когда они подключатся в следующий раз или мгновенно. ). Затем они могут обработать сообщение (взяв на себя ответственность за него в случае служб балансировки нагрузки). Он также использовался для обновления графического интерфейса после завершения длительных процессов.

Сама система обмена сообщениями имела настраиваемые конвейеры, которые обрабатывали каждое сообщение, вот несколько примеров нескольких конвейеров, которые мы разработали:

  • Хранилище (создано / сохранено сообщение в базе данных)
  • Маршрутизация (отработано, куда нужно отправить сообщение)
  • Безопасность (сработало, если клиенту было разрешено его получить)
  • Удалить (работает, если сообщение необходимо удалить из системы, что означает, что клиенты должны быть уведомлены, а сообщение удалено из его кэша и помечено в БД).
  • TakeOwnership (имеет дело с обеспечением того, чтобы только один клиент мог изменять состояние сообщения за раз, так как могут быть изменены только принадлежащие сообщения)

Таким образом, отвечая на ваш вопрос, системы обмена сообщениями являются прекрасным средством отправки информации о том, кто вы не знаете или не заботитесь о том, кто является клиентом.

...