Tomcatsession共享方案--memcached-session-manager

https://github.com/magro/memcached-session-manager/wiki/SerializationStrategies css

   

MSM的特性: 前端

   a、支持tomcat 6,tomcat 7,tomcat 八、tomcat9 java

   b、支持sticky session或no-sticky session git

   c、無單點故障 github

   d、tomcat故障轉移 web

   e、memcached故障轉移 json

   f、附帶串行化插件 後端

   g、支持異步session存儲,擁有更快的性能 瀏覽器

sticky sessions粘性會話: tomcat

     安裝了MSM的tomcat會優先使用本機內存保存session,當一個請求結束後,MSM會把session發送到memcached節點上存放以做備份,第二次請求時,若是本地有session就直接返回,第二次請求結束,把session修改後的信息更新到後端的memcached服務器,以這樣的方式來保持本地的session與memcached上的session同步。當這個tomcat節點宕機時,那麼用戶的下一次請求就會被前端的負載均衡器路由到另外一個tomcat節點上,而這個節點上並無這個用戶的session信息,這個節點就從memcached服務器上去讀取session,並把session保存到本地的內存,當請求結束,session又被修改,再送回到memcached進行存放備份

    當後端配置了多臺memcached時,MSM在更新session信息時會同時向多個memcached節點更新session,當一個memcached節點故障時,tomcat能夠從選擇一個正常工做的memcached節點讀取session信息來發送給用戶的瀏覽器,讓其重置session信息,這樣,memcached也達到了高可用的目的

   

   

non-sticky session非粘性會話:

   tomcat session爲中轉session, 假設memcached1爲主session ,memcached2 爲備session。Request請求到來時,從memcached2加載備session到tomcat,若是memcached2沒有就從memcached1上讀取session,若是memcached1也沒有就讀取本地session,若是沒有本地session就在本地建立,當請求結束時,將本地的session更新至memcached1和memcached2上,而且清除本地的session

序列化策略及其配置

配置

將jar包拷貝到tomcat的lib目錄下

修改context.xml文件(文件位置TOMCAT_HOME/conf/context.xml)

一、Java內置序列化

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:127.0.0.1:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="uriPattern:/path1|/path2"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"

/>

二、kryo序列化

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:127.0.0.1:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="uriPattern:/path1|/path2"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

三、javolution序列化

   

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

   

memcachedNodes="memcached1:127.0.0.1:11211"

   

sticky="false"

   

sessionBackupAsync="false"

   

lockingMode="uriPattern:/path1|/path2"

   

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

   

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />

4xstream序列化

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:127.0.0.1:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="uriPattern:/path1|/path2"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory"

/>

   

5flexjson序列化

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:127.0.0.1:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="uriPattern:/path1|/path2"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.json.JSONTranscoderFactory"

/>

相關文章
相關標籤/搜索