# 多级负载均衡架构

在这里插入图片描述

# 常见的负载均衡架构

在实际的高并发架构中,常用的负载均衡组件如下 在这里插入图片描述 我们可以按需去掉图中的负载均衡组件

去掉DNS和F5。绝大多数中小企业。并发量在万级到十万级,不需要多机房容灾,单机房即可搞定。这是最典型的中小厂标准架构。我们直接把DNS和F5去掉

去掉服务网关集群。依然是微服务架构,但业务不需要复杂的鉴权、动态限流、复杂的路由逻辑,想减少内部网络调用的延迟

# 负载均衡组件的主要分类与区别

在实际应用中,负载均衡组件主要分为软件级硬件级,以及工作在 OSI 网络模型不同层级的四层七层,还有DNS负载均衡

# DNS负载均衡

普通的 DNS 一个域名只对应一个 IP。而 DNS 负载均衡 的做法是:让一个域名同时对应多个不同的 IP 地址(通常是不同机房、不同地域的公网 IP)

当大批用户同时访问这个域名时,DNS 服务器会根据一定的策略,给不同的用户返回不同的 IP,从而在最外层把流量分流到不同的机房

一般用来实现地理级别的负载均衡。例如,对于某个域名,北方用户解析后获取的IP是北方机房的IP,南方用户解析后获取的IP是南方机房的IP

优点

  1. 简单,成本低:负载均衡工作交给DNS服务器处理,无须自己开发或者维护负载均衡设备
  2. 地理级别分流:就近访问,加快了访问速度

缺点

  1. 更新不及时:为了减轻网络压力,全球的运营商、路由器、甚至你的电脑浏览器,都会缓存 DNS 结果
  2. 分配策略比较简单:DNS 只能根据 IP 级别进行分流,它根本不知道后端服务器的 CPU 累不累、连接数高不高,更没办法根据用户的 URL、Cookie 去做精细化的业务路由

# 软件 VS 硬件 负载均衡

特性 软件负载均衡 硬件负载均衡
典型代表 Nginx, HAProxy, LVS F5
成本 极低(开源、免费,只需支付服务器计算成本) 极高(百万级,需要购买专有硬件设备和授权)
性能 百万级并发(LVS可更高) 千万级并发
适用场景 绝大多数互联网公司、中小企业 对稳定性和吞吐量要求极高的企业

# 四层 vs 七层 负载均衡

# 四层负载均衡(传输层)

工作原理: 只通过报文中的 IP 地址和端口号 决定转发。它不修改也不关心应用层的内容(如 HTTP 协议)。就像快递员只看包裹上的地址和收件人电话,就把快递转寄出去了

典型组件: LVS(Linux Virtual Server)、HAProxy(四层模式)

优点: 性能极高,因为不需要解析应用层数据,消耗 CPU 极少

缺点: 无法感知业务逻辑。不能根据具体的 URL、Cookie 或用户设备类型来做智能分发

# 七层负载均衡(应用层)

工作原理: 深入到 应用层,可以根据 URL、HTTP 头部、Cookie、POST 参数 等内容来决定转发。就像快递员把包裹拆开,看看里面是衣服还是生鲜,再决定送给不同的专业处理人员

典型组件: Nginx、HAProxy(七层模式)

优点: 极其智能化。可以实现动静分离(图片请求走图片服务器,API 请求走应用服务器)、根据 Cookie 保持用户登录状态、防 DDoS 攻击等

缺点: 性能比四层低,因为解析应用层协议(如 HTTPS 解密、HTTP 解析)需要消耗大量的 CPU 资源

# 常见的负载均衡算法

在实际应用中,常见的负载均衡算法主要可以分为两大类:静态负载均衡算法(不看后端服务器的实时状态)和动态负载均衡算法(根据后端服务器的实时负载调整)

# 静态负载均衡算法

# 轮询法

原理: 挨个分发。把请求按顺序轮流分配给后端的服务器。第一笔请求给 Server A,第二笔给 Server B,以此类推

适用场景: 后端所有服务器的硬件配置完全相同,且处理的业务请求耗时差不多。如果服务器性能有高有低,会导致“低配”服务器被压垮

# 加权轮询法

原理:在轮询的基础上加上了“权重”(Weight)。性能好的服务器(如 8核)权重设高点,性能差的(如 2核)权重设低点。比如:Server A (权重 3),Server B (权重 1)。分配序列就是:A, A, A, B

适用场景: 后端服务器硬件配置不同

# 源 IP 哈希法

原理: 对客户端的 IP 地址进行哈希(Hash)计算,得到一个数值,再用这个数值对服务器数量取模。 同一个客户端 IP 的请求,永远会被分发到同一台服务器上。

适用场景: 需要会话保持的传统 Web 应用。但现在微服务架构中,更倾向于使用分布式 Session(如 Redis 存 Session),而不是依赖 IP 哈希

普通的 IP 哈希法(IP % 服务器数量)有一个致命缺点:一旦后端某台服务器挂了,或者新加入了一台服务器,服务器数量一变,所有的哈希结果都会发生剧烈抖动。为了解决这个问题可以使用一致性哈希算法

# 动态负载均衡算法

# 最小连接数法(Least Connections)

原理: 谁现在手里的活最少,新请求就给谁。负载均衡器会记录每台服务器当前正在处理的 TCP 连接数,优先把请求发给连接数最少的服务器。

适用场景: 请求处理耗时差异很大的场景(比如有的请求 1 毫秒完事,有的请求需要传输大文件耗时 10 秒)。

加权延伸: 加权最小连接数(Weighted Least Connections),同时考虑服务器的硬件权重和当前的连接数。

# 最快响应时间法

原理: 谁反应快,就给谁。负载均衡器会扫描后端服务器的平均响应时间(RTT),优先把请求分发给当前响应速度最快的服务器。

适用场景: 对延迟极其敏感的业务