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