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

Если для службы приложений включено автомасштабирование, Azure будет добавлять экземпляры по мере необходимости на основе установленных правил. Я всегда начинаю как минимум с 2 экземпляров. Я хотел бы убедиться, что трафик не направляется в новый экземпляр службы приложений, пока код приложения не будет полностью инициализирован. Как я могу это сделать? Можно ли добавить таймаут? Или это как-то автоматически делается?


person Ennis    schedule 14.06.2017    source источник


Ответы (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 мс)

введите описание изображения здесь

Кроме того, как говорит Байрон Тардиф, если вы хотите включить индивидуальный прогрев (прогрев всех страниц), вы можете использовать Модуль инициализации приложения.

Он также будет вызываться перед тем, как новый запрос получит доступ к вашему второму экземпляру веб-приложения.

person Brando Zhang    schedule 15.06.2017
comment
Спасибо, но это не ответ на мой вопрос. Я понимаю, как автоматическое масштабирование обычно работает со службами приложений. Что мне нужно знать, так это то, как Azure определяет, когда приложение прогревается, чтобы оно могло обслуживать трафик. Вы говорите, что Azure автоматически разогреет приложение нового экземпляра — предоставленные вами ссылки не говорят об этом — можете ли вы предоставить другие ссылки? По сути, я не хочу, чтобы экземпляр добавлялся в балансировщик нагрузки до тех пор, пока определенный URL-адрес не будет доступен с 200 OK или после жесткого тайм-аута в 2 минуты. - person Ennis; 15.06.2017
comment
Потрясающий ответ! Спасибо, что поделились ссылкой на модуль инициализации приложений. Это также поможет нам решить эту проблему для свопов!! - person Ennis; 16.06.2017
comment
На сайте, на который вы ссылаетесь, есть вопрос без ответа для модуля инициализации приложения: если вы укажете такое имя хоста, как вы можете быть уверены, что он разогревает правильный экземпляр в настройке с несколькими экземплярами (например, автомасштабирование). - person Josh Mouch; 17.01.2018

Вы хотите использовать Инициализацию приложения в файле 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/

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

person Byron Tardif    schedule 15.06.2017
comment
На сайте, на который вы ссылаетесь, есть вопрос без ответа: если вы укажете такое имя хоста, как вы можете быть уверены, что он разогревает правильный экземпляр в настройке с несколькими экземплярами (например, автомасштабирование). - person Josh Mouch; 17.01.2018
comment
логика инициализации приложения выполняется в экземпляре, где приложение запускается, другими словами, в тот момент, когда приложение назначается новой машине, этот экземпляр знает, что он должен загрузить приложение, что является частью процесса назначения приложения, когда это происходит Выполняется логика инициализации приложения, все это является внутренним для экземпляра и не маршрутизируется через DNS, где вы нажмете, какой экземпляр мне следует разогреть? проблема - person Byron Tardif; 19.01.2018
comment
@ByronTardif, что произойдет, если вы пропустите имя хоста? - person Rob Sedgwick; 06.02.2018
comment
Я думаю, что имя хоста является обязательным свойством - person Byron Tardif; 08.02.2018
comment
@ByronTardif я не думаю, что это работает ... по крайней мере, не так, как я ожидал, потому что после замены, если я нажму на любую страницу, у меня будет огромное время загрузки, как будто не было прогрева ... - person Leonardo; 04.04.2018
comment
Я знаю, что это старая тема. Но было ли когда-нибудь решение? Я вижу такое же поведение, как описано в комментарии @ByronTardif. Новый экземпляр начинает получать запросы до загрузки страницы инициализации моего приложения. - person Bob; 30.05.2019