当负载均衡器分配不同的计算机来为请求提供服务时,会触发哪些事件。
Say Client A首次请求page1,负载均衡器分配Server1以提供请求。整个应用程序/页面生命周期将被执行。
现在,如果客户端A发送另一个获取page2的请求,但这次如果负载均衡器分配Server2来提供请求,那么整个应用程序/页面生命周期是否会被执行。如果没有,那么在这种情况下将触发哪些事件。
转到更具体的问题: - 它会再次执行session_start吗?
编辑:很遗憾忘了提到我使用Azure而不是 可以控制设置/更改平衡器的配置。此外, 我们的管理员不会这样做。我们正在申请 发展方。
另请注意:我们 NOT 允许使用proc会话。所以不能 使用sql azure来管理会话。
答案 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,您会发现一些有用的信息。