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

时间:2017-12-21 10:41:29

标签: c# azure application-warmup

我有一个带有2个实例的CloudService Classic应用程序,我将其称为bob_app_001和bob_app_002,每个BobApp都有5个实例。

该应用程序是一个c#Api,它有一个我们用于监视〜/ ping的端点。

我目前通过从Traffic Manager中取出其中一项服务进行部署,让流量耗尽,然后VIP将分段交换到生产槽,然后重新添加到Traffic Manager。这里的问题是,当服务自我调整时,前几个请求总是很慢。我试图通过在将池放回轮换之前点击ping端点来调整所有与Web相关的东西来避免这种情况。

我如何编写脚本从bob_app_001获取所有应用程序的URL,然后我可以在ping端点上为每个应用程序调用Invoke-WebRequest,以便在将其放回TrafficManager之前加热服务贵宾互换后。

1 个答案:

答案 0 :(得分:3)

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(并且只运行一次)

设置完成后,部署插槽之间的交换操作将完成 afte r“app / init”url下的代码完成。