Nginx轮询后call tomcat,tomcat产生seesion. 当call不同的tomcat会产生seesion不一致的问题
解决方案1:
在Nginx采用ip_hash算法。保证同一个ip匹配到同一个tomcat上。
缺点:当一个公司是局域网,全部通过一个ip来访问,会匹配到同一个tomcat里。只记录公网IP。
当某个tomcat挂掉以后,其上session丢失,造成用户访问出现问题。
解决方案2:
服务器seesion复制,
tomcat支持集群,有个cluster节点,打开后进行集群模式。所有订阅的tomcat都会收到广播。
缺点:会有一定延迟,虽然是在局域网内。消耗内存资源。因为session保存在内存中。
解决方案3:
session集中管理
原理:session不由tomcat管理,统一放到一个地方集中管理,读取与写入session都放在第三方软件中。如redis,MongnDB, MySQL等。浏览器访问后会产生session id,tomcat通过session id去redis中取。
采用springsessionRepositoryFilter。加在所有的filter与listener前面。
配置redistribute连接池。
缺点:对应用有侵入性,修改了很多代码。