提升20%!京东广告模型系统负载均衡揭秘
共 8058字,需浏览 17分钟
·
2024-08-02 08:35
1.1 现状
-
实际生产环境中,复杂业务系统对分布式服务集群架构的依赖。 -
服务集群异质化节点的容器化部署,机器性能超卖现象不可避免、性能不均情况时有发生。 -
服务集群各硬件组件出错率不可避免[1],上层业务相关的应用软件系统需考虑容错设计。 -
大促流量分布变化难以准确预见,系统服务稳定性与机器资源成本之间需进行妥善权衡。
1.2 问题
-
集群内负载不均,整体资源利用率低。 -
单节点过载容易触发集群整体扩容。
-
节点偶发硬件(CPU、网卡、内存等)异常影响业务服务整体可用率。 -
大促等分布多变的线上流量容易导致集群服务稳定性问题。
1.3 需求
2.1 通用负载均衡问题
2.2 负载均衡策略汇总
2.3 负载均衡算法层级
-
DNS负载均衡
-
Nginx负载均衡
-
LVS/F5+Nginx
-
Ribbon负载均衡
-
Dubbo负载均衡
3.1 模型系统负载均衡策略演进历程
-
静态负载均衡技术
-
动态负载均衡技术
-
在线特征服务集群
-
模型预估服务集群
-
问题现象
-
策略升级
-
问题现象
-
策略升级
-
问题现象
-
策略升级
-
生产环境复杂多变,进而要求LB策略的设计对系统影响稳定且结果可预见。 -
业务服务指标和集群性能指标之间相互影响,单目标均衡策略无法两者兼顾。 -
多目标均衡策略必然引入成倍的决策复杂度:k(均衡目标数)* n(C端集群)*m(S端集群)。 -
多目标均衡分级:不同目标间相互耦合,难以兼顾!总需要有一个主目标作为兜底。 -
均衡目标与均衡策略之间的适配&兼容:(1)多目标(CPU+可用率)、多负载均衡策略(Random、ConsistentHash)适配简单;(2)新LB策略对旧LB均衡策略的兼容性(CPU均衡对一致性Hash原则的兼容性)。
3.2 “服务可用率+资源利用率”双目标联合均衡LB策略
-
Stage-1:统计当前周期内集群各节点请求的成功数量和失败数量以计算出单个服务节点的平均可用率; -
Stage-2:通过汇总所有服务节点的平均可用率以获得集群的平均可用率,并将其作为可用率均衡目标在当前周期内的期望取值; -
Stage-3:基于各节点平均可用率与集群平均可用率之间的差异,确定出各服务节点的均衡度:当前服务节点的可用率已满足均衡目标,则进一步进行L2级CPU利用率目标均衡;否则,选取下一节点重新进行服务可用率均衡处理。
-
Stage-1:节点选择,待选择节点成功率需不低于集群平均成功率。 -
Stage-2:成功率更新,双端队列固定窗口维护各节点请求RPC状态,并实时更新集群平均成功率。 -
Stage-3:主动防护,周期性统计集群历史平均成功率,并判断其变化趋势:如成功率变差,则触发主动防护降级;如成功率变好,则逐渐恢复降级防护。
-
Stage-1:集群中所有节点的列表属性均被初始化为refuse list,同时设置节点分流策略的调整比例𝑟𝑎𝑡𝑖𝑜为0; -
Stage-2:收集集群各节点周期性反馈的CPU利用率𝑙𝑜𝑎𝑑𝑐𝑢𝑟,计算出当前集群整体的CPU利用率均值,进而得到CPU利用率均衡目标的期望取值𝑙𝑜𝑎𝑑𝑟𝑒𝑓; -
Stage-3:针对实际迭代场景中不同属性的集群节点,先根据式 (1)、(2) 获得节点CPU利用率的实际均衡度𝑑𝑖𝑓𝑓,再通过式 (3)、(4)来完成对应节点分流策略调整比例的迭代更新:𝑟𝑎𝑡𝑖𝑜𝑜𝑙𝑑→𝑟𝑎𝑡𝑖𝑜𝑛𝑒𝑤。
-
为𝑙𝑜𝑎𝑑𝑟𝑒𝑓引入容差范围[−𝛥𝑟𝑒𝑓, 𝛥𝑟𝑒𝑓],使得均衡目标的收敛从单一基准点扩展为收敛区域。 -
定期衰减分流权重,在容差范围内进一步弱化对一致性Hash原则的影响。
-
兼顾服务指标(可用率)和性能指标(CPU利用率)。 -
渐进收敛,动态调权过程更稳定,且支持收敛域。
4.1 收敛点
-
通过闭环反馈调整逻辑,实现集群平均基准收敛点均衡。 -
2022年618期间在模型预估服务集群全量上线,优化整体机器资源利用率 10%+。
4.2 收敛域+权重衰减
-
CPU使用率 Max/Min Diff 减少 2 倍,服务集群缓存命中率降低控制在2% 以内。 -
2022年11.11大促期间在模型特征服务集群全量上线,优化整体机器资源利用率 15%+。
4.3 异构硬件扩展
4.4 LB框架统一
-
LB框架统一后,模型系统内、外服务LB策略完全打通。 -
2024年618大促前后模型接入服务模块完成全量上线,整体CPU资源利用率优化 20%+。
5.1 稳定调权过程中的异常处理
-
权重归一化,避免权重更新出现发散。 -
排除异常节点数据,即使最坏情况下也需保证系统不能差于初始状态。
5.2 性能极限情况下的主动限流防护
-
均衡策略有效的前提:流量变化与均衡目标之间存在相关性! -
节点性能到达极限时,相关性关系可能失效,主动限流防护必不可少。
评论