Если для службы приложений включено автомасштабирование, Azure будет добавлять экземпляры по мере необходимости на основе установленных правил. Я всегда начинаю как минимум с 2 экземпляров. Я хотел бы убедиться, что трафик не направляется в новый экземпляр службы приложений, пока код приложения не будет полностью инициализирован. Как я могу это сделать? Можно ли добавить таймаут? Или это как-то автоматически делается?
Как я могу убедиться, что новый экземпляр службы приложений Azure с автоматическим масштабированием прогрет, прежде чем он будет обрабатывать трафик?
Ответы (2)
Как я могу это сделать? Можно ли добавить таймаут? Или это как-то автоматически делается?
Если вы используете горизонтальное масштабирование, также называемое горизонтальным масштабированием, azure продолжит работу вашего приложения без перерыва по мере выделения новых ресурсов.
Azure автоматически разогреет приложение нового экземпляра и добавит балансировку нагрузки для автоматического распределения запросов между ними. Вам не нужно самостоятельно настраивать баланс нагрузки.
Подробнее о том, как работает автоматическое масштабирование Azure, см. здесь статья и эта статья.
«Azure автоматически разогреет приложение нового экземпляра» — предоставленные вами ссылки не говорят об этом — можете ли вы предоставить другие ссылки? По сути, я не хочу, чтобы экземпляр добавлялся в балансировщик нагрузки до тех пор, пока определенный URL-адрес не будет доступен с 200 OK или после жесткого тайм-аута в 2 минуты.
После масштабирования веб-приложения до экземпляра 2, если новый запрос отправляется на веб-сайт экземпляра по умолчанию, Azure разогреет веб-приложение нового экземпляра.
Вы можете написать тест, как показано ниже:
Добавьте приведенные ниже коды конфигурации в тег веб-сервера web.config, чтобы отслеживать все запросы:
<tracing>
<traceFailedRequests>
<clear/>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,iisnode" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-600" />
</add>
</traceFailedRequests>
</tracing>
Затем, если ваш сайт масштабируется до 2 экземпляров, после доступа к веб-приложению. Балансировка нагрузки не будет перенаправлять запрос на второй экземпляр, поскольку процесс экземпляра не запускается. Azure автоматически разогреет веб-приложение второго экземпляра.
Вы можете найти журнал, как показано ниже:
Результат журнала:
fr00030.xml(можно найти процесс 5860 старый экземпляр):
fr00031.xml (вы можете обнаружить, что процесс представляет собой новый экземпляр 8164 и занимает 4015 мс)
Кроме того, как говорит Байрон Тардиф, если вы хотите включить индивидуальный прогрев (прогрев всех страниц), вы можете использовать Модуль инициализации приложения.
Он также будет вызываться перед тем, как новый запрос получит доступ к вашему второму экземпляру веб-приложения.
Вы хотите использовать Инициализацию приложения в файле web.config для своего приложения.
вам нужно будет добавить что-то вроде этого:
<system.webServer>
<applicationInitialization >
<add initializationPage="/page-you-want-to-warm-up.php" hostName="your-app.azurewebsites.net"/>
</applicationInitialization>
<system.webServer>
Каждый раз, когда ваше приложение запускается, это может быть связано с подключением нового рабочего процесса (горизонтальное масштабирование) или даже просто с холодным запуском, вызванным новым развертыванием, изменением конфигурации и т. д. запросы на этого работника.
Подробнее об этом можно прочитать здесь: http://ruslany.net/2015/09/how-to-warm-up-azure-web-app-during-deployment-slots-swap/
Несмотря на то, что в этом посте говорится об использовании этого для прогрева сайта при выполнении операции подкачки, это также относится к холодному запуску и масштабированию.