zoukankan      html  css  js  c++  java
  • 分布式session实现方式

    一、背景

    在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。

    如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器,这时A服务器就会给用户创建一个Session。当用户第二次发送请求时,Nginx将其负载均衡到B服务器,而这时候B服务器并不存在Session,所以就会将用户踢到登录页面。这将大大降低用户体验度,导致用户的流失,这种情况是项目绝不应该出现的。

    二、实现分布式session方式

    1.粘性session

    1)原理

    粘性Session是指将用户锁定到某一个服务器上,比如上面说的例子,用户第一次请求时,负载均衡器将用户的请求转发到了A服务器上,如果负载均衡器设置了粘性Session的话,那么用户以后的每次请求都会转发到A服务器上,相当于把用户和A服务器粘到了一块,这就是粘性Session机制。

    2)优缺点

    优点:简单,不需要对session做任何处理。

    缺点:缺乏容错性,如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,他的session信息都将失效。

    3)适用场景

    发生故障对客户产生的影响较小;服务器发生故障是低概率事件。

    4)实现方式

    以Nginx为例,在upstream模块配置ip_hash属性即可实现粘性Session。

    upstream mycluster{
        #这里添加的是上面启动好的两台Tomcat服务器
        ip_hash;#粘性Session
         server 192.168.22.229:8080 weight=1;
         server 192.168.22.230:8080 weight=1;
    }
    

    2.服务器session复制

    1)原理

    任何一个服务器上的session发生改变(增删改),该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。

    2)优缺点

    优点:可容错,各个服务器间session能够实时响应。

    缺点:会对网络负荷造成一定压力,如果session量大的话可能会造成网络堵塞,拖慢服务器性能。

    3)适用场景

    网络带宽大

    4)实现方式

    tomcat-redis-session-manager

    3.缓存集中式管理

    1)原理

    将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息

    2)优缺点

    优点:可靠性好

    缺点:实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入

    3)适用场景

    集群中机器数多、网络环境复杂

    4.session持久化到数据库中

    1)原理

    拿出一个数据库,专门用来存储session信息。保证session的持久化。

    2)优缺点

    优点:服务器出现问题,session不会丢失

    缺点:如果网站的访问量很大,把session存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。

  • 相关阅读:
    spring mvc自定义配置 mvc:annotationdriven 东师理想
    spring配置xmemcached及使用 东师理想
    fastjson的简单序列化使用(转) 东师理想
    配置springmvc + simplespringmemcached 东师理想
    利用Spring AOP 更新memcached 缓存策略的实现(二) 东师理想
    springmvc 退出清除session,返回首页,获取当前项目路径,返回前台ajax输出 东师理想
    利用Spring AOP 更新memcached 缓存策略的实现(一) 东师理想
    tomcat7 配置 jstl 东师理想
    Linear Sieve Method for Prime Numbers
    List All Of The Subsets
  • 原文地址:https://www.cnblogs.com/zhangyinhua/p/14504390.html
Copyright © 2011-2022 走看看