Предотвращение остановки Azure во время обработки - PullRequest
5 голосов
/ 28 января 2012

Это может быть довольно простой вопрос, но я пока не видел прямого ответа.Допустим, я использую рабочую роль Azure для выполнения какой-то длительной задачи, скажем, такой, которая занимает час.Теперь скажем, что MS решает, что рабочая роль нуждается в некотором обслуживании, и пытается завершить ее через 30 минут после начала работы.

Есть ли способ заставить Azure ждать, пока эта роль не завершит свою работу для обслуживания?Я вижу метод OnStop, но кажется, что вы можете задержать вещи только на определенное время, прежде чем вас все равно закроют.

Если это невозможно, как вы планируетеэто для операций, которые занимают приличное количество времени и не могут быть разделены на более мелкие куски?Не могли бы вы откатить изменения, сделанные ранее, и затем повторить задачу?

1 Ответ

4 голосов
/ 28 января 2012

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

Вот предложение по смягчению.Допустим, ваша задача управляется очередью.Давайте представим, что ваше сообщение выглядит примерно так: PROCESSWIDGET|123.

. Вы читаете сообщение очереди в рабочем экземпляре и начинаете обработку.Вы можете изменить сообщение очереди и записать свой прогресс.Итак, в этом вымышленном примере, скажем, есть 4 шага для выполнения часового задания, каждый из которых занимает 15 минут.По завершении каждого шага вы можете обновить свое сообщение, добавив статус контрольной точки.Сразу после выполнения первой задачи вы обновляете сообщение, и теперь оно выглядит примерно так: PROCESSWIDGET|123|STEP2.

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

См. эту страницу MSDN для деталей метода UpdateMessage().

...