具有负载平衡的会话cookie(非粘性会话)

时间:2012-07-20 07:21:38

标签: load-balancing session-cookies sessionid sid

我扫描了RFC 6265但未找到以下答案。

我想在一个webapp的多个服务器前放置一个天真的循环式负载均衡器。负载均衡器提供粘性会话。因此,客户端通常会在连续请求时从一个应用服务器跳到另一个应用服务器。

在第一个连接上,客户端没有SID,并随机路由到服务器A.
服务器A使用会话cookie(nonce)进行响应。

在下一个连接上,客户端在HTTP标头中包含来自服务器A的SID。 这次客户端被随机路由到服务器B. 服务器B看到SID(希望!)与它发出的任何SID都不匹配。 怎么了?服务器B是忽略“坏”SID,还是抱怨,或忽略请求,或者是什么?

我的想法是,我根本不想使用会话cookie。我想避免粘性的所有复杂性。但我也知道我的服务器可能会产生 - 而且更多的是寻找 - 会话cookie。

如何确保服务器忽略(或更好地设置)会话cookie?

1 个答案:

答案 0 :(得分:4)

我认为对此的答案会因服务器上运行的应用程序而有很大差异。虽然任何负载均衡的负载均衡器具有粘性会话,但只要池中的所有服务器都可以通过集中式数据库访问相同的会话状态,就可以在没有它们的情况下进行操作。

由于您正在讨论会话ID,我猜测应用程序确实依赖会话状态才能运行。在这种情况下,如果请求带有“坏”会话ID,则很可能会丢弃该用户并提示用户登录 - 再次,精确行为取决于应用程序。如果您要完全禁用会话cookie,问题可能会变得更糟,因为即使没有ID也可能导致登录提示。

如果您确实希望避免负载均衡器的复杂性,则需要引入一些机制,通过该机制,所有服务器都可以处理来自所有会话的请求。通常,这采用集中式数据库或其他一些共享存储的形式。这允许维护会话状态,而不管处理该特定请求的服务器。

维护会话状态是负载平衡的关键点之一(双关语),但忽略或避免会话cookie不是解决方案。