【发布时间】:2018-11-27 19:59:46
【问题描述】:
鉴于在 .net 4.5.2 和 OS 系列“4”(Windows 2012)上使用 Azure SDK 3.0 部署到 Azure 云服务 WebRoles (2)。
当网络应用程序启动时,我们想要加载一个缓存(从 blob 存储),这大约需要 10 分钟(我们已经考虑过移动它,但目前不能)
那么当 IIS 应用程序池回收时,我们希望站点保持正常运行。
目前云服务的默认 IIS 设置是:
- 加载时不启动 (autoStart / startMode)
- 每 20 分钟空闲一次 (idleTimeout)
- 每 29 小时循环一次 (periodicRestart)
- 以 HTTP 503 (loadBalancerCapabilities) 形式出现故障
因为我们默认为2个WebHost,所以我们想在不同的时间回收应用程序池。理想情况下,如果其中一个虚拟主机正在加载缓存,我们希望重定向来自站点的现有连接。
到目前为止,我们有一个启动任务脚本来重新配置 IIS AppPools
appcmd set config -section:system.applicationHost/applicationPools
与
/applicationPoolDefaults.autoStart:"True"
/applicationPoolDefaults.startMode:"AlwaysRunning"
/applicationPoolDefaults.processModel.idleTimeout:"00:00:00"
/applicationPoolDefaults.recycling.logEventOnRecycle:"Time,Requests,Schedule,Memory,IsapiUnhealthy,OnDemand,ConfigChange,PrivateMemory"
/applicationPoolDefaults.recycling.periodicRestart.time:"00:00:00"
/~"applicationPoolDefaults.recycling.periodicRestart.schedule"
/+"applicationPoolDefaults.recycling.periodicRestart.schedule.[value='06:00:00']"
/applicationPoolDefaults.failure.loadBalancerCapabilities:"TcpLevel"
例如
%windir%\system32\inetsrv\appcmd set config -section:applicationPools /applicationPoolDefaults.autoStart:"True" /commit:apphost
至于代码,我们已经研究了使用Busy 标志直到缓存加载。这似乎不会重新路由流量
RoleEnvironment.StatusCheck += WebRoleEnvironment_StatusCheck;
与
if (Busy)
{
e.SetBusy();
}
缺点是由于需要容器,这是在Application_Start 中完成的。我认为将LoadCache() 移动到RoleEntryPoint 的OnStart() 中太难了。
注意;我们还默认开启了“保持活动”。
问题;
- 我们如何在 WebHost 加载缓存时使其脱机?
- 我们应该更改 IIS 设置吗? https://azure.microsoft.com/en-gb/blog/iis-reset-on-windows-azure-web-role/
- 我们应该使用 IIS 8.0 应用程序初始化吗? http://fabriccontroller.net/iis-8-0-application-initialization-module-in-a-windows-azure-web-role/
- loadBalancerCapabilities 应该设置为什么? https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/failure
- 我们应该尝试错开回收吗?当我们扩展(添加更多实例)Does azure prevent that role instances are recycled at the same time?
【问题讨论】:
标签: azure azure-web-app-service azure-web-roles azure-cloud-services azure-load-balancer