Шина NService: серьезные проблемы с развертыванием

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

  1. Что произойдет при использовании хранилища подписки БД, если БД выйдет из строя? Если для публикации сообщения требуется доступ к БД подписки, как оно будет доставлено? Он заблудится? Будет ли вызов Bus.Publish вызывать исключение?
  2. Предполагая, что вам не нужно развертывать простои: что делать, если вы хотите переместить базу данных подписки для конкретной публикации на другой сервер? Как вы справляетесь с таким переходом?
  3. Тот же вопрос касается дистрибьютора на стороне подписчика: что, если вы хотите переместить конечную точку дистрибьютора? Я могу придумать один сценарий: если у вас есть несколько подписок, использующих одну машину-дистрибьютор, вам может быть сложно переместить некоторые из них на другой сервер-дистрибьютор, чтобы снизить нагрузку.
  4. Как будут выглядеть сценарии установки / удаления при такой установке (как на начальном этапе, так и при непрерывных обновлениях)? Похоже, вы хотели бы иметь какие-то специальные сценарии установки / удаления для развертывания «логической публикации» и базы данных подписки, а также для «логических подписок» и распространителей. Экземпляры издателя не нуждаются в какой-либо специальной логике установки / удаления (поскольку они просто начинают публиковать сообщения, используя настроенную базу данных подписки, а затем останавливаются при их удалении). Рабочим узлам-подписчикам не потребуется ничего особенного при установке, кроме правильной конфигурации конечной точки распространителя, но потребуется логика удаления, чтобы убедиться, что они удалены из списка распространителей рабочих узлов.

person skb    schedule 28.07.2010    source источник


Ответы (2)


  1. В конце концов издатель выйдет из строя, и сообщения будут накапливаться во внутренней очереди. Вам нужно будет спланировать размер диска, который вам понадобится для обработки этого, в зависимости от размера сообщения и того, как долго вы хотите ждать появления БД. Оттуда зависит, сколько простоев вы можете выдержать. Вы можете использовать зеркалирование БД или кластеризацию, чтобы уменьшить время простоя БД.
  2. В этом также могут помочь технологии зеркалирования и кластеризации. Зависит от того, хотите ли вы выполнить переключение вручную или автоматически и где вы это делаете (удаленные сайты?).
  3. Здесь вам может помочь кластеризация MSMQ. Если вы хотите отказаться от дистрибьютора и переместить его в кластер, все будет в порядке. Другая возможность - предоставить доступ к вашим дистрибьюторам через HTTP и сбалансировать их нагрузку с помощью программного или аппаратного решения для балансировки нагрузки. За балансировщиком нагрузки у вас будет больше свободы перемещать вещи.
  4. Похоже, вы уже хорошо разбираетесь в этом :)
person Adam Fyles    schedule 29.07.2010
comment
Спасибо, Foosnazzy. №1 звучит хорошо, и я рад, что вы подтвердили мои мысли по поводу №4. Похоже, что для №2 и №3 используется тот же подход: кластеризуйте узкие места в ресурсах, чтобы их можно было перемещать. У меня есть один вопрос по этому поводу: можно ли настроить зеркалирование SQL-сервера, а также кластеризацию MSMQ ПОСЛЕ того, как он уже настроен как автономный? - person skb; 30.07.2010
comment
Да, вы можете создать кластер SQL, а затем добавить к нему свой текущий автономный узел. То же самое с MSMQ .. - person Adam Fyles; 30.07.2010

Что касается вашего первого вопроса о высокой доступности БД подписки, вы можете использовать кластер для аварийного переключения. Если БД не работает, Bus.Publish выдаст исключение, да. Рекомендуется хранить БД подписки отдельно от прикладной БД, чтобы избежать ее отключения при обновлении приложения. Это не обязательно должен быть отдельный сервер БД, подойдет отдельная БД на том же сервере БД.

Что касается перемещения серверов, это обычно управляется на уровне DNS, где в течение определенного периода времени у вас будут работать оба сервера, пока связь не перестанет работать.

По третьему вопросу о дистрибьюторах - не делите дистрибьютора между разными издателями или подписчиками.

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

person Udi Dahan    schedule 01.08.2010