搭建一个jboss集群,解决jboss集群下session一致性的问题的方案:
- 方案 1 :采用 Nginx Session Sticky 的方式实现。需要安装 nginx 扩展模块nginx_upstream_jvm_route.(基于cookie方式实现负载均衡)
- 方案 2 :采用 jboss replicaton (jboss session 复制方式 ) ,需要进行 JBoss 相应配置文件的配置 .
方案1有一定的局限性:
- 同一客户端的请求,有可能落在不同的后端服务器上。 如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。
- cookie不一定生效:由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。
- 客户端可能不带cookie:Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。
推荐采用session复制的方式,虽然需要牺牲一些服务器的性能,但是能够保证服务的高可行性。即使其中一台Jboss服务器宕机了,用户访问的时候也不会造成session的丢失(如果jboss集群中服务器的数量太多,会造成session复制的成本过高,不适合采用这种方式)。
其他参考:
http://blog.csdn.net/dc_726/article/details/12348907
http://blog.csdn.net/yu870646595/article/details/52056340
http://yang-min.iteye.com/blog/1961574#comments (jboss7 session复制)