Увеличение / уменьшение количества экземпляров рабочих ролей в Azure - PullRequest
2 голосов
/ 02 декабря 2011

Я могу увеличить количество экземпляров Worker Role (WR) напрямую из Java, используя класс ServiceManagementRest в пакете Azure4Java. См. Учебное пособие Управление Azure через Java .

У меня вопрос: когда я уменьшу количество экземпляров WR, могу ли я решить, какие экземпляры WR закрылись? Потому что для идеи эластичности Облака я бы остановил экземпляры в состоянии IDLE, а не экземпляры в состоянии EXECUTING.

С уважением, Фабрицио

Ответы [ 3 ]

7 голосов
/ 02 декабря 2011

Вы не можете выбрать, какие экземпляры будут закрыты;вы просто изменяете количество экземпляров, и контроллер фабрики заботится о выключении экземпляров.Одна из причин связана с доменами сбоев и SLA: если бы у вас было, скажем, 4 экземпляра в 2 доменах сбоев и было закрыто два экземпляра в домене сбоев 0, теперь у вас будет 2 экземпляра в домене сбоев 1. Итак, теперь у вас есть дваэкземпляры в той же стойке, возможно, и эта стойка отключается.Теперь у вас есть ноль экземпляров, запущенных в течение определенного периода времени.

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

Для этого паттерна требуется идемпотентность, что иногда является проблемой.Благодаря недавнему обновлению очередей Windows Azure вы теперь можете изменять сообщения очереди, что делает это немного проще - вы можете добавлять информацию в сообщение очереди по мере выполнения различных этапов обработки вашего рабочего элемента.Затем, если ваш экземпляр выключен до завершения работы, следующий рабочий, который его заберет, может возобновить работу с точки, отличной от «начала».

Еще одна деталь: вы должны быть в состоянии обработать событие Stoppingи скажите «остановленному экземпляру» прекратить чтение из очереди (возможно, установите флаг).Затем переопределите OnStop () и дождитесь завершения внутрипроцессных операций перед возвратом.Если все еще выполняющиеся операции займут более 5 минут, вам, возможно, придется проявить творческий подход ...

2 голосов
/ 02 декабря 2011

Вы не можете контролировать, какой экземпляр будет закрыт, однако это почти всегда (насколько я видел) экземпляр с суффиксом наибольшего числа.Т.е., если у вас есть IN_0, IN_1 и IN_2 и вы закрываете экземпляр, он, скорее всего, будет IN_2, который выключится.Может быть, вы можете использовать эту тенденцию в своих интересах?

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

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

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

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