伺服器獨立Session
如下圖:
伺服器獨立Session要求使用者的每次請求都必須在同一台應用伺服器上面操作,這就要求負載平衡伺服器每次都能把使用者的請求傳送到同一個位址的伺服器上面。
第一個使用者第一次造訪的1號伺服器,那個在使用者的整個會話中都必須由負載平衡伺服器導流到1號伺服器上面。其他伺服器不會保存1號用戶的Session資訊。
現在的負載平衡伺服器一般都有這個功能(nginx)
但是如果出現下面的情況
這個時候1號伺服器宕機的情況下,負載平衡伺服器會把用戶導流到2號或3號伺服器上面,但是使用者在2和3號伺服器上面沒有安全的上下文環境,伺服器會通知使用者重新登入。這樣使用者體驗一定會受到影響。而且很可能用造成用戶的資料遺失。
每台伺服器保留全部Session
每台伺服器保留全部用戶的Session這就關係到應用伺服器之間的Session同步問題,即時性要求比較高。這種方式能夠避免上面伺服器獨立Session所遇到的問題,如下圖所示:
優點
這種方式即使出現第一種情況那麼2和3號伺服器上面也保存的1號的Session訊息,當故障負載平衡伺服器把1號使用者導流到2和3號伺服器上面時,伺服器也會發現有1號使用者的安全上下文,能夠繼續存取而且不需要重新登入。
缺點
但是這種方式也有缺點,那就是對應用伺服器的Session同步即時性要求比較高,而且會帶來額外的跨帶開銷,而且當Session之遙有變化時,就需要同步。如果Session裡面的資訊量比較大,那個會佔用相當大的記憶體消耗。
伺服器共享Session
伺服器共享Session資訊:
優點
每個用戶的Session資訊都會儲存到應用程式之外的另一台伺服器(可能是資料庫,也可能是KV儲存服務) ,這樣應用程式伺服器就不用儲存每個使用者的Session資訊了,節省了很大的記憶體開銷。
當不同應用伺服器需要用到Session資訊的時候就去找共享Session伺服器來取得資訊。
這樣負載平衡伺服器也就不用把用戶固定的分配到一台伺服器上面了,而且也不用伺服器之間來複製Session訊息,當Session資訊改變時,應用程式伺服器都去共享伺服器修改資訊即可。
缺點
比較依賴共享伺服器,一旦共享伺服器或共享伺服器叢集出現問題,使用者會收到很大影響
在Cookie中傳遞Session資料
在Cookie中存放使用者資訊倒是能排除一個不穩定的因素,但是Cookie在安全方面還是有隱患,而且Cookie也有長度的限制。
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });以上就介紹了Session 在分散式系統中的處理,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。