nginx java session共享的终极解决方案

文章标签: 高并发,nginx,session共享
2015-3-17 9:36:20     3 人阅读    

nginx  解决session问题
通常情况下使用  nginx作为前段负载均衡 + 服务器集群的时候都需要考虑session。

那么针对session问题大约有几种解决方案.

第一种方案:服务器集群 进行session共享
          例如tomcat 集群后session共享,weblogic集群和session共享,这样情况下需要牺牲服务器的一部分性能用来保持session同步,
对于性能要求不是很高,并且服务器负载不是很严重的情况可以考虑
          好处:节省很多不必要的成本,不需要单独开发程序进行维护,只需要让服务器集群即可
第二种方案:nginx hash分发请求
           nginx ip_hash :每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。  
           因为每一个ip地址经过hash后始终访问的是同一台服务器,那么在没有多台服务器跳转的情况下就没有session复制和共享的问题了...
            好处:后台服务器不需要集群,session也不需要共享,节省了服务器的性能问题。
            缺点:这个方案要保证nginx拿到的用户IP地址一定是真实的,也就是说需要让nginx作为最前端的服务器接收器,如果nginx不是第一个接受的用户信息,那么有可能获得不到用户的真是ip,hash分发也就无效了。
            还需要保证nginx后端服务器直接处理,而不是后端还有其他的分发服务器,那么如果那个后端分发服务器又使用其他分发规则的话,还是无法让同一个IP访问同一台机器.....


 第三种方案:使用cookie代替session.
             如果可以的话使用cookie代替session,但是需要一些限制条件,比如:浏览器不能设定限制cookie的使用.
             如果担心cookie安全的问题可以使用加密的cookie进行处理..
             cookie代替session大体的思路如下:

             cookie的存储过程:
             1.将要保存的javabean转成json字符串(用gson工具)
             2.des加密json字符串
             3.设置到根域名的cookie中cookie.setDomain("itmmd.com");
             解析过程:
            1.遍历所有cookie
            2.找到对应的cookie
            3.des解密json字符串
            4.还原为javabean(gson).
 第四种方案:使用分布式缓存统一保存session信息,然后让后端所有的服务器都访问同一个分布式缓存...
              这种情况下引入了分布式缓存的概念,需要一定的技术支持,加大了项目的维护成本.
              两种方案:
              1、使用memcached进行session保存
              2、使用terracotta + ehcached进行session保存
              优缺点不再重复说明.

   
  


原文地址:http://www.itmmd.com/201503/655.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

一篇文章了解 LVS所有的概念和组合(LVS、IPVS、heartbeat、ldirectord、KeepAlived 的关系)   上一篇
下一篇  《程序员》app上线了.....

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!