2012-05-23 87 views
3

我們使用的是亞馬遜網絡服務(AWS),我們有多個網絡服務器和負載均衡器。 Web服務器的問題是,$ _SESSION對每個服務器都是唯一的。我在$ _SESSION中保存了關於用戶的一些信息。如何使用Amazon Web Services(AWS)同步會話?

同步此信息的正確方法是什麼?有沒有什麼辦法可以統一這個地方,這些會話在哪裏,或者我應該使用MySQL來存儲這些數據(我真的不喜歡最後一個選項)?

+1

爲什麼你試圖避免將會話存儲在數據庫(或特定的MySQL)? –

+0

因爲我們的產品已經準備就緒,我們只需要進行擴展。改變它現在的工作方式將需要改變網站的核心,這將需要時間和多個地方的變化,所以我們試圖找到最簡單的溶劑,這將需要幾乎沒有變化。 –

回答

4

雖然概念上類似於你正試圖避免由於某種原因,MySQL的選項,使用內Amazon Web Services (AWS)一個相當有吸引力的選擇是最近推出的Scalable Session Handling in PHP Using Amazon DynamoDB,其中涉及在PHP 典型的會話處理是不可擴展,因此要求某種定製解決方案無論如何:

會話用於保存跨多個HTTP 請求[...]的短期數據。 PHP的本地會話處理程序會將 會話數據存儲到本地文件系統;但是,這種方法在分佈式Web應用程序中變得不可靠 。在隨後的請求中, 用戶可能不會路由到同一臺服務器,導致數據有效地被遺忘。用戶將被註銷並且感到困惑。

爲了解決這個問題,PHP開發人員已經實現定製的解決方案 爲存儲其用戶的會話數據使用數據庫, 共享文件系統,內存緩存服務器,防篡改的餅乾,和其他 存儲機制。 [...] [重點煤礦]

根據您的使用情況,你可能想給這個潛在的非常快的會話存儲一個相應的嘗試。

1

要添加到上面的回答,你想找的像DynamoDB分佈式緩存是一個付費的亞馬遜服務。它的使用非常快速而且非常出色,但如果您正在尋找其他一些開源替代品,則可以查看以下內存讀取/寫入選項。

  1. Memcached - 高讀/寫比的理想選擇。來自開發者社區的輕量級和強大支持。
  2. JCS - Java緩存系統 - 非常靈活,適用於面對低讀寫比的系統。此外,它非常適合自定義複製,並且依賴於粘性的級別,因爲ELB保持一定程度的粘性,所以它可以像Web應用程序的簡單內存讀/寫一樣快。所以一旦會話被引導到另一個實例,只有這樣纔會複製會話信息。我們利用這一點,並且迄今取得了良好的結果。
  3. EhCache - 建立緩存框架,但其分佈式緩存產品並不完全免費使用。可能是一個矯枉過正,因爲它確保完全複製,在這種情況下可能並不是真正需要的。
相關問題