好吧,我已經得到了這個完全罕見的負載均衡PHP網站的獨特場景。令人失望的是 - 它以前不是負載平衡的。現在我們開始發現問題了......負載均衡羣集中的PHP會話 - 如何?
目前唯一的問題是PHP會話。當然,最初沒有人想到這個問題,所以PHP會話配置保持其默認值。因此,兩臺服務器都擁有自己的小會話文件,而悲傷的是獲取下一個請求的用戶被拋出到另一臺服務器,因爲他沒有在第一個服務器上創建的會話。
現在,我一直在閱讀如何解決這種情況的PHP手冊。在那裏,我發現了session_set_save_handler()
的好功能。 (巧合的是,SO上的this topic)整潔。除了我將不得不在網站的所有頁面中調用此函數。未來頁面的開發人員也必須記得隨時調用它。感覺有點笨拙,更不用說可能違反了一打最好的編碼習慣。如果我只需要翻轉一些全局配置選項和Voilà - 這些會話都會神奇地存儲在數據庫或內存緩存中或其他內容中,那將會更好。
有關如何做到這一點的任何想法?
補充:澄清 - 我希望這是一個標準的解決方案標準的情況。僅供參考 - 我有一個MySQL數據庫可用。當然,必須有一些現成的代碼可以解決這個問題嗎?當然,我可以寫我自己的會話保存的東西, Greg指出的
auto_prepend
選項似乎很有前途 - 但這會讓人覺得重新發明輪子。 :P
添加2:負載平衡DNS基礎。我不知道這是如何工作的,但我想這應該是像 this。
新增3: OK,我看到一個解決方案是使用
auto_prepend
選項在每個腳本插入到
session_set_save_handler()
打個電話,寫我自己的DB留存,也許在調用
memcached
扔有更好的表現。很公平。
是否還有一些方法可以避免自己編碼這一切?就像一些着名且經過充分測試的PHP插件一樣?
增加了很多,很久以後:這是我到底去的方式:How to properly implement a custom session persister in PHP + MySQL?
而且,我只是手動包括會話處理器中的所有頁面。
這不是正確的方法。問題是PHP會話,忘記數據庫,我們正在談論PHP。這個解決方案只是一個解決方法。 – Daniel 2011-12-14 13:37:16