1. 前言
Memcache除了可以做Hibernate的二级缓存外,还可以做很多很多事情。在互联网应用中,往往通过它作为缓存解决方案来保存数据,进而减少数据库的负载,而在分布式系统中,Session在不同Node中的复制,是一个比较常见的问题啦。而且在分布式系统中还要实现Session的修复,就是其中一个Node宕机了,另一个Node立即可以接管宕机Node的所有Session信息,Memcache又可以当做分布式系统的Session解决方案。
2. 使用Memcache的原因
作为分布式Session复制解决方案有很多,可以借助Web容器自身进行互相发心跳,监听、复制,也可以借助第三方工具进行Session托管。前者在配置上比较麻烦,各位详细请看http://suhuanzheng7784877.iteye.com/blog/987062。
那个是使用Web容器自身的Session共享机制,这就有几个问题。第一,就是配置文件有点冗长,若Node较多的情况下,每个Server都得一坨一坨地摆在那里。第二,就是每个Node都得知道其他Node的存在,好进行心跳监听,以便进行Session的复制,消耗的性能相对来说比较大一些,因此还是采用一个集中式的中间件比较好,将Web的Session托管出去,想要的时候尽管去中间件取就行了。当然了,如果采用黏着性访问,比如使用mod_jk这种黏着性访问,就不会跨越Node,Session也不用随时进行复制。但是对于mod_jk进行Node宕机的Session恢复和proxy一样都是使用底层的Web容器进行的,所以依然有缺点。总的来说Memcached作为分布式的托管Session的方案还是比较得当的。
3. 配置环境
大体配置也还是Apache+mod_Proxy模块+Tomcat6的配置,各位请参考http://suhuanzheng7784877.iteye.com/blog/987062即可。咱们这里只说不同的地方。
Apache的配置完全相同,在此不再赘述。
之后下载Memcache的tomcat插件,请查看附件~
之后修改Tomcat Node1的配置文件{Tomcat_Home}\conf\context.xml的内容,在
英文都比较简单就不解释了,唯一注意的一点就是那个工厂类是de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory。对于Tomcat6,使用这个类,对于其他版本的Tomcat实现类有细微差异。之后另一个配置文件{Tomcat_Home}\conf\server.xml的内容和原始Tomcat的差不多,仅仅在
|
另一个Tomcat Node配置和这个配置差不多,不再赘述。
4. 测试
下面我们依然在2个Node上部署好原先那个helloWeb的工程,工程简单,就一个首页。
先开启memcache服务,之后在开启2个Tomcat服务。
效果如下
关闭node1,输入框中输入5,5,效果如下
证明Session继续生效。关闭浏览器后,再重新打开,因为SessionID变了,所以从Session中取不到任何数据了。还要声明一点就是放入Session要想存储对象必须实现序列化接口。
iteye新版本用起来好像怪怪的~~~~