分布式session如何实现

大约有如下几种方法:

  1. 粘性session
  2. session复制
  3. session共享机制
  4. session持久化到数据库

1.粘性session

原理:粘性Session是指将用户锁定到某一个服务器上。

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

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

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

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

实现方式:以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复制

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

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

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

实现方式:

扫描二维码关注公众号,回复: 10516436 查看本文章

① 设置tomcat ,server.xml 开启tomcat集群功能
在这里插入图片描述
Address:填写本机ip即可,设置端口号,预防端口冲突。

② 在应用里增加信息:通知应用当前处于集群环境中,支持分布式
在web.xml中添加选项。

3.session共享机制

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

使用场景:集群中机器数多、网络环境复杂

优点:可靠性好

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

4.session持久化到数据库

原理:就不用多说了吧,拿出一个数据库,专门用来存储session信息。保证session的持久化。

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

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

https://blog.csdn.net/u011213044/article/details/80525997

https://www.jianshu.com/p/d788ecba9514?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

发布了67 篇原创文章 · 获赞 32 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43751710/article/details/105278147