Каковы мотивации использования системы на основе сообщений?
Я вижу много о служебных автобусах, таких как NServiceBus и Mass Transit, и мне интересно, каковы преимущества базовой методологии.
Каковы мотивации использования системы на основе сообщений?
Я вижу много о служебных автобусах, таких как NServiceBus и Mass Transit, и мне интересно, каковы преимущества базовой методологии.
Существует множество преимуществ использования систем на основе сообщений.
Кстати, двумя лидерами рынка в этой области являются IBM с их Websphere MQ и сопутствующими продуктами, а TIBCO - с корпоративной служебной шиной.
Один из вариантов использования - это когда у вас есть пул ресурсов, которые могут работать на данном элементе, и список работ, которые необходимо распределять масштабируемым образом.
У меня когда-то был проект, где мне приходилось интегрировать мэйнфреймы с несколькими 3270 скреперами экрана (все медленно). Я мог бы открыть не более 10 из этих процессов на коробке за раз. У меня было тысячи учетных записей для очистки экрана и обновления, поэтому я поставил работу в очередь, и мои машины (у меня было около 3 из них) просто взяли рабочие элементы из очереди сообщений (MSMQ) и сделали очистку экрана, и все. Я мог бы легко развернуть новую машину или дезактивировать старые, не прерывая поток работы, так что это было хорошо.
Архитектура, основанная на сообщениях, отменяет создание производителей и потребителей сообщений как во времени, так и в пространстве. Это имеет много преимуществ:
Вы теряете большинство этих преимуществ, когда выполняете связь в стиле RPC (т.е. когда вы блокируете пока ожидаете ответа на обслуживание)
преимущества действительно сводятся к развязке частей вашего приложения. После установки шины и добавления приложений вы можете легко расширить приложение, добавив новые элементы, которые вы можете гарантировать, не повлияет на другие части. Это очень хороший способ постоянного добавления в систему с течением времени.
например. у нас есть такая система, каждая команда реализована как часть общего GUI, если мы хотим добавить новую функцию или изменить существующую, мы просто пишем новую часть и добавляем ее в систему. Когда он вызывается, он не имеет зависимости от остальных. Это означает, что мы можем очень легко расширить наше приложение. Кроме того, у нас есть сообщение, проходящее между узлами в нашей сети - когда что-то меняется на одном компьютере, сообщение отправляется всем остальным, чтобы они могли обновлять себя. У нас есть сотни разных сообщений для разных событий, поэтому мы можем расширить систему, отбросив новую службу, реагируя на соответствующие сообщения.
Архитектуры передачи сообщений, как правило, имеют те же функции, что и веб-службы, у вас есть отдельные службы, которые вы можете вызвать, вы можете легко добавлять новые.
Не думайте, что для архитектуры передачи сообщений требуются модные (и дорогостоящие!) продукты промежуточного программного обеспечения, хотя Windows работает на архитектуре передачи сообщений - каждое сообщение WM_ *, переданное в окно, - это... ну, сообщение, и я думаю, что показывает лучший пример архитектуры - ни одна часть системы не должна знать о какой-либо другой части, вы можете бесконечно расширять ее, поскольку вы можете обрабатывать столько элементов управления, сколько захотите, в любом диалоге и т.д. и т.д.
Передача сообщений - невероятная архитектура, хотя она может быть медленнее, чем плотное связывание приложения вместе, что не слишком важно для использования в настоящее время, особенно если вы уже используете скрипты или приложения .net.
Я помог разработать его для системы, которая использовала С# и Remoting, клиент (служба или графический интерфейс) мог отправить сообщение в комплекте с некоторыми пользовательскими данными, и получатели (получатели) получили бы его либо при следующем подключении, либо в мгновение ока). Затем они могли обработать сообщение (взяв его владельцы в случае услуг балансировки нагрузки). Он также использовался для обновления графических интерфейсов, когда завершились длительные процессы.
Сама система обмена сообщениями имела настраиваемые конвейеры, обрабатывающие каждое сообщение, вот несколько примеров нескольких разработанных нами конвейеров:
Таким образом, в ответ на ваш вопрос системы обмена сообщениями являются отличным средством отправки информации о том, когда вы не знаете или не заботитесь о том, кто является клиентом.
Система, ориентированная на сообщения, обычно хороша для определенных классов задач интеграции. Другие альтернативы имеют общий хранилище данных (возможно, на основе файла или базы данных) для приложений, с которыми можно связаться, или приложений, интегрируемых через RPC.
Преимущества обмена сообщениями по этим шаблонам интеграции заключаются в том, что вы не связываете оба приложения с одной и той же схемой хранилища данных, и вы не привязываете приложения к сценарию интеграции с точкой в точку RPC (который становится более сложным, чем больше приложений участие).
Также преимущества асинхронной связи (например, электронная почта или онлайн-чат), а также возможности маршрутизации сообщений и трансформации.