☰
负载均衡(LB)是什么?它如何把请求分发给多台PHP服务器?
2026/10/20 10:16:25 网站建设 项目流程

原有角色回顾:
网段=小区;交换机=门卫;路由器=交警;防火墙=大门安检
负载均衡LB(Load Balancer,负载均衡器)= 前台接待总台。
原本所有访客全部挤着去找同一间办公室(单台PHP服务器),人多就排队拥堵。总台负责把来访客人,均匀分派到多间相同功能的办公室(多台PHP服务器),分担接待压力。

本源概念

负载均衡LB,就是流量分发器。接收全部客户端请求,再按照预设策略,转发请求到后端多台PHP业务服务器,实现流量分摊。
目的:分担单台服务器压力、扩容承载能力、实现故障转移,一台PHP机器挂了,总台自动不再派客人过去,服务不中断。

LB分三层:四层负载均衡(传输层,LVS)和七层负载均衡(应用层,Nginx),这两种是PHP项目最常用。

一、四层LB(传输层LB,LVS)

类比:总台只看访客信封上的【收件地址+端口】,不拆开信件看里面写的内容。
工作在传输层(TCP/UDP),只解析IP、端口。

  1. 客户端TCP连接先和LB建立三次握手
  2. LB根据分发算法,挑选一台后端PHP服务器
  3. 修改数据包二层头部,转发TCP流量到选中的PHP节点
  4. PHP服务器返回响应包,回传给LB,再转发给客户端

特点:LB不解析HTTP报文,只搬运TCP数据包,性能很高。连接是客户端 ↔ LB ↔ 后端服务器。

二、七层LB(应用层LB,Nginx,PHP项目最常用)

类比:总台拆开信封,读懂HTTP信件内容,再分配任务。
工作在应用层,可以完整解析HTTP请求报文:看请求路径、Header、Cookie、URL。

  1. 浏览器发起TCP连接,和Nginx(LB)建立连接
  2. Nginx完整接收HTTP请求,解析HTTP报文
  3. 根据负载均衡策略,挑选一台后端PHP-FPM/Hyperf服务器
  4. Nginx作为新的HTTP客户端,新建一条独立TCP连接,把请求转发给选中的PHP服务器
  5. PHP处理业务,生成HTTP响应,返回给Nginx
  6. Nginx拿到响应,回传给浏览器

重点:七层LB会断开客户端的连接,再重新和后端PHP建立连接。它能看懂HTTP,能力更强。
我们PHP集群,绝大多数场景,就是用Nginx充当七层负载均衡。

三、LB常用分发策略(总台分配客人的规则)

  1. 轮询:挨个轮流派。第1个请求给服务器A,第2个B,第3个A,循环往复。适合服务器性能差不多的集群。
  2. 加权轮询:性能强的服务器多分配请求。比如A机器性能好权重2,B权重1;A接待2个客人,B接待1个。
  3. IP哈希:根据用户客户端IP做哈希。同一个用户,每次都分配到同一台PHP服务器。适合需要本地Session保存在服务器的老项目(现在推荐Redis共享Session替代这个方案)。
  4. 最少连接:看哪台PHP服务器当前处理的连接数最少,就分给谁。适合请求耗时差异大的接口场景。

四、健康检查(总台定期查房)

LB会持续定时探测后端每一台PHP服务器。
如果发现某台PHP服务挂了、端口不通、接口返回5xx错误,就自动把这台机器从可用列表里剔除,不再分配新请求。等机器恢复正常,再重新加入集群。

比喻:总台每隔一段时间,去检查办公室还能不能接待客人,办公室关门了,就不再安排访客过去。

五、完整通信流程(七层Nginx LB,PHP集群场景)

浏览器 → Nginx负载均衡器 → 分发到多台PHP服务器

  1. 用户发起HTTP请求到Nginx LB
  2. Nginx执行健康检查列表,挑选一台正常的PHP后端
  3. Nginx转发HTTP请求到后端PHP
  4. PHP执行业务代码,生成HTTP响应返回Nginx
  5. Nginx把响应返回浏览器

六、四层LB和七层LB核心差异

  • 四层LB:只管TCP连接,看不懂HTTP,转发速度快;只能基于IP+端口分发。
  • 七层LB:解析完整HTTP报文,可以基于URL、Cookie、请求头做更灵活的流量分发;开销略高,适合Web/PHP业务。

七、PHP业务配套注意点

  1. 会话问题
    如果Session存在PHP服务器本地文件,IP哈希之外的策略会出问题:用户第一次访问分到A服务器,第二次分到B,B找不到Session,用户登录状态丢失。
    解决方案:把Session存入Redis,所有PHP服务器共用一份会话数据,集群无状态。
  2. 资源一致性
    多台PHP服务器代码、配置必须保持一致;静态资源建议统一放共享存储或者CDN。
  3. 负载均衡不等于缓存
    LB只是分发请求,不会缓存接口结果。每一个请求,都会转发到后端PHP执行业务代码。

八、常见误区澄清

❌ LB会合并多台服务器算力,让单一次PHP请求由多台服务器一起处理。

错。一次请求只会交给其中一台后端服务器处理。LB只是分流,单个请求不会拆分到多台机器。

❌ 负载均衡一定是硬件设备。

不是。Nginx、HAProxy是软件负载均衡,PHP项目最常用,成本低。硬件LB(F5)多用于大型企业。

一句话浓缩

负载均衡就是流量总台,接收全部用户请求,按规则分发到多台PHP服务器,分摊压力;四层LB只转发TCP包,七层Nginx LB可以解析HTTP报文,还自带后端健康检查,单点故障自动摘除节点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询