在分布式环境中如何解决session共享问题

一、什么是session

session在计算机中,尤其是在网络应用中,称为”会话控制“。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的web页面之间跳转时,存储在session对象中的变量将不会丢失,而在整个用户会话中一直存在下去。

二、产生session不一致原因

单台tomcat没有任何问题,但现在是集群的tomcat因此就存在session不一致问题。如图

在分布式环境中如何解决session共享问题_第1张图片

三、解决方案

(1)session复制

tomcat的session复制,可以实现session共享

优点:不需要额外开发,只需搭建tomcat集群即可

缺点:tomcat 是全局session复制,集群内每个tomcat的session完全同步(也就是任何时候都完全一样的) 在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制会导致集群性能下降, 因此,tomcat的数量不能太多,5个以下为好。

(2)session绑定

当用户A第一次访问系统时,tomcat1对其进行服务,那么,下次访问时仍然让tomcat1对其进行服务

(3)使用redis集中管理session

可以将用户的会话保存在redis中,每次从redis中查询用户信息,就可以很好的解决会话共享问题。如图:

在分布式环境中如何解决session共享问题_第2张图片

四、实际应用

(1)用户登录问题

对于大型分布式系统,可以使用单点登录系统进行登录,其中用户的session保存在redis缓存系统中

(2)用户短信验证

当需要对用户短信进行校验前,调取第三方服务获取验证码,需要先将验证码保存在session中,然后与用户提交的验证码进行比对



你可能感兴趣的:(项目经验)