2013-02-24 54 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