分布式Session

今天我们来讲解一下分布式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_第1张图片
image.png

持久化存储

  • 原理:将Session存到数据库中,进行持久化。
  • 优点:服务器宕机,Session不会丢失。
  • 缺点:高并发时,对数据库造成很大的压力。

参考

  • 集群/分布式环境下5种session处理策略:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread
  • 《大型分布式网站架构设计与实践》

我们今天所付出的一切,不过是为了能见到明天的太阳

你可能感兴趣的:(分布式Session)