您当前的位置: 首页 >  负载均衡

Dongguo丶

暂无认证

  • 0浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

nginx负载均衡session共享问题

Dongguo丶 发布时间:2017-12-05 19:53:14 ,浏览量:0

用户的登陆请求被转发到tomcat1上;

假设是第一次调用getSession方法(使用true作为参数)得到session。这时session会被创建;

在创建了Session的同时,服务器会为该Session生成唯一的Session id;

程序得到session后,session.addAttribute(“user”, user);

然后将sesessionId返回给浏览器。

上述这种情况就是有状态的请求。

如果用户再次向服务器发送请求,假设被nginx转发到tomcat2服务器上,tomcat2上没有session,系统就会要求用户再次登陆。这显然是不合理的。

上述的情况就是session共享的问题。

解决方法:

  1. session同步

    tomcat支持动态将某个tomcat下的session复制到其他的tomcat中,但是这个方式是早期的企业级应用习惯的方式。现在很少使用。

    这种方式在集群数量很少的时候,结果还是可以的。但是如果集群数量庞大,都需要复制session, 这时会因为网络延迟,或者session内容非常大。

    就会有隐患,数据可能会存在不一致问题。

  2. session黏着

    对IP或者URL进行hash, 这种会导致资源分配不均匀的情况。

    因为uri比ip地址相应数量多,变化就多,因此uri-hash比ip-hash分布更均衡些。

    uri-hash需要第三方软件支持pcre-8.02.tar.gz、Nginx_upstream_hash-0.3.1.tar.gz

  3. 将信息放到cookie

    缺点:客户可能会禁用cookie可以被禁用;

       cookie要随着浏览器传递,增大了传输的内容,

        cookie大小有限制。

          Firefox、Safari:4097byte,(key=value);Opera: 4096byte,(key=value)

          Internet Explorer: 4096个byte,(key=value)

          多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

  4. 将session从系统中独立出来

    目前主流做法是利用redis作为session管理的实现,因为redis访问极其快速。

关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.2252s