Как структурировать эластичное приложение Azure Batch? - PullRequest
0 голосов
/ 25 сентября 2019

Я оцениваю Batch для проекта и, хотя кажется, что он будет делать то, что я ищу, я не уверен, что то, что я предполагаю, действительно верно.

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

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

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

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

1 Ответ

2 голосов
/ 25 сентября 2019

Вот один из возможных способов использовать сильные стороны Azure Batch и добиться того, что вы описали.

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

Затем Batch Scheduler позаботится о распределении задач для вычисления узлов.Он также может позаботиться о повторных попытках сбоев и т. Д.

Сконфигурируйте свой пул с AutoScale формула для динамического изменения размера пула в соответствии с нагрузкой.В вашей формуле можно указать taskcompletion , чтобы обеспечить выполнение задач до того, как будет удален какой-либо один вычислительный узел.

Если пики вашей рабочей нагрузки предсказуемы (скажем, 9 утра каждый день), ваше выражение AutoScale может масштабироватьсяваш бассейн в ожидании.Если эти всплески непредсказуемы, ваш внешний мониторинг (или ваш JobManager) может изменить выражение AutoScale в любое время, чтобы удовлетворить.

При необходимости ваш менеджер заданий может завершить работу после добавления всех необходимых задач;установите onAllTasksComplete на terminatejob , гарантируя, что ваша задача завершена после всех ваших задач.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...