2015-09-22 3 views
3

У меня есть непрерывный Webjob, запущенный на моем веб-сайте Azure. Он отвечает за выполнение некоторой работы после извлечения элементов из QueueTrigger. Я пытаюсь увеличить скорость, с которой элементы обрабатываются из очереди. Поскольку я масштабирую свой план обслуживания приложений, скорость обработки увеличивается, как ожидалось.Несколько экземпляров непрерывного Webjob на одной виртуальной машине в Azure

Мое беспокойство состоит в том, что для дополнительных виртуальных машин, похоже, расточительно оплачивать дополнительные экземпляры моего Webjob. Я ищу варианты/лучшие практики для запуска нескольких экземпляров одного и того же Webjob на одном сервере.

Я попытался запустить несколько JobHosts в отдельных потоках в Main(), но либо это не работает, либо я делал что-то неправильно ... Webjob не смог запустить из-за того, что выглядит как каждый поток, пытающийся доступа 'WebJobSdk.marker'. Мое настоящее решение состоит в том, чтобы публиковать мой Webjob несколько раз, каждый раз слегка изменяя «webJobName» в «webjob-publish-settings.json», чтобы тот же проект считался другим Webjob во время публикации. До сих пор это отлично работает, ожидайте, что он создаст много дополнительной работы каждый раз, когда мне нужно сделать какое-либо обновление.

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

Любые мысли там?

ответ

4

Вы можете использовать JobHostConfiguration.QueuesConfiguration. BatchSize и Настройки NewBatchThreshold для управления уровнем параллелизма в обработке очереди. Последний параметр NewBatchThreshold является новым в текущей версии beta1 release. Однако, включив пакеты «preerelease» в вашем диспетчере пакетов Nuget, вы увидите новый выпуск, если хотите попробовать. Повышение значения параметра NewBatchThreshold увеличивает уровень параллелизма - например, установив его на 100, означает, что, как только количество запущенных в данный момент функций очереди опустится ниже 100, будет получена новая партия сообщений для параллельной обработки.

Ошибка маркерного файла была исправлена ​​в this commit a назад и снова является частью текущего выпуска версии v1.1.0.

+1

Спасибо, что предупредили меня об этой новой функции в предстоящей версии. Я уже экспериментировал с BatchSize, а теперь с NewBatchThreshold. Я, кажется, делаю небольшие увеличения, увеличивая порог, и вижу улучшения в очередях, но долгое время поддерживал, имея несколько экземпляров webjob, для меня лучший результат, поэтому я все еще ищу лучший подход для достижения этого. – Gadget27

+1

@ Gadget27 Я как бы в той же ситуации, что и вы. То, что я сделал, было увеличено с BatchSize до 32, а также дублирование WebJob несколько раз в одном экземпляре сервера. В основном копируются коды от MyWebJob до MyWebJob2, MyWebJob3 и MyWebJob4, а затем развертывание всех четырех веб-узлов на экземпляр одного сервера. Таким образом, увеличение BatchSize до 4x32. – minh

+0

@staticmain Я делаю что-то подобное, но я не дублирую код на несколько отдельных проектов webjob. Вместо этого у меня есть один webjob, и я разворачиваю его несколько раз, каждый раз изменяя параметры webjob-publish-settings.json «webJobName», поэтому каждое событие публикации использует уникальное имя. (JobInstanceA, JobInstanceB, JobInstanceC и т. Д.). Конечные результаты должны быть одинаковыми, но, исходя из одного проекта, управление кодом намного проще, чем я подозреваю. – Gadget27

Смежные вопросы