2015-12-21 101 views
0

我在Azure的云服务中运行Web Api服务。我注意到很多人都在这里,第一次打电话给服务似乎需要永远(差不多1分钟),随后的电话很正常。我环顾四周,就约了几个决议,一个是加入启动脚本部署Cloud Service Always On不工作

REM *** Prevent the IIS app pools from shutting down due to being idle. 
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 

REM *** Prevent IIS app pool recycles from recycling on the default schedule of 1740 minutes (29 hours). 
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.time:00:00:00 

的角色启动以及应用程序池的启动模式属性设置为AlwaysOn杂志。在做出这些更改后,我仍然会在最初部署Cloud Service并触及Web服务时看到延迟问题。那么这里会发生什么?在启动Cloud Service时是否需要编写脚本来“预热”Web服务?

回答

1

我有一个类似的问题,Isaac,并且正如您所建议的那样,在新部署(自动化)之后向API添加了几个调用,以便生产用户不会遇到延迟。

我也很好奇,如果有更好的方法。

+0

你是怎么做到的? Azure Jobs?一个在启动时运行的ping命令?我很好奇什么是做这件事的最好方法。 –

+0

在我们的场景中,我们的DevOps流程(使部署和构建自动化)使我们能够在部署成功结束时运行应用程序(Visual Studio版本管理)作为定义的步骤。我们只是构建了一个在加载时运行AJAX调用的应用程序。 – DanielG

+0

够公平的,我可以看看类似的东西。谢谢你的提示。我不打算将你的答案标记为决议,因为我有兴趣看到其他人的答复。 –

0

您可以使用暂存环境进行零宕机部署。将您的应用部署到临时插槽并在那里预热。当你准备好时,只需交换。 Azure将消耗当前的连接并顺利地改变端点。 Check this.

+0

但是你仍然需要正确地预热应用程序?所以练习是一样的,除了你减少生产槽的延迟。我跟随? –

+0

无论您何时部署新代码,应用程序池都会回收,但无法防止此问题。无论您是在生产环境还是临时插槽部署,新应用程序都需要一段时间才能启动。 –

0

我使用Azure调度程序作业,每5分钟在我的网址上执行GET操作。无论您经常需要,您都可以安排它。它也默认启用自动重试,并且您也可以为失败创建操作。