bybusyness算法通过实时选择活跃连接数最少的后端节点分发请求,不感知CPU、内存或响应时间;需启用mod_proxy、mod_proxy_http、mod_proxy_balancer和mod_lbmethod_bybusyness模块,ProxySet lbmethod=bybusyness必须置于<Proxy>块内,且依赖后端Keep-Alive正常工作。

Apache 本身不自动感知后端性能变化,但可以通过配置组合实现“近似动态”的性能负载均衡——核心是让流量倾向响应快、连接少、健康度高的节点,而非平均分配。
用 bybusyness 算法按实时负载分发
它不是看 CPU 或内存,而是依据每个后端当前活跃连接数(Active Requests)做调度:连接越少,越优先接收新请求。这对响应时间差异大的服务(如混合 API 和文件上传)特别有效。
- 必须启用
mod_lbmethod_bybusyness(Apache 2.4+ 默认内置) - 配置示例:
<Proxy balancer://api> BalancerMember http://node1:8080 loadfactor=10 BalancerMember http://node2:8080 loadfactor=10 ProxySet lbmethod=bybusyness ProxySet maxattempts=3 timeout=5 </Proxy>
给高配节点预留权重弹性空间loadfactor 不只是静态权重,更是扩容时的调节杠杆。比如新上线一台 32 核机器,可设 loadfactor=20,老机器保持 10,相当于默认多分一半流量;后续压测再微调,无需改结构。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 权重建议按硬件能力粗估:
(CPU核数 × 内存GB) / 16得到初始值 - 避免极端比值(如 1:10),否则小节点容易被压垮
靠健康检查把慢节点自动隔离
光靠算法不够,得让 Apache 主动识别“假活”节点(能连通但响应超时或返回 5xx)。推荐组合:
-
hcmethod=GET hcinterval=10 hcfail=3 hcpass=2:每 10 秒 GET/healthz,连续 3 次失败下线,2 次成功恢复 -
timeout=3 retry=60:单次探测超时 3 秒,故障后 60 秒内不重试 - 后端
/healthz接口必须真实反映业务可用性(比如连 DB + 查缓存),不能只 return 200
配合连接池参数防雪崩
Apache 的 mod_proxy 连接池控制实际并发压力:
-
acquire=3000:等待空闲连接最长 3 秒,超时直接报错,不堆积 -
maxconnections=50:单节点最多维持 50 个长连接,避免后端线程耗尽 -
disablereuse=off(默认):允许复用连接,降低握手开销
验证是否真在按性能分摊
打开 /balancer-manager(仅限内网),观察两列关键指标:
- Current Requests:各节点当前活跃请求数,理想情况应接近(bybusyness 下差距小)
- Elected:被选中次数,高配节点数值应明显高于低配节点
不复杂但容易忽略


















