在预热之前发生Azure Web App交换

时间:2019-02-22 13:33:06

标签: azure azure-web-sites

自从我发布Web应用程序的新版本并进行从暂存到生产的交换大约一个星期以来,实际上似乎在之前交换了预热初始化。

由于它是大型应用程序,因此需要花费五分钟以上的时间来预热站点,从而使应用程序无响应。

我有正式的Azure支持,但是响应此请求花了很长时间,但我仍然没有答案。

如果不关闭整个网站八分钟,我将无法解决我们平台上的任何问题或发布新版本。这是一个访问量很高的网站,有付费客户。

有人知道吗?

  • 有什么我可以调查自己的东西吗?
  • 一种解决方法或我可以看看自己的任何提示以尝试解决或解决此问题?

enter image description here

其他信息

我确实使用applicationInitialization,并且我看到Azure正在访问页面-它只是发生在交换之后 而不是之前

<system.webServer>
    <applicationInitialization>
        <add initializationPage="/nl" hostName="mydomain.com" />
        <add initializationPage="/warmup-application-for-azure" hostName="mydomain.com" /> (special page just for warming up services)
        <add initializationPage="/deeplink1" hostName="mydomain.com" />
        <add initializationPage="/deeplink2" hostName="mydomain.com" />
        [etc]
    </applicationInitialization>
</system.webServer>

4 个答案:

答案 0 :(得分:1)

相对于这个问题,也许不是100%,但是由于我在热身方面也遇到类似的问题,所以我想分享一下我的解决方法。

我曾经遇到过自动缩放问题,因为由于URL重写模块,我的节点没有被预热。因此,如果您的应用程序中有URL重写该怎么办,请确保您要检查

 <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />  

现在,它在official documentation中,并且具有链接to common problems

答案 1 :(得分:0)

有时候,点击站点的根URL不足以完全预热应用程序。例如,可能有必要点击ASP.NET MVC应用程序中的所有重要路由,或者预先填充内存中的缓存。那是应用程序初始化模块可以提供帮助的地方。

当您使用IIS(和Azure)提供的预热功能而不是那些老式的方法时,并且如果部署到App Service,只需在确保始终触发上添加一个插槽设置即可。如下所示: enter image description here

本教程介绍了如何使用最近启用的Application Initialization Module来完全warm up your application prior to swapping it into production

答案 2 :(得分:0)

这是一个Azure错误,已由Microsoft Azure团队确认。

答案 3 :(得分:-1)

这是您应该考虑的重要事项:

  • 除非您指定天蓝色需要向您的网站请求的URL地址,否则它将如何知道。如果不这样做,它只会调用应用程序的根目录

  • 即使您指定了URL并且需要对URL进行授权/身份验证,如何也可以通过Azure自动登录网站并调用您指定的URL。

您有两种选择来处理它。

1)编写您自己的热身api,以通过授权/身份验证调用您的Web应用程序。然后创建一个调度程序,每隔一小时或半小时调用一次应用程序。它还使您可以保持整个应用程序正常运行和运行。您还可以在“应用程序设置”下设置AlwaysOn功能。临时插槽成功部署后,您还可以在CI / CD管道上触发此api。

2)如果您不想触碰CI / CD管道或任何原因并且不想编写api,则应登录Web应用程序,浏览每个页面并手动进行预热。然后,您可以毫无问题地进行交换。