對應用伺服器做了負載平衡之後如何保持session等記錄使用者登入狀態的會話資訊?

來源:互聯網
上載者:User
對應用伺服器做了負載平衡之後如何保持session等記錄使用者登入狀態的會話資訊?用cookie?但是這樣覺得不太安全。

回複內容:

對應用伺服器做了負載平衡之後如何保持session等記錄使用者登入狀態的會話資訊?用cookie?但是這樣覺得不太安全。

幾個思路:

1 、負載演算法採用 IP hash ,把每次相同 IP 的請求轉寄到同一台 Web 服務器上。
缺點是不能有效利用到所有的 Web 服務器來做均衡負載,一般負載演算法都是 Round Robin 。

2 、重寫 session handler , 把 session 用資料庫來儲存。
缺點是訪問量高的情況下,IO 吞吐太高的話會影響網站效能。

3 、把 session 的預設儲存路徑設定為 NFS 上的一Block Storage地區,這樣所有的 Web 服務器就可以共用了。
缺點是一旦 NFS 掛了,session 就再也沒有辦法使用了。

4 、最簡單的,把 php.ini 裡的 session save handler 設定為 memcache 或者 redis。
推薦用 memcache 。如果用 redis 的話,目前沒有好用的 cluster 解決方案,而來 redis 還會把資料回寫到硬碟上,完全沒必要。而 memcache 只需要很少的配置就能做 cluster ,資料操作完全在記憶體裡,速度杠杠滴。

cookie存一個key,具體資訊存在資料庫裡,可以用memcache/redis這些基於記憶體的key-value儲存來加速

@socrates 提供了一個方法,另外也可以通過對IP做hash把相同使用者的請求發送到同一後端,nginx就有這種簡單的會話保持功能。

負載平衡會話保持,同一使用者請求發送到一台伺服器。這個比較靠譜。

很關鍵工號

  1. 負載平衡的會話黏滯,會增加負載平衡的負擔,因為需要記錄IP和上遊伺服器的對應關係
  2. session存在key-value資料庫中。將key存cookie,value存資料庫。key一般是很複雜的,很難猜到,所以就算用cookie存也不會有什麼嚴重的問題。推薦這種做法,實現起來也不難,key-value資料庫也可以避免單點故障的

使用統一的 session服務 可以儲存到 mc 或者 redis

可以把它存入結構性儲存(memcached之類的)

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.