分布式Session问题
1.问题描述:
在高并发中一台Tomcat服务器已经无法支持足够的并发量,这时我们需要多个服务器常配合Nginx使用;
由于Nginx使用默认负载均衡策略(轮询),即用户请求按时间顺序被Nginx转发到不同的后端应用,比如说用户在Tomcat A登录用户Session存放在A,可是过一会用户继续操作,由于Nginx轮询,将请求交给了Tomcat B,但B没有用户Session这是会要求用户重新登录!***
2.解决方案:
1.Session复制
优点
不需要修改代码,只修改Tomcat配置
缺点
Session同步传输占用内网带宽,多台Tomcat同步性能指数下降,Session占用内存,无法有效水平扩展
2.前端存储
优点
不占用服务端内存
缺点
存在安全风险,数据大小受cookie限制,占用外网带宽
3.session粘滞
优点
无需修改代码,服务端可以水平扩展
缺点
增加新机器,会重新Hash,导致重新登录,应用重启需要重新登录
4.后端集中存储
优点
安全,容易水平扩展
缺点
增加复杂度,需要修改代码