分布式下session一致性问题

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连接池。

    缺点:对应用有侵入性,修改了很多代码。


你可能感兴趣的:(Java)