分布式会话基本原理

1 什么是Session

        Session代表着服务器和客户端一次会话的过程,Session对象存储着特定用户会话所需的属性及配置信息,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量不会丢失,而是在整个用户会话中一直存在下去,当客户端关闭会话,或者Session超时失效时会话结束。

2 分布式Session

        在分布式场景下,一个用户的Session如果只存储在一台服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器上时,该服务器上没有用户的Session,就可能导致用户需要进行重新登录等操作。

        分布式场景下Session也需要进行分布式处理,而Session分布式处理有三种方式:

        (1) 粘性Session;

        (2) 应用服务器间的Session复制共享;

        (3) 基于缓存的Session共享;

2.1 粘性Session

        即将用户的所有请求都路由到一个服务器节点上,用户的Session也放在这台服务器节点上。

粘性Session需要负载均衡器的配合。

 

        粘性Session要求用户的所有请求都由一个服务器节点承接,因此其缺陷也比较明显:如果用户对应的服务器节点宕机异常,那么用户的Session将丢失。

2.2 应用服务间的Session复制共享

        每个用户的Session被创建后,就将其复制到所有节点的内存中,这样用户访问每一台服务器,都有其对应的Session。

 

        同样存在一些问题:

        (1) 应用程序需要对Session进行管理、复制;

        (2) 内存重复占用;

2.3 基于缓存的Session共享

        使用一个单独的存储服务器存储Session数据,这个存储服务器被所有应用服务共享,例如Redis缓存。

 

        基于缓存的Session共享要求实现HttpSessionWrapper用来存取Session。

        HttpSessionWrapper有很多实现方案,例如配合JWT Token使用、使用Tomcat的RedisSessionManager或者使用spring-session-data-redis。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值