当前位置: 首页 > 科技观察

Nginx+Tomcat会话维护N种方案,各有千秋!你选对了吗?

时间:2023-03-15 23:13:26 科技观察

什么是会话持久化?会话持久性也称为粘性会话。会话持久化是指负载均衡器上的一种机制,可以识别客户端与服务端交互过程的相关性,并保证在进行负载均衡的同时将一系列相关的访问请求分配到一台机器上。换句话说,会话持久化允许来自同一个IP的请求被转发到同一个后端服务器。为什么会话持久化?确保来自同一客户端的请求在适当的情况下被转发到同一后端服务器进行处理。比如:你打开淘宝,登录你的个人账户,即使你浏览了很多店铺宝贝,切换了很多页面,用户名还是一样。如果服务器之间没有会话信息的同步机制,其他服务器将无法识别用户的身份,导致用户与应用系统交互时出现异常。nginx+tomcat会话维护的方案有很多种。今天小编就和大家一起探讨一下各种方案的优缺点,帮你选择最适合自己业务的方案!Nginx的ip_hash算法Nginx中的ip_hash机制可以使某个客户端如果长时间只访问一个固定的后端web服务器,会话将保持不变。在网站页面登录时,不会出现后端web服务器之间的跳转,也不会出现登录过一次的网站提示再次登录的情况。优点:配置简单,在nginx.conf的upstream调度中添加一句ip_hash即可。缺点:1)nginx必须是前端服务器,否则nginx无法获取客户端的准确ip,从而无法根据ip散列到同一个session应用服务器3)后端tomcat崩溃时,用户会话将丢失。适用场景:简单配置,使用hash函数解决session问题,会因为crash导致session信息丢失。建议只在开发环境和测试环境使用。另外其他的负载均衡软件也有类似的算法,比如LVS的sh算法,haproxy的source算法等。Tomcat集群的session复制分为两种,一种是全局的(all-to-all),即Node实例的session发生变化后,会将这些变化复制到集群组的所有其他成员;另一种是本地的,会使用BackupManager,BackupManager只会复制到一个BuckupNode,这个Node会部署同一个web应用。Tomcat的会话复制是基于IP多播(multicast)的。简单来说,需要集群的tomcat通过配置统一的组播IP和端口来确定一个集群组。当一个节点的会话发生变化时,它会将变化的数据发送给IP多播,IP多播将数据分发给组内的所有其他成员(节点)。官方配置方法如下:地址:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html优点:当后端tomcatcrash时,用户session不会丢失。缺点:1)使用组播方式向多个tomcat节点复制信息,网络开销高2)消耗内存和带宽较多适用场景:Tomcat官方在集群比较小的时候推荐这种方案。使用缓存集中管理session在单独的服务器或服务器集群上使用缓存技术,如Redis来存储session数据,集中管理所有session,所有web服务器从这个存储介质中访问相应的session,实现session共享。目前常用的集中式会话管理方案有两种,一种是Memcache-Tomcat-Session,另一种是SpringSession。优点:1)可靠性高,减少Web服务器的资源开销2)提高session数据的安全性缺点:1)对缓存服务器的依赖太大2)需要额外的缓存服务器,成本也高3)实现方式有点复杂,配置比较多适用场景:web服务器比较多,需要高可用。