1. 程式人生 > >tomcat 叢集中 session 共享的三種方法

tomcat 叢集中 session 共享的三種方法


1、使用 filter 方法儲存
這種方法比較推薦,因為它的伺服器使用範圍比較多,不僅限於 tomcat ,而且實現的原理比較簡單容易控制。
可以使用 memcached-session-filter
官方網址:http://code.google.com/p/memcached-session-filter/
官方介紹:解決叢集環境下java web容器session共享,使用filter攔截器和memcached實現。在tomcat 6和websphere 8測試通過,現網併發2000,日PV量1100萬。
暫不支援session event包括create destory 和 attribute change
東西很不錯,體積很小,不過這個東東要和 spring 一起使用,而且要求儲存到 memcached 的物件要實現 java 的序列化介面
大家也知道,java 本身的序列化效能也很一般。
我將其簡單擴充套件了一下,不再依賴 spring ,並且利用 javolution 實現序列化,快取的物件不再有限制。
暫時沒有發現 redis 的實現,後面將自己實現使用 redis 儲存並且序列化使用 kyro ,詳細情況有時間再單獨寫出來。


2、使用 tomcat session manager 方法儲存
這種方法伺服器只能使用 tomcat ,但網上有針對 memcached 和 redis 實現,直接配置就行了。
memcached 實現:
網址:http://code.google.com/p/memcached-session-manager/
修改 tomcat 的 conf 目錄下的 context.xml 檔案:
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   
  memcachedNodes="n1:localhost:11211 n2:localhost:11212"   
  failoverNodes="n2"   
  requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"   
  sessionBackupAsync="false"   
  sessionBackupTimeout="100"   
  transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"   
  copyCollectionsForSerialization="false"    />

以上是以 1.3 版為例子,需要用的 jar 包:
memcached-session-manager-1.3.0.jar
msm-javolution-serializer-1.3.0.jar
javolution-5.4.3.1.jar
memcached-2.4.2.jar

redis 實現:
網址:https://github.com/jcoleman/tomcat-redis-session-manager
同樣修改 tomcat 的 conf 目錄下的 context.xml 檔案:
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="localhost"
         port="6379"
         database="0"
         maxInactiveInterval="60"/>
以上是以 1.2 版為例子,需要用的 jar 包:
tomcat-redis-session-manager-1.2-tomcat-6.jar
jedis-2.1.0.jar
commons-pool-1.6.jar


3、使用 terracotta 伺服器共享
這種方式配置有點複雜,大家到網上搜索一下吧。

以上配置成功後,前端使用 nginx 進行負載均衡就行了,同時使用 Gzip 壓縮 和 靜態檔案快取。