1. 無狀態的價值:
無狀態可以僅用很少的對象就可以處理很多的用戶,空閒狀態的用戶越多,無狀態服務器就越有用
2. 會話狀態:
相關性:會話狀態只與當前會話有關,它存在於業務事務中,與其他會話及他們的業務事務是分開的;
與記錄數據信息的區別:記錄數據時長期保存在數據庫中的持久化數據,它對所有會話可見,會話狀態需要提交成爲數據庫中的記錄;
最大問題:出現在處理隔離性的時候(同時操作,或者相關聯操作)
不能把會話中所有數據都看成是會話狀態
3. 存儲會話狀態的方法:
1)存儲會話狀態的3種方法:
客戶會話狀態:在客戶端保存數據(在web中可用url、cookie、hidden域等)
適用場景:會話數據較少、用戶經常取消會話(如B2C用戶直接關閉站點消失)
問題:安全性、完整性
服務器會話狀態:在服務器內存、文件系統、一張簡單的數據庫表(以會話標識號爲key、以已序列化對象爲值)
優點:容易直接訪問會話狀態
數據庫會話狀態:在服務器端存儲(將數據分解爲多個表和域)
優點:狀態持久化不易丟失
問題:隔離性差(需要將會話數據與記錄數據相隔離)
以上3種模式並不相互排斥,可以混合使用。使用時,還需要注意:客戶機崩潰、服務器死掉、網絡連接斷掉
2)會話擴容:
會話遷移:允許一次會話從一臺服務器轉移到另一臺服務器,從而可以有一臺服務器處理一個請求,其他服務器處理其他請求
優點:可均衡服務器
缺點:難以找到會話狀態,難以支持會話遷移
服務器親和:某次特定會話的所有請求只能由一臺服務器處理
缺點:當客戶端有使用代理是,可能會有大量負載集中在某臺服務器上