В настоящее время у нас есть два центра обработки данных в активном - активном режиме и с использованием репликации SQL между двумя центрами обработки данных (с небольшой задержкой). Я разрабатываю новый процесс, который будет использовать службу брокера SQL Server (внешний активатор) для обработки очереди заданий на основе времени.
В настоящее время существует 1200 заданий, и каждое из них следует планировать каждые 15 минут, поэтому я решил использовать BEGIN CONVERSATION TIMER
для планирования заданий и внешнего активатора для извлечения сообщения из очереди. Теоретически (и с некоторым ограниченным тестированием) все выглядит так, как будто все работает правильно.
Итак, мой вопрос связан с репликацией SQL - в этом сценарии
Я просто не совсем понимаю этот сценарий, и мы не хотим, чтобы одна и та же работа выполнялась дважды. Я искал и искал (в основном в Google), но не могу найти ничего, имеющего отношение к моей ситуации. Будем очень признательны за любые разъяснения / указания по этому вопросу.
TIA.
Репликация очередей невозможна, так как они не могут быть реплицированы. Но я рекомендую совсем другое: Балансировка нагрузки Service Broker. У вас может быть батарея сервисов (в вашем случае две) и объявить маршрут к каждой. Когда вы запускаете диалоги с этими службами, Service Broker будет балансировать нагрузку диалогов в этих службах (они хешируются на основе идентификатора диалога). Итак, если у вас есть 1000 заданий для планирования и, скажем, 10 рабочих станций, которые могут выполнять эти задания, вы должны создать службу-исполнитель на каждой из этих рабочих станций (например, служба «Рабочий», все они будут называться одинаково), а затем отправлять сообщения на "Рабочий", без указания который рабочий. SSB будет балансировать нагрузку заданий (сообщений) по всем возможным адресатам, что приведет к планированию балансировки нагрузки. Преимущество в том, что все настраивается во время развертывания. Вы можете добавить больше воркеров без изменения одной строки кода в приложении, просто добавив новые маршруты.
Я рекомендую вам прочитать статью по ссылке, так как объявление нескольких маршрутов к идентичным службам немного сложно, поскольку 'broker_instance' в маршруте играет решающую роль.