视频课程
小黑屋思过中,禁止观看!
评论并刷新后可见

您需要在视频最下面评论并刷新后,方可查看完整视频

视频课程
立即观看
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
课程视频
开始学习
会员专享

视频合集

最全分布式Session解决方案详解(4种方案比较)

  • 课程笔记
  • 问答交流

分布式架构演变的过程中,首先就会解决分布式Session的问题,而且面试频次也很高,需要掌握好分布式Session解决方案的优劣势比较。

为了助大家掌握好分布式Session,我会重点讲解以下8点:

1.session

2.分布式session

3.分布式session方案

4.Session复制

5.Session存储在Cookie

6.Session粘性管理

7.Session集中管理在后端

8.分布式Session方案优劣势比较

 

什么是session

Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。

服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文,流程如下:

最全分布式Session解决方案详解(4种方案比较)-mikechen

这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。

 

什么是分布式session

单服务器web应用中,session信息只需存在该服务器中,这是我们前几年最常接触的方式。

但是近几年随着分布式系统的流行,单系统已经不能满足日益增长的百万级用户的需求,需要分布式集群方式部署服务器。

这个时候需要负载均衡的方式把用户的访问分发到集群中的某个服务器,这样就有可能导致同一个用户的多次请求被分发到集群的不同服务器上,就会出现取不到session数据的情况,于是session的共享就成了一个问题。

最全分布式Session解决方案详解(4种方案比较)-mikechen

所以,这个时候就需要解决分布式Session一致性的问题,本质就是session共享。

 

分布式session方案

最全分布式Session解决方案详解(4种方案比较)-mikechen

1.Session复制同步

最全分布式Session解决方案详解(4种方案比较)-mikechen
设计思路

多个web服务器之间相互同步session
每个web服务器包含全部session

优点:

  • 应用程序不需要修改代码

缺点:

  • 同步合并过程复杂
  • 广播式复制容易造成同步延迟
  • 数据量受内存限制
  • 无法水平扩展

2.Session存储在本地的Cookie

最全分布式Session解决方案详解(4种方案比较)-mikechen
设计思路
session数据做加密,然后存储到cookie

优点:

  • 简单
  • 不用考虑数据同步
  • 服务端不需要存储

缺点:

  • 不安全,数据有被破解的风险
  • cookie的存储容量比较小,只适用于Session数据量小的场景

3.Session粘性方式管理

最全分布式Session解决方案详解(4种方案比较)-mikechen
设计思路
负载均衡器的分发能力,将同一浏览器上同一用户的请求,都定向发送到固定服务器上

优点;

  • 只需要改nginx配置
  • 不需要修改应用代码

缺点:

  • 机器Down掉时用户Session会丢失
  • 容易造成单点故障

4.Session集中管理在后端

最全分布式Session解决方案详解(4种方案比较)-mikechen
设计思路
session存储在数据库端或者缓存

优点:

  • 实现起来相对简单
  • 效率很高
  • 安全性也不错
  • 中大型网站的首选方案

缺点:

  • 需要修改应用代码

4.Session集中管理方案

最全分布式Session解决方案详解(4种方案比较)-mikechen
1.Memcache-Tomcat-Session

  • 基于Memcache和Tomcat实现Session集中管理
  • 实现起来比较简单
  • 但是与Tomcat耦合
  • 不适用于其他Web服务器

2.spring-boot+spring-session

  • Spring提供的一套Session管理方案
  • 通过一个SessionFilter将所有请求进行拦截
  • 需要配合redis使用
评论交流
  1. 路正银

    1.谈谈常见的分布式session解决方案有哪些?
    Session复制同步、Session存贮在本地的Cookie、Session粘性方式管理、Session集中管理在后端

    2.重点谈谈各自的优劣势,以及应该采用什么解决方案?为什么?
    Session复制同步,优点:应用程序不需要修改代码;缺点:同步合并过程复杂、广播式复制容易造成同步延迟、数据量受内存限制、无法水平扩展。
    Session存贮在本地的Cookie,优点:简单,不用考虑数据同步、服务端不需要存贮;缺点:不安全,数据有被破解的风险、cookie的存贮容量比较小,只适合Session数据量小的场景。
    Session粘性方式管理,优点:只需要改ngnix配置、不需要修改应用代码;缺点:机器Down掉时用户Session会丢失、容易造成单点故障。
    Session集中管理在后端,优点:实现起来相对简单、效率很高、安全性也不错、中大型网站的首选方案;缺点:需要修改应用代码。

    • mikechen

      ?非常棒,优缺点非常清晰。

      备注:做技术架构最核心的就是平衡,平衡技术和业务之间的两难问题,所以多看各个方案的优劣势,才能更好的明确什么样的业务场景需用什么样的技术方案来解决,找适合当前业务的技术方案,适合的才是最佳方案。有点像娶老婆,合脚的才是最好的?