2013-02-24 40 views
3

如果我使用具有应用程序控制的会话粘性的HTTP负载均衡器(在这种情况下为Amazon的AWS),负载平衡器显然必须记住映射中的所有会话Cookie及其目标实例。 因此,这张全球地图将会/必须保留“session-cookie与实例”的关系。会话如何与Amazon AWS的负载均衡器知道会话Cookie已过期?

如果Web应用程序用户决定关闭浏览器,则会话超时后,会话将在应用程序服务器上静静地死去。

这意味着负载均衡器在他的全局映射中仍然具有“会话 - cookie到实例”关系。由于此映射现在无用,会话cookie没有过期日期,因此它不得不进行垃圾回收(以释放资源)。

我的问题是:

  1. 如何负载平衡器一般处理这种情况下不耗尽资源?

  2. 如何在特定情况下优先处理Amazon AWS负载平衡器,而不会耗尽资源?

回答

3

通常应用感知(第7层)的LB将保持会话的(大)的地图。它可能:

  1. 注入自己的cookie插入到客户端的第一个反应(和 客户端将重新发送后续请求,所以LB能够确定 目标Web服务器)

  2. 重写公知的会话cookie(如 JSESSIONID)通过,例如,将信息附加到它的是 识别目标web服务器(并且其在LB将呈现给在后续请求web服务器之前去掉)

关键是LB不会将会话维护到目标地图。该信息驻留在每个客户端的Cookie中。

我相信AWS会做#1(使用名为AWSELB的cookie)。

+0

LB也可以做其他的事情,例如在HTML页面中重写URL到客户端,如果客户端不支持cookies,这将很有用。 – jarmod 2013-03-15 11:18:51

+0

谢谢。是的,它看起来像是#1。 AWS设置一个名为AWSELB的cookie。这个cookie非常大,显然是HEX编码的。我尝试了一个简单的解码,但它没有任何用处。我想它也会以某种方式压缩,以尽可能减小尺寸。 – chi 2013-05-22 09:18:16

+0

谢谢,我认为这是正确的,但是当我为AWS LB选择“使用应用程序生成的cookie”(例如JSESSIONID)时,AWS LB实际上不会设置AWSELB cookie。但JSESSIONID由LB设置,它看起来与App Server创建的cookie完全相同。因此它不能包含LB的有用实例路由信息,除非LB记得这一点。因此,LB必须将JSESSIONID信息**与实例信息**一起存储/如何能够将未来的请求与他相同的JSESSIONID路由到正确的后端实例。对? – chi 2017-03-02 07:38:02