一、前言
在使用基于SpringBoot2.x开发Java后台微信管理系统的时候,由于使用了Nginx做服务的负载均衡,遇到了一个Session共享的问题,nginx做负载均衡分发请求到多个tomcat,我们分别叫tomcat(微信1)和tomcat(微信2),此时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到tomcat(微信1)服务器,那么session就会被存到tomcat(微信1)服务器,再次访问时负载均衡会分发到tomcat(微信2)服务器那么第一次访问的session信息就会获取不到之前的session信息,所以需要实现session共享,还好有spring session,使用简单的配置即可实现session共享,下面先介绍下Session相关概念以及常见的session共享解决方案。
二、 什么是 Session
由于 HTTP 协议是无状态的协议,因而服务端需要记录用户的状态时,就需要用某种机制来识具体的用户。Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。
三、 为什么要实现session共享
当用户量比较大时候一个tomcat可能无法处理更多的请求,超过单个tomcat的承受能力,可能会出现用户等待,严重的导致tomcat宕机。