Как описано в различных других связанных с этим вопросах, я также ожидаю длительного (30 секунд) первого вызова после (повторного) развертывания веб-роли с довольно большой моделью EF6 и большим количеством ссылочных nuget -packages. Пробовав различные предлагаемые решения с preloadEnabled
и serviceAutoStartProviders
, я все еще согласен и решил вновь открыть эту тему в надежде, что кто-то натолкнулся на лучшее решение тем временем.Azure Web Role warm up после Deploy
Основная цель для меня состоит в том, чтобы сделать веб-роль, отвечающую первому запросу, почти так же быстро, как последующие вызовы, как только эта роль перестанет работать в новом состоянии и получит доступ к балансировщику нагрузки и внешним клиентам. К сожалению, я испытал следующие проблемы с предлагаемыми решениями до сих пор:
preloadEnabled
:- я добавить модуль инициализации приложений с помощью
PKGMGR.EXE /iu:IIS-ApplicationInit
в задаче запуска. Все идет нормально. - Когда я попытаюсь выполнить
%windir%\system32\inetsrv\appcmd set site "MySiteName" -applicationDefaults.preloadEnabled:true
, это не сработает, так как на момент запуска сценария запуска все еще нет сайтов, созданных в IIS при новом развертывании. - Если я пытаюсь установить параметр preloadEnabled через
ServerManager
-класс в моем методеApplication_Start
, я не могу понять, как этот код предназначен для выполнения перед первым внешним вызовом веб-роли, поскольку параметр preloadEnabled по умолчанию установлено значение false после развертывания новой веб-роли и, таким образом, метод Application_Start в моем понимании не может быть запущен модулем инициализации приложения?
- я добавить модуль инициализации приложений с помощью
serviceAutostartProviders
:- здесь мы должны поставить имя нашего AutostartProvider реализующего интерфейс
IProcessHostPreloadClient
в ApplicationHost.config т.е. либо с помощью Appcmd сценария или класс ServerManager, НО:- serviceAutostartProvider похож на preloadEnabled параметр, связанный с сайтом, поэтому мы имеем такую же проблему здесь, как и с
%windir%\system32\inetsrv\appcmd set site "MySiteName" -applicationDefaults.preloadEnabled:true
в 1.2 - во время запуска сценария запуска после нового развертывания веб-сайты не являются t, все еще созданный в IIS, и скрипт не выполняется должным образом - Другой возможностью было бы включить applicationhost.config в пакет развертывания, но я не нашел решения для этого для веб-роли.
- serviceAutostartProvider похож на preloadEnabled параметр, связанный с сайтом, поэтому мы имеем такую же проблему здесь, как и с
- здесь мы должны поставить имя нашего AutostartProvider реализующего интерфейс
Так как же вы, ребята, удалось обеспечить, чтобы загружать при сборе и некоторые код инициализации (например, заполнение кэш-память) запускается перед тем роль получает это первый удар из-за пределов?
Теперь мы начнем получать некоторый трафик и получаем ок. 1-2 запросов в секунду на нашем WebApi и, следовательно, 30-секундная задержка для предварительной загрузки «видимых» клиентов после того, как каждое развертывание обновлений становится серьезной проблемой.
Мы планируем развертывание обновлений при низком времени трафика, но что делать, если мне нужно установить срочное исправление?
Спасибо. Но ваше решение с слотами также применимо к веб-ролям? Насколько я знаю, это особенность Azure Web Apps? – maxyha