2012-03-10 65 views
0

我有一個Web應用程序,不基於映射到數據庫記錄,使得每個AJAX POST並不需要或想要一個Tomcat會話持久性cookie大部分登錄用戶相關的行動。條件tomcat的粘性會話(集羣)

在極少數的ajax請求中,我有少量的servlet會話數據爲登錄用戶保存,我希望會話持續很長時間(只要他有瀏覽器開放),即使長時間不活動。

現在,我的理解是,有一個tomcat羣集,您的選擇粘性會話或複製會話。在大多數情況下,我希望我的負載均衡器將流量發送到最少加載的tomcat實例,並且servlet永遠不會獲取或創建會話。在極少數情況下,我需要一個會話並訪問少量的會話數據。

此外,我使用的是Apache mod-proxy。這是否限制了選擇?

如果我要選擇粘性會話負載平衡,那麼絕大多數不需要粘性的ajax請求都會轉到同一個tomcat服務器。但有人說,如果你不擔心故障轉移,粘性會話會提供更好的性能。

有人能告訴我什麼是正確的選擇在我的情況?

我的一個想法是,當我在tomcat中創建一個會話時,我還創建了一個MYSESSIONID cookie,用於將特定servlet(路徑)設置爲與tomcat sessionid相同的值。然後,在我需要訪問會話數據的所有少數servlet請求中,我通過這一個路由servlet,負載均衡器可以創建與MYSESSIONID cookie關聯的粘性會話。這是一個好的解決方案嗎?

Andy

回答

0

會話是全局的Web應用程序。它不綁定到webapp中的特定servlet。你的路由servlet沒有多大意義。

如果您不擔心故障切換,那麼粘性會話更容易。如果你需要集羣,這可能意味着你有很多併發用戶。所以平均來說,無論如何,所有服務器上的負載應該是相似的。

在另一方面,如果你在會議上的數據非常少,你的應用程序修改它很少,複製會話應該不了多少錢。您可以將故障轉移作爲額外的優勢,並且負載均衡器可以使用純循環算法,確保每臺服務器獲得與其他服務器相同數量的請求。