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