session共享

    Session共享有多種解決方法,常用的有四種:客戶端Cookie保存、服務器間Session同步、使用集羣管理Session、把Session持久化到數據庫。

客戶端cookie保存

    以cookie加密的方式保存在客戶端.優點是減輕服務器端的壓力,每次session信息被寫在客服端,然後經瀏覽器再次提交到服務器。即使兩次請求在集羣中的兩臺服務器上完成,也可以到達session共享。

這種解決方法的優點是session信息不用存放在服務器端,大大減輕了服務器的壓力。另一個優點是一個session中的兩次或多次請求可以在一個集羣中的多個服務器上完成,可以避免單點故障。目前,淘寶是採用的這種解決方案。

缺 點有幾個,一是傳遞cookie時,http信息頭的長度限制使我們只能夠在cookie中存入一部分用戶信息;二是需要額外地做session信息加密 的工作;第三,如果採用這種方式,每次訪問網站二級域名時都會在http信息頭中帶有這些以cookie形式存儲的session信息,會佔用一定的帶 寬;最後,由於這種方式是在客戶端進行信息存儲,用戶完全可以禁用cookie或刪除cookie,不是很可靠

服務間同步

    使用主-從服務器的架構,當用戶在主服務器上登錄後,通過腳本或者守護進程的方式,將session信息傳遞到各個從服務器中,這樣,用戶訪問其它的從服務器時,就可以讀到session信息。

缺點:比如速度慢、不穩定等,另外,如果session信息傳遞是主->從單向的,會有一些風險,比如主服務器down了,其它服務器無法獲得session信息

集羣管理session

提供一個羣集保存session共享信息.其他應用統統把自己的session信息存放到session集羣服務器組。當應用系統需要session信息的時候直接到session羣集服務器上讀取。目前大多都是使用Memcache來對Session進行存儲。

以Memcache來實現Session共享的方式目前比較流行的有兩種實現方案,下面主要對這兩種方案進行介紹。

使用Filter方式

此 方式使用過濾器的方式重新對httpRequest 對象進行了包裝,並加入memcached客戶端,此方式的優點是:使用簡單,把過濾器配置進去即可,另外比較靈活,因爲它是在客戶端實現的,配置比較靈 活,而且服務器無關,你可以在任何支持servlet的容器上部署。

memcached-session-manager(MSM)

memcached- session-manager,俗稱MSM,是一個用於解決分佈式tomcat環境下session共享的問題的開源解決方案。它的實現原理爲以 tomcat插件的方式部署在服務器,修改了servlet容器代碼中的session相關代碼,使其連接memcached,在memcached中創 建和更新session。MSM擁有如下特性:

  • 支持Tomcat6、Tomcat7

  • 支持黏性、非黏性Session

  • 無單一故障點

  • 可處理tomcat故障轉移

  • 可處理memcached故障轉移

  • 插件式session序列化

  • 允許異步保存session,以提升響應速度

  • 只有當session有修改時,纔會將session寫回memcached

  • JMX管理&監控

MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 閥)對Request進行跟蹤。Request請求到來時,從memcached加載session,Request請求結束時,將tomcat session更新至memcached,以達到session共享之目的, 支持 sticky  和 non-sticky 模式。

優點:開發者不用考慮session共享的問題了,可以專注於程序開發,像正常使用session那樣使用就完事了。不用顯示編寫代碼,只需要對服務器進行配置即可使用。

持久化到數據庫

    這種共享session的方式即將session信息存入數據庫中,其它應用可以從數據庫中查出session信息。目前採用這種方案時所使用的數據庫一般爲mysql。

利用數據庫共享session的方案有一定的實用性,但也有如下缺點:首先session的併發讀寫在數據庫中完成,對mysql的性能要求比較高;其次,我們需要額外地實現session淘汰邏輯代碼,即定時從數據庫表中更新和刪除session信息,增加了工作量


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章