Аварийное переключение для служебной шины с NServiceBus или MassTransit - PullRequest
4 голосов
/ 07 сентября 2010

Мне нужно создать Identity Server, как Microsoft http://login.live.com.

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

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

Вопрос:

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

Ответы [ 2 ]

8 голосов
/ 08 сентября 2010

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

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

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

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

8 голосов
/ 08 сентября 2010
  1. Это будет зависеть от того, как он настроен, но в MassTransit вы можете оставить подписку активной, чтобы сообщение все равно было доставлено в очередь для БД.Когда БД снова активна, вы можете читать сообщения в очереди.

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

  3. Я думаю, что это "все зависит" ... MassTransit имеет поддержку других MQ, кроме MSMQ, но на самом деле построен на основе MSMQ.Мы не испытали большой поддержки таких вещей, как восстановление после отказа от MSMQ.Тем не менее, все будет продолжать работать без сбоев, если служба подписки (т. Е. Шина) выходит из строя - службы уже знают, с кем разговаривать.Это только когда изменение в потребителе (подписаться или отписаться), где это становится проблемой.Для меня это событие, которое происходит почти никогда.

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

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

...