Apache Worker MPM是其内部多线程并发处理模型,不负责后端服务器负载均衡;反向代理的连接分配与负载均衡由mod_proxy_balancer模块实现,支持byrequests等算法及权重配置。
apache http server 本身不实现 worker 架构下的连接分配与负载均衡算法——它没有内置的“后端服务器集群调度器”。所谓 apache 的 worker 模型,指的是其 多进程多线程(mpm)内部请求处理模型,而非面向下游应用服务器(如 tomcat)的反向代理负载均衡机制。
Worker MPM 是 Apache 自身的并发处理模型
Worker 是 Apache 的一种多路复用式进程/线程模型(MPM),用于高效处理大量并发请求:
- 由一个父进程管理多个子进程,每个子进程内含固定数量的工作线程;
- 每个线程可独立处理一个 HTTP 请求,相比 prefork(纯多进程)更省内存、更适合高并发;
- 连接分配由操作系统内核(accept())和 Apache 自身的线程池调度完成,不涉及跨服务器的“负载均衡”逻辑。
连接分发到后端 Java 应用(如 Tomcat)靠的是 mod_proxy + mod_proxy_balancer
当 Apache 作为反向代理将请求转发给后端 Java 服务(例如多个 Tomcat 实例)时,真正的“连接分配与平衡算法”由 mod_proxy_balancer 模块提供,与 Worker MPM 无关:
- 需启用
mod_proxy、mod_proxy_http和mod_proxy_balancer; - 通过
<Proxy balancer://mycluster>定义后端节点组; - 支持多种调度算法:byrequests(默认,轮询计数)、bytraffic(按流量加权)、bybusyness(按当前活跃请求数)、heartbeat(需配合心跳检测)等;
- 每个后端可配置
loadfactor权重,实现静态权重轮询。
Worker MPM 与反向代理性能的关系
虽然 Worker 不参与后端负载决策,但其配置会影响代理整体吞吐能力:
- 线程数(
ThreadsPerChild)过小会导致代理层成为瓶颈,无法及时转发或接收响应; - 最大连接数(
MaxRequestWorkers)需匹配后端服务能力,避免堆积请求; - 建议开启
KeepAlive并合理设置KeepAliveTimeout,减少与后端重建连接的开销; - 若后端使用 AJP 协议(mod_proxy_ajp),Worker 模型比 prefork 更适合,因 AJP 连接可在线程间复用。
实际配置片段示例
以下是一个典型的 Apache 反向代理到两个 Tomcat 实例的配置:
立即学习“Java免费学习笔记(深入)”;
<IfModule mpm_worker_module>
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxConnectionsPerChild 0
</IfModule>
<Proxy balancer://tomcat-cluster>
BalancerMember http://192.168.1.10:8080 loadfactor=3
BalancerMember http://192.168.1.11:8080 loadfactor=1
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /app balancer://tomcat-cluster/app
ProxyPassReverse /app balancer://tomcat-cluster/app
该配置中,lbmethod=byrequests 表示按请求次数轮询,结合 loadfactor 实现 3:1 的加权分发;而底层由 Worker MPM 提供的 150 个并发处理能力保障代理不卡顿。









