使用Load Balancer的ASP.NET应用程序生命周期

时间:2013-03-05 09:51:18

标签: c# .net azure asp.net-mvc-4 load-balancing

当负载均衡器分配不同的计算机来为请求提供服务时,会触发哪些事件。

Say Client A首次请求page1,负载均衡器分配Server1以提供请求。整个应用程序/页面生命周期将被执行。

现在,如果客户端A发送另一个获取page2的请求,但这次如果负载均衡器分配Server2来提供请求,那么整个应用程序/页面生命周期是否会被执行。如果没有,那么在这种情况下将触发哪些事件。

转到更具体的问题: - 它会再次执行session_start吗?

  

编辑:很遗憾忘了提到我使用Azure而不是   可以控制设置/更改平衡器的配置。此外,   我们的管理员不会这样做。我们正在申请   发展方。

     

另请注意:我们 NOT 允许使用proc会话。所以不能   使用sql azure来管理会话。

3 个答案:

答案 0 :(得分:1)

这些话来自微软自己:

  

Microsoft不会在Azure上发布负载平衡算法   不保证会循环播放。我们内心   知道它不像循环法那么简单。有多个   在制定最合适的时候考虑的因素   用于指导您的请求的资源。例如,网络接近度   如果机器有能力,请考虑到   提供此请求,因此您可能会在算法中看到某种偏见   取决于服务的位置。有一些内部   优化包含在算法中以利用内部知识   结构,网络性能和可用容量,负载类型   平衡器(软件/硬件)等......负载平衡的目标   algorithm是将您的请求路由到可用资源中   最有效的方式。产品团队称其为“大致圆形”   罗宾“算法。

     

唯一记录的负载均衡算法在Traffic Manager上   可用于控制用户流量分配。

答案 1 :(得分:0)

Windows Azure使用 Round Robin 负载均衡方案,因此进程内会话在Windows Azure中是“NO GO”(尤其是云服务)。在上面提到的场景中,当客户端请求从“服务器2”提供服务的“page2”时,session_start事件将被触发。

您可能希望在Windows Azure中查看Windows Azure Caching功能,并将其用作进程内会话管理的替代方法。事实上,有一个自定义会话状态提供程序,它使用此缓存:http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx

答案 2 :(得分:0)

如上所述,为了在webfarms中共享会话,必须在所有服务器http://msdn.microsoft.com/en-us/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations之间共享计算机密钥 在proc中的默认Asp.net会话不允许太多的可伸缩性(直到你没有移动到sql会话),但这可以很容易地改变为不在proc中,导致会话独立于你的应用程序和解决了拥有多个服务器的问题http://msdn.microsoft.com/en-us/library/ms972429.aspx

如果您需要扩展并有一些现金支出,请考虑使用StateServer会话(进程外)或类似Memcached。

这就是说,无论服务器场中有多少服务器,asp.net生命周期总是按请求完全执行。但是asp.net Session的工作方式保持不变(session_start将始终每个会话触发一次)它的配置有哪些变化(sql,stateserver等)。 Have a look at this article,您会发现一些有用的信息。