Влияние при изменении количества экземпляров для веб-роли asp.net в Azure - PullRequest
2 голосов
/ 10 мая 2011

Мне не повезло, пытаясь выяснить, как изменение количества экземпляров для веб-роли ASP.Net влияет на запросы, обрабатываемые в настоящее время.

Вот сценарий:

  1. Сайт ASP.Net развернут с 6 экземплярами
  2. Через консоль я уменьшаю количество экземпляров до 4

Является ли Azure достаточно умным, чтобы не удалять экземпляры из пула, если он в данный момент обрабатывает запросы, или он просто убивает их в середине запроса?

Я прошел через лазурное доко, goolge и несколько писем в службу технической поддержки MS, ни одно из которых не смогло ответить на этот, казалось бы, простой вопрос. Я знаю о событиях, которые инициируются выключением и т. Д., Но это не очень помогает в сценарии веб-сайта с живым человеком, ожидающим запроса на его ответ.

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Вы не можете выбирать, какие экземпляры убивать.В первую очередь это связано со схемой размещения экземпляров Windows Azure, где ваши экземпляры разделены на разные домены сбоев (то есть разные области центра обработки данных - разные стойки и т. Д.).Если вы выберете экземпляры для уничтожения, это может привести к тому, что ваши оставшиеся экземпляры будут находиться в том же домене сбоев, что приведет к аннулированию SLA.

Сказав это:Экземпляр роли выключается (событие OnStop ()).Если вы захватили это событие, вы можете выполнить очистку экземпляра при подготовке к выключению виртуальной машины.Я не могу вспомнить, если вы вышли из балансировщика нагрузки в этот момент, но вы всегда можете заставить себя с помощью простой команды PowerShell (Set-RoleInstanceStatus -Busy).Таким образом, ваш экземпляр asp.net перестанет принимать запросы, и вы сможете с легкостью завершить работу изящно.

РЕДАКТИРОВАТЬ: Извините - не совсем ответил на все ваши вопросы.Поскольку вы получаете возможность захвата OnStop (), вам, возможно, придется реализовать механизм, чтобы убедиться, что в этом случае ничего не обрабатывается.Поскольку вы вышли из балансировщика нагрузки и предполагаете, что ваши запросы обрабатываются довольно быстро (2-5 секунд), вам не нужно долго ждать, чтобы удалить оставшиеся запросы.Вероятно, есть счетчик производительности, чтобы проверить, сколько активных запросов обрабатывается.

2 голосов
/ 10 мая 2011

Просто добавлю к ответу Дэвида: событие OnStop происходит, когда вы выключаете балансировщик нагрузки.Для веб-приложений обычно достаточно времени, чтобы удалить все запросы после того, как вы отключились от LB, пока экземпляр не будет закрыт.Однако для длительных соединений или соединений с отслеживанием состояния (возможно, с рабочей ролью) в некоторых случаях может произойти внезапное отключение.Хотя метод OnStop удаляет вас из LB, он не прерывает открытые соединения.Это просто мешает вам получить новые подключения.Для веб-приложений обычно достаточно времени для выполнения запроса (и вы можете отложить выключение, если это необходимо, в OnStop, если вы действительно этого хотите).

...