如何编写 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下的代码完成。
我有一个包含 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下的代码完成。