Отложение Секрелированное для сервисного автобуса с NSERVICEBUS или MASSTRANSIT

StackOverflow https://stackoverflow.com/questions/3661970

Вопрос

Мне нужно создать идентификационный сервер, как Microsoft's http://login.live.com..

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

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

Вопрос:

  1. Если сервер базы данных недоступен, что произойдет с опубликованными сообщениями?
  2. Будут ли они хранить где-то и где?
  3. Нужна ли мне дополнительную машину или кластер, чтобы обрабатывать отработку сервисной шины?
  4. Я прочитал, что SQL Server может использоваться в качестве хранилища сообщений, но я могу использовать прочный MSMQ? Я вспомогаю сообщения, чтобы иметь возможность написать их в базе данных, так почему я сначала хранил их в БД, просто чтобы взять их и снова написать их? Или я получаю это неправильно, и БД используется только для списка подписок, а не для сообщений?
Это было полезно?

Решение

  1. Это будет зависеть от того, как он установлен, но в Masstransit вы можете оставить подписку активной, поэтому сообщение все равно будет доставлено в очередь для DB. Когда DB снова активен, вы можете прочитать сообщения в очереди.

  2. Каждая служба, подключенная к сервисной шине, в Masstransit, имеет активную очередь для себя. Сообщения будут храниться там.

  3. Я думаю, что это «это зависит» ... Masstransit имеет поддержку для других MQS, чем MSMQ, но действительно построен вокруг MSMQ. У нас нет опытной большой поддержки для таких вещей, как отказоустойчивость от MSMQ. Тем не менее, все будет продолжать бегать без вины, если служба подписки (т. Е. Автобус) не удалась - услуги уже знают, с кем можно поговорить. Это только тогда, когда изменение потребителя (подписаться или отписаться), где это становится проблемой. Для меня это событие, которое происходит почти никогда.

  4. С Masstransit мы используем БД для хранения состояний подписки, но все сообщения хранятся в MSMQ.

Если вы хотите больше деталей в одном из этих ответов или иметь дополнительные вопросы о MT, вы можете присоединиться к нам в списке рассылки: http://groups.google.com/group/masstransit-discuss.

Другие советы

Вспомогательная архитектура, вы должны посмотреть на применение принципов CQRS - запросов (имеется ли этот пользовательский / PWD Combo) не должен быть выполнен через шину; Команды (изменение PWD, забытых PWD) отправляются через автобус, не опубликованные в качестве событий. Хотя внутренне вы, вероятно, будете использовать события, чтобы сохранить команду и сторонники запроса в синхронизации, это не связано с клиентом.

Запросы можно сделать, используя Simple Ado.net против реплицированных-прочитанных рабов вашей БД - что известно как настойчивая модель просмотра в CQRS. Если вам нравится, вы можете поставить несколько простых WCF перед этим тоже.

При использовании MSMQ все сообщения доставляются через Store-and-rever. Это означает, что они сначала хранятся на клиенте, прежде чем быть доставляемым на сервер, поэтому, если сервер опустится, сообщения сидят на клиентском ожидании. Для толерантности, вы захотите, чтобы ваши сообщения были восстановленными (записаны на диск) - это значение по умолчанию в NServiceBus, но не по умолчанию стандартных MSMQ (не знаю о masstransit). Вам не нужна база данных для этого.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top