7

在应用服务上启用自动缩放后,Azure 将根据设置规则根据需要添加实例。我总是从至少 2 个实例开始。我想确保在应用程序代码完全初始化之前,流量不会被定向到新的应用程序服务实例。我怎样才能做到这一点?是否可以添加超时?还是以某种方式自动完成?

4

2 回答 2

10

您想在应用程序的 web.config 文件中使用应用程序初始化。

您需要添加如下内容:

<system.webServer>  
  <applicationInitialization >  
    <add initializationPage="/page-you-want-to-warm-up.php" hostName="your-app.azurewebsites.net"/> 
  </applicationInitialization>  
<system.webServer> 

每次您的应用程序启动时,这可能是因为新的工作人员上线(水平扩展),甚至只是由新的部署、配置更改等导致的冷启动...... ApplicationInitialization 将在接受之前执行以预热站点对该工作人员的请求。

您可以在此处阅读有关此内容的更多信息:http ://ruslany.net/2015/09/how-to-warm-up-azure-web-app-during-deployment-slots-swap/

尽管该帖子正在讨论在执行交换操作时使用它来预热站点,但它也适用于冷启动和横向扩展。

于 2017-06-15T18:08:35.140 回答
5

我怎样才能做到这一点?是否可以添加超时?还是以某种方式自动完成?

如果您使用水平缩放(也称为横向扩展和横向扩展),Azure 将使您的应用程序在供应新资源时继续运行而不会中断。

Azure 将自动预热新实例的应用程序并添加负载平衡以自动在它们之间分配请求。您不需要自己单独配置负载均衡。

有关 azure 自动缩放如何工作的更多详细信息,您可以参考这篇文章和这篇文章


“Azure 将自动预热新实例的应用程序”-您提供的链接没有这样说-您能否提供其他参考资料?在使用 200 OK 或硬超时 2 分钟后可以访问特定 URL 之前,我基本上不希望将实例添加到负载均衡器。

将 Web 应用扩展到 2 个实例后,如果将新请求发送到默认实例网站,Azure 将预热新实例的 Web 应用。

您可以编写如下测试:

在 web.config 的 webserver 标签中添加以下配置代码以跟踪所有请求:

<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 个实例,则在您访问 Web 应用程序之后。负载平衡不会将请求重定向到第二个实例,因为实例的进程没有启动。Azure 将自动预热第二个实例的 Web 应用程序。

您可以找到如下图所示的日志:

在此处输入图像描述

日志结果:

在此处输入图像描述

fr00030.xml(你可以发现进程是 5860 旧实例):

在此处输入图像描述

fr00031.xml(你会发现进程是8164个新实例,需要4015毫秒)

在此处输入图像描述

此外,正如 Byron Tardif 所说,如果您想启用自定义预热(预热所有页面),您可以使用Application Initialization Module

在新请求访问您的第二个 Web 应用程序实例之前,它也会被调用。

于 2017-06-15T07:07:52.020 回答