2014-11-06 93 views
1

说明Azure的云服务:IIS之前准备

我得到的是一个网站的云服务托管Web角色缩放在网站(Web角色)实例临危请求。 我们使用自定义监控(工作者角色)处理可预测的负载峰值,该负载峰值将根据预测的负载配置文件周期性放大或缩小。 该部分正在工作。

问题

后,网站的新实例由监控安装,我们只是有其要求达到的新实例之前,新的实例是完全加载用户的情况。它导致网页浏览器上无法访问的网站空白页面。鉴于我们典型的目标客户,这是非常糟糕的。 这种情况发生在测试人员在进行规模化过程中(大约第一次)连接到网站的情况。

难道我的问题是,有没有办法确保Web角色已完全加载IIS7,启动应用程序并完成所有网站热身过程,然后再发送任何请求? 或者以更一般的方式,我们可以自己决定哪些实例可用于负载平衡器?我的意思是我假设有一个内置的云服务负载平衡器,可以自动分配请求。

在此先感谢。

回答

3

请参阅http://blogs.msdn.com/b/kwill/archive/2012/09/19/role-instance-restarts-due-to-os-upgrades.aspx,特别是常见问题#5和相关代码。

如果您的网站需要几分钟的时间预热(标准 IIS/ASP.NET预编译和模块加载,或热身 高速缓存或其他应用程序特定任务的热身),那么你的客户可能会遇到 断电或随机超时。在角色实例重新启动并且您的OnStart代码完成后,您的角色实例将被放回 负载平衡器轮转中,并且将开始接收传入请求。如果 您的网站仍在热身,那么所有这些传入请求 将排队并超时。如果您的网络角色只有2个实例,则IN_0仍处于热身状态,但IN_1正在重新启动客户操作系统 更新,而IN_0仍将占用 传入请求的100%。这可能会导致您的服务完全中断,直到您的 网站在两个实例上完成预热为止。建议使用 将您的实例保留在OnStart中,这会使其保持在忙碌状态 ,在此状态下它不会接收来自负载平衡器的传入请求,直到 您的预热完成。您可以使用下面的代码来完成这个 :

public class WebRole : RoleEntryPoint 
{ 
    public override bool OnStart() 
    { 
     // For information on handling configuration changes 
     // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. 
     IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName()); 
     string ip = null; 
     foreach (IPAddress ipaddress in ipEntry.AddressList) 
     { 
      if (ipaddress.AddressFamily.ToString() == "InterNetwork") 
      { 
       ip = ipaddress.ToString(); 
      } 
     } 

     string urlToPing = "http://" + ip; 
     HttpWebRequest req = HttpWebRequest.Create(urlToPing) as HttpWebRequest; 
     WebResponse resp = req.GetResponse(); 
     return base.OnStart(); 
    } 
} 
+0

感谢kwill细节上的配置,这正是我一直在寻找。 由于部署策略,我无法尽快进行测试,但当我获得更多结果时,我会保持此帖为最新版本。 – Quentin 2014-11-12 09:57:09

+0

我测试过它,它工作。我将这个方法的内容封装在一个while([boolean])中,以确保它不会因为TimeOutException而继续。 – Quentin 2014-11-14 11:27:10

0

迟到了,但云服务背后坐镇负载平衡器。负载平衡器具有一个探测功能,用于评估应用程序实例是否可以接收请求。您可以配置探测器向应用程序实例发出http请求,以检查应用程序是启动还是关闭以及其他设置。

- 关于负载均衡

http://azure.microsoft.com/blog/2014/04/08/microsoft-azure-load-balancing-services/

信息 - 在服务防守

https://msdn.microsoft.com/en-us/library/azure/jj151530.aspx

+0

感谢您的信息。 我们不会为kwill解决方案,但我会看看下一次。 – Quentin 2015-09-10 12:43:32