首页 > 数据库 > 数据库开发技术 > 计算架构模式之负载均衡技巧
负载均衡算法 - 轮询 & 随机

【基本原理】
轮询:将请求依次发给服务器。
随机:将请求随机发给服务器。
【适应场景】
通用,无状态的负载均衡。
【优缺点】
1. 实现简单;
2. 不会判断服务器状态,除非服务器连接丢失。
【问题场景】
1. 某个服务器当前因为触发了程序 Bug 进入了死循环导致 CPU 负载很高,负载
均衡系统是不感知的,还是会继续将请求源源不断地发送给它。
2. 集群中有新的机器是32核的,老的机器是16核的,负载均衡系统也是不关注
的,新老机器分配的任务数是一样的。
负载均衡算法 - 加权轮询

【基本原理】
按照预先配置的权重,将请求按照权重比例发送给不同的服务器。
【适应场景】
服务器的处理能力有差异,例如新老服务器搭配使用。
【优缺点】
1. 实现复杂,按照权重计算;
2. 不会判断服务器状态,除非服务器连接丢失;
3. 权重配置不合理可能导致过载。
【问题场景】
2020年采购的机器 CPU 核数是2019年采购的机器1倍,运维直接配置了2倍权重,
结果导致新机器全部过载。
负载均衡算法 - 负载优先

【基本原理】
负载均衡系统将任务分配给当前负载最低的服务器,这里的负载根据不同的任务
类型和业务场景,可以用不同的指标来衡量。
【适应场景】
1. LVS 这种4层网络负载均衡设备,可以以“连接数”来判断服务器的状态,服
务器连接数越大,表明服务器压力越大。
2. Nginx 这种7层网络负载系统,可以以“HTTP 请求数” 来判断服务器状态
(Nginx 内置的负载均衡算法不支持这种方式,需要进行扩展)。
【优缺点】
1. 实现复杂,需要管理或者获取服务器状态
2. 可以根据服务器状态进行负载均衡
负载均衡算法 - 性能优先
【基本原理】
负载均衡系统将任务分配给当前性能最好的服务器,主要是以响应时间作为性能
衡量标准。
【适应场景】
Nginx 这种7层网络负载系统,可以以“HTTP 响应时间” 来判断服务器状态
(Nginx 内置的负载均衡算法不支持这种方式,需要进行扩展)。
【优缺点】
1. 实现复杂,需要统计请求处理时间,需要耗费一定的 CPU 运算资源
2. 可以根据性能进行负载均衡
3. 如果服务器响应不经过负载均衡器,则不能应用这种算法
负载均衡算法 - Hash

【基本原理】
基于某个参数计算 Hash 值,将其映射到具体的服务器。
【适应场景】
1. 有状态的任务,例如购物车;
2. 任务是分片的,例如某个用户的请求只能在某台服务器处理。
【优缺点】
1. 实现简单;
2. 不会判断服务器状态,除非服务器连接丢失。
【常见 Hash 键】
1. 用户 IP 地址(session 场景)
2. URL(缓存场景)
负载均衡算法举例 - Nginx

负载均衡算法举例 - LVS

业务级别负载均衡介绍

通用负载均衡算法是基于请求的,业务级别的负载均衡是基于业务内容的,更灵活。
例如蚂蚁的 LDC 架构,腾讯的 SET 单元化架构。
业务负载均衡技巧 - Cookie

应用场景:一般用于session保持、购物车、下单等场景。
业务负载均衡技巧-自定义HTTPHeader

应用场景:一般用于精细化的地理位置、机房级别、版本、平台、渠道等负载均衡,例如:
1.如果客户端位于加利福尼亚州山景城,则负载平衡器会添加Header:X-Client-Geo-Location:US,MountainView.
2.X-Client-Version:3.0.0,X-Client-Platform:iOS11,X-Client-Channel:Huawei.
业务负载均衡技巧-服务器性能估算

原文作者:二进制跳动;如有侵权,请联系管理员删除。