Сервисный автобус (может быть?) Для веб-фермы - PullRequest
1 голос
/ 29 декабря 2011

Часть этого вопроса в том, что я даже не уверен, что именно мне нужно спросить, поэтому я начну с ситуации и отработаю.

Один проект, над которым я работаюпредполагает использование COMET через библиотеку aspComet.Вариант использования программы представляет собой совместное слайд-шоу.Один человек управляет большей частью этого, с одним или несколькими участниками, способными выполнить определенные действия.Низкая задержка между выполнением действия на экране

Ранее оно просто выполнялось на одном сервере.Теперь мы хотим немного его масштабировать, больше для надежности, чем для повышения производительности.Итак, у нас есть несколько коробок в облаке Rackspace и все эти забавные вещи.

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

Сначала я решил эту проблему с помощью провайдера WCF Mesh., который не был хорошо задокументирован для начала, теперь я сталкиваюсь с проблемами с отправкой сообщений, которые иногда теряются или откладываются (я не уверен на 100%, что там происходит), но это облажается долгоопрашивать COMET и ломать вещи довольно странным образом (щелчок по кнопке может вызвать событие или зависание на 10 секунд {длительная продолжительность опроса} и фактически ничего не делать).

Дополнительные исследования приводят меня кповерьте, один из провайдеров сервисной шины .Net может сделать то, что мне нужноОднако я не могу найти примеры, которые бы охватывали то, что мне нужно:

  1. Нет единой точки отказа (вне базы данных)
  2. Нет жесткого кодирования пиров.
  3. Практически в реальном времени (без опроса, лучше всего использовать события)

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

Может кто-нибудь указать мне правильное направление с этим?Даже подходящие условия, которые нужно искать в документах для поставщиков сервисных шин, были бы хороши на этом этапе.Или служебные автобусы не то, что я хочу?На этом этапе я согласился бы настроить сервер Jabber на каждом веб-сервере и использовать его, если он мог бы соответствовать моим ограничениям.

1 Ответ

1 голос
/ 29 декабря 2011

Я не могу говорить тонну с NServiceBus, но я ожидаю, что ответы будут похожи.

  1. Одна точка отказа: MSMQ может использовать многоадресную передачу, что означает, что каждая конечная точка будет транслировать свое существование и таблица БД не нужна. RabbitMQ использует этот процесс привязки Exchange-к-очереди, который означает, что до тех пор, пока экземпляр или кластер Rabbit активен, сообщения все еще существуют. RabbitMQ может быть кластеризован, MSMQ не может быть. * Примечание: у вас могут быть проблемы с многоадресной рассылкой в ​​Rackspace, не знаю, как они работают. Если это так, вам придется обратиться к сервисам времени выполнения для MSMQ (не RabbitMQ), что создаст единую точку отказа, потому что у каждого есть единственная точка для координации управляющих сообщений.

  2. Жесткое кодирование пиров: немного обсуждалось выше; Многоадресная рассылка MSMQ справляется с этим. Кролик, это тоже можно сделать, просто свяжи очереди с обменом, который ты хочешь слушать. MassTransit позаботится об этом за вас.

  3. Почти в реальном времени: оба используют обмен сообщениями, который близок к реальному времени. В вашем потребительском коде нет опроса.

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

Для начала работы с MassTransit у нас есть документация: http://readthedocs.org/projects/masstransit/ и список рассылки http://groups.google.com/group/masstransit-discuss. Присоединяйтесь к списку рассылки, если у вас есть вопросы в будущем, и кто-то постарается помочь вам.

...