2010-09-19 68 views
5

我的django支持的站點位於基於Apache的負載均衡器後面。還有一個處理靜態文件請求的服務器,但這很簡單。在多服務器環境中運行django站點 - 如何處理會話?

困擾我的是如何處理可由負載均衡器拋出到任何應用程序服務器的用戶?他們都共享相同的數據庫集羣(這是否聰明?或者我應該在這裏分開它?),所以我唯一需要關心的是會話。

現在會話存儲在內存中,以提高性能。我寧願將它們留在那裏,所以我需要做的是確保同一個用戶總是碰到同一個應用程序服務器。

我想起了幾個簡單的解決方案。

1)使其基於IP。可以說,奇數IP號碼打到服務器A甚至數字擊中B。但是如果用戶在代理之後或者經常改變IP,該怎麼辦?

2)當一個請求到達負載均衡服務器時,我可以嘗試檢查它的cookie並查看哪個服務器應該處理該請求。這有可能/有意義嗎? 3)我知道使用mod_proxy_ajp的J2EE解決方案處理這種情況,儘管我不知道幕後發生了什麼。那裏可以使用Django嗎?

或者也許有其他的方法來集羣Django的呢?

+2

如果你能緩解腰背上的要求,直接在RAM緩存的會議,一個解決方案,不需要粘性會話負載平衡器將使用數據庫支持的會話(可能的cached_db會話)併爲數據庫服務器/池提供一大堆RAM以保持性能。不如內存中會話快,但負載均衡器的虛擬化程度更低... – 2010-09-19 17:27:48

回答