今天我们来讲解一下分布式Session的几种实现方法
为什么要使用分布式Session
在分布式场景下,负载均衡会将用户请求随机分发,如果单机存储Session,会造成用户需要频繁登陆。
分布式Session的实现方式
- 粘性Session(将用户请求固定在一台服务器)
- 服务器Session复制(广播实现Session同步)
- 缓存存储(Sticky模式和Non-Sticky模式)
- 持久化存储(将Session存储到数据库)
粘性Session
- 原理:将用户锁定到某一台服务器上,用户的每次请求都会被发送到第一次请求的服务器上。
- 优点:简单易用,无需操作Session,直接配置Nginx即可。
- 缺点:缺乏容错性,如果当前访问的服务器发生宕机,请求被转发到其他服务器,用户需要重新登录。
服务器Session复制
- 原理:任何一个节点的Session发生变化,都会广播给其他所有节点,以保证Session的同步。
- 优点:容错性较强,Session可以实时响应。
- 缺点:会影响到网络负荷,当并发量较大时,会降低服务器的性能。
缓存存储
-
原理:
- Sticky模式:请求处理完成后,将Session同步到缓存中,每次请求都会被映射到同一台服务器,直到服务器宕机,再去缓存中读取Session。
- Non-Sticky模式:每次请求被映射到的随机一台服务器,请求到来时从缓存中加载Session,请求处理完成,再将Session回写到缓存中。
- 优点:容错性较强,Session可以实时响应。
- 缺点:一旦缓存重启,Session也会丢失(Redis默认保存快照,不会丢失),需要重新登录。
持久化存储
- 原理:将Session存到数据库中,进行持久化。
- 优点:服务器宕机,Session不会丢失。
- 缺点:高并发时,对数据库造成很大的压力。
参考
- 集群/分布式环境下5种session处理策略:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread
- 《大型分布式网站架构设计与实践》
我们今天所付出的一切,不过是为了能见到明天的太阳