Why Sessionless Web Application ?
什么是Sessionless Web Application
Session相信大部分朋友都聽說過,不使用Session的程序就是Sessionless,
(注意,只是不用Session,并不代表不用Cookies,當然我們也要盡可能的少依賴cookis)
為什么Sessionless (stateless)
- Session往往是在某一臺機器的內存中的,往往一臺機器宕機以后,Session信息就丟失了.
- 如果不需要保持Session,應用程序和架構設計將會比較簡單,維護也會更簡單
- 為了保持Session 粘性, 某用戶在第一次訪問之后的每一次訪問都要回到上一次訪問的那臺服務器
- 那么,如果一臺服務器壓力太大,沒法把這個服務器上的壓力分配到其他機器上
- Session粘性往往需要額外的軟硬件支持和性能消耗
- 負載均衡器為了維護Session粘性 往往沒法很好的均勻分配壓力
- 可以更快更好的支持Web Farm (web園) / Server Farm
- 減少內存消耗
- (stateless) 有的時候朋友發給你一個鏈接,卻無法顯示, 往往都是因為這個頁面需要session或者state;盡量讓我們的應用程序避免這種情況
我們真的需要/不需要Session么?
一般來說我們用Session來保持和用戶相關的一些數據,例如用戶登錄以后的一些信息,用戶的訂單,購物車
事實上,我們可以為每個用戶生成一個GUID(事務號), 然后把用戶相關的信息存放在緩存(或其他方案)中
如何實現Sessionless
1.其實Asp.net內置提供的State Server和吧Session存放在SQL Server中的機制可以避免掉大部分上面描述的問題(不推薦)
a.不完全實現,開發成本低 (較大規模的網站一般不考慮這種不徹底的方案)
b.性能是個問題(SQL Server),單點故障也是一個問題(State Server)
2.使用Memcached之類的分布式緩存(推薦)
a.對性能有更高要求,并且能做到較高緩存命中的程序可以考慮增加本地內存中緩存
本次討論的話題主要是針對較大規模的,用戶體驗,性能,擴展性等方面要求較高的網站. 小規模集群沒實施的必要
浙公網安備 33010602011771號