如何编写 Azure 中 CloudService 实例的预热脚本?

How to script warm up of CloudService instances in Azure?

我有一个包含 2 个实例的 CloudService 经典应用程序,我将它们称为 bob_app_001 和 bob_app_002,每个 BobApp 中有 5 个实例。

该应用程序是一个 c# Api,它有一个我们用于在 ~/ping 上进行监控的端点。

我目前通过将其中一项服务从流量管理器中取出来进行部署,让流量流失,然后 VIP 将登台交换到生产槽,然后重新添加到流量管理器。这里的问题是前几个请求总是很慢,因为服务会自行启动。我试图通过在将池放回旋转之前点击 ping 端点来旋转所有与网络相关的东西来避免这种情况。

我如何编写脚本从 bob_app_001 获取所有应用程序的 url,然后我可以通过调用 Invoke-WebRequest 循环调用每个应用程序,在 ping 端点上预热服务,然后再将其放回VIP 交换后的 TrafficManager。

getting all the app's urls from bob_app_001 这将是棘手的部分,尤其是在不进入应用程序内部并以某种方式公开 URL 的情况下(取决于您的路由设置方式)

我建议改用 Application Initialization Module

要启用该模块,您需要在 web.config 中创建一个 applicationInitialization 部分,您可以在其中定义 url 以启动初始化任务。

<system.webServer>  
  <applicationInitialization>  
    <add initializationPage="/app/init" />  
  </applicationInitialization>  
<system.webServer>

然后一个轻量级控制器为你做初始化:

public class InitController : ApiController
{
    [Route("/app/init")]
    public IHttpActionResult Index()
    {
        //do your initialisation / warmup here

        return Ok();
    }
}

我在这个例子中遗漏了任何安全概念,但最好从应用程序内部限制对 /app/init 的访问(并且只能 运行 一次)

设置完成后,部署槽之间的交换操作将完成after "app/init" url下的代码完成。