2011-01-13 4 views
2

Я на стадии планирования службы .NET, которая постоянно обрабатывает входящие сообщения, которые включают в себя различные преобразования, вставки и обновления баз данных и т. Д. В целом служба огромна и сложна, но отдельные задачи, которые она выполняет, маленький, простой и четко определенный.Interprocess messaging - MSMQ, Service Broker ,?

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

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

Я всегда использовал очередь сообщений для этого типа вещей, но недавно был ознакомлен с SQL Service Broker, который, похоже, делает что-то подобное. Является ли SQLSB жизнеспособной альтернативой для этого сценария, и если да, увижу ли я какие-либо преимущества в производительности, используя это вместо стандартной очереди сообщений?

Благодаря

ответ

2

Если большинство из этих шагов инициирования от состояния базы данных и в конечном итоге в обновлении базы данных, а затем слияние вашего хранилища сообщений с хранением данных делает много смысла:

  • один продукт для резервного копирования/восстановления
  • последовательное резервное копирование состояния
  • единственное решение восстанавливаемость высокой готовности/аварийного (DB зеркального отображения, кластерный, доставка журналов и т.д.) масштаб хранения
  • базы данных (возможности ввода-вывода, размер и ограничения пропускной способности и т.д. в соответствии с characteris продукта базы данных тики, а не пределы продуктов магазина сообщений).
  • один продукт для настройки, устранения неисправностей, управлять

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

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

Теперь, если мы переводим хранилище сообщений абстрактных терминов в базу данных как Service Broker и «хранилище сообщений без базы данных» как MSMQ, вы можете видеть, почему SSB будет запускать круги в любое время вокруг MSMQ.

3

Это звучит для меня, как вы можете быть после архитектуры службы шины. Это обеспечит вам необходимую координацию и отказоустойчивость. Я наиболее знакомы и частично относятся к NServiceBus, но есть и другие, включая Mass Transit и Rhino Service Bus.

1

Недавний опыт работы с обоими подходами (начиная с Sql Server Service Broker) привел меня к ситуации, когда я плачу за то, что мои сообщения вышли из SQL-сервера.Проблема квазиполитическая, но вы можете ее рассмотреть: SQL-сервер в моей организации управляется специализированным администратором баз данных, а серверы приложений (например, сообщениями, такими как NServiceBus) разработчиками и сетевой командой. Любые изменения на серверах баз данных требуют болезненного анализа производительности от администратора баз данных и погружены в страх, что мы можем получить стандартные обязанности SQL от нашего механизма очередей, живущего в том же пространстве.

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

Я узнал, что серверы приложений дешевы. Просто добавьте обработчики сообщений, добавьте машины ... просто. Практически никаких лицензионных затрат. С SQL-сервером это совершенно противоположно. Теперь мне кажется, что использование Service Broker для обмена сообщениями подобно использованию дорогостоящего автомобиля для пашни картофельного поля. Это намного лучше для других вещей.

Смежные вопросы