基於會話cookie的負載平衡?

基於會話cookie的負載平衡?

我有一個將在多個伺服器上運行的網路應用程式。我想確保使用相同會話(值為 JSESSIONID=x 的 HTTP cookie 標頭)的請求始終與同一台伺服器進行通訊。也就是說,直到在某些情況下會話「移動」到不同的伺服器(不僅當伺服器發生故障時,而且還由於某些伺服器端快取和效能策略)。

我的網頁應用程式在這種情況下運作良好,但是什麼樣的負載平衡器我應該使用嗎?顯然,我可以在應用程式層級進行負載平衡,但我正在尋找更有效的東西。也許是專門的硬體(也許不是)?我花不了很多錢...

更新

感謝您到目前為止的回答:我現在發現,HA代理可以配置為尋找某些 cookie。我還不知道它們是否還允許動態更新映射(當會話“移動”到不同的應用程式伺服器時)?

是否有(廉價的)硬體解決方案也可以做到這一點? (這會比額外的負載平衡伺服器花費更少嗎?)

答案1

使用 ”粘性(持久性)會話通常不建議這樣做。

您希望您的會話是動態的。對於 Java,它通常儲存在記憶體中並透過多播叢集到所有伺服器。更常見的是,會話將儲存在資料庫中。

如果您的 Web 應用程式需要黏性會話,則您的體系結構可能需要改進。

就負載平衡器解決方案而言,有許多解決方案,這裡已廣泛討論了這個主題。我喜歡LVS。其他人喜歡nginx鑄造網絡被博科收購的公司生產了一些可靠的商業產品。它們是硬體負載平衡器的主要商業解決方案。 梭魚還有一個基於 Linux/OSS 的“設備”,可用於負載平衡。

答案2

那麼為您提供幾個解決方案。

編寫一個會話儲存方法,使用資料庫來儲存會話訊息,如果它位於多個伺服器上,則可以對資料庫進行叢集。這實際上取決於您決定如何組織事物,其他想法是在網頁伺服器後面使用帶有記憶體快取的伺服器並將會話儲存在其中。

這樣,您就可以在一個地方進行會話,並且客戶端定向到哪個 Web 伺服器不再重要。

答案3

在花錢之前...先看看開源負載平衡器之類的軟體或者HA代理

我同意Warner和Stu的建議。

答案4

Pound - 反向代理與負載平衡器

Pound 程式是 Web 伺服器的反向代理、負載平衡器和 HTTPS 前端。 Pound 的開發目的是在多個 Web 伺服器之間分配負載,並為本身不提供 SSL 包裝器的 Web 伺服器提供方便的 SSL 包裝器。 Pound 根據 GPL 分發 - 無保證,可以免費使用、複製和贈送。

這可能是您正在尋找的

http://www.apsis.ch/pound/

相關內容