1

当负载均衡器分配不同的机器来处理请求时会触发哪些事件。

假设客户端 A 第一次请求 page1,负载均衡器分配了 Server1 来处理该请求。整个应用程序/页面生命周期将被执行。

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

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

编辑:很抱歉忘记提及我正在使用 Azure 并且无法控制设置/更改平衡器的配置。此外,我们的管理员不会这样做。我们在应用程序开发方面。

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

4

3 回答 3

1

这些话来自微软自己:

Microsoft 不会在 Azure 上发布负载平衡算法, 也不保证它将是循环的. 在内部我们知道它不像循环那样简单。在制定最合适的资源来引导您的请求时,需要考虑多种因素。例如,考虑到网络邻近性,前提是该机器有能力处理此请求,因此您可能会在算法中看到某种偏差,具体取决于服务的位置。算法中包含一些内部优化,以利用内部结构、网络性能和可用容量、负载均衡器类型(软件/硬件)等方面的知识......负载均衡算法的目标是将您的请求路由到可用资源最有效的方式。产品团队称其为“大致循环”算法。

唯一记录在案的负载平衡算法在流量管理器 上,可用于控制用户流量分布。

于 2013-03-05T14:24:12.697 回答
0

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

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

于 2013-03-05T10:30:08.713 回答
0

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

如果您需要扩展并有一些现金可以使用,请考虑使用 StateServer 会话(进程外)或 Memcached 之类的东西。

这就是说,asp.net 生命周期总是在每个请求中完全执行,无论场中有多少服务器。但是 asp.net 会话的工作方式保持不变(每个会话总是会触发一次 session_start),改变的是它的配置(sql、stateserver 等)。看看这篇文章,你会发现一些有用的信息。

于 2013-03-05T10:32:05.803 回答