分布式应用中负载均衡技术和Session一致性详解

本文深入解析负载均衡技术,包括F5、HAProxy、LVS、Nginx/Apache等设备的功能与工作原理,探讨了OSI网络七层模型及常见负载均衡算法,如轮询、加权轮询、最小连接数、IP哈希算法和URL散列。同时,文章提供了负载均衡下session不一致情况的解决方案,包括粘滞session、Session复制和Redis/Memcached实现的Session共享。

【1】负载均衡技术

F5HAProxyLVS(传输层)Nginx/Apache(应用层)
硬件设备
功能十分强大
工作在第四/七层
Session保持
并发处理极佳
负载均衡算法多
工作第四层
工作稳定
应用范围广
配置简单
不能做动静分离
安装配置简单
占有内存少
并发处理能力强3W+ 优化下10W+
功能强大 动静分离 反向代理 Lua
工作在第七层(支持的应用少)
不能保持session

F5主要功能

不仅包含负载均衡还包括应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙过滤等功能

OSI网络七层模型

在这里插入图片描述

常见的负载均衡算法

  • 轮询(加权轮询):平均分配;加权轮询如权重大的轮询两次;
  • 随机算法(加权随机):随机分发请求,但是从概率上而言访问基数足够大的情况下,基本等同轮询。
  • 最小连接数:在多个服务器中,与处理连接数(会话数)最少的服务器进行通信的算法。
  • IP哈希算法:根据客户端IP,哈希取模,得到的结果便是要访问的服务器的序号。
  • URL散列:同一URL发往同一服务器。

如NGINX高可用:NGINX高可用之keepalived+nginx主从模式+主主模式配置实践


【2】负载均衡下session不一致情况

如下图所示:

在这里插入图片描述

如果解决负载均衡下session不一致情况呢?

在这里插入图片描述

① 粘滞session–负载均衡算法使用IP哈希,这样同一个IP恒定访问某个服务器。

在这里插入图片描述

IP 哈希另外一个有点是不需要session序列化!

② Session复制

在这里插入图片描述

Tomcat自带集群时Tomcat之间Session同步:

 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

参考Tomcat官网:http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

③ Redis/Memcached实现Session共享

在这里插入图片描述

pom文件中引入spring-boot-starter-redissping-session-data-redis,对redis进行常规配置然后在主程序上使用注解@EnableRedisHttpSession

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值