站内 HAProxy 工程 已经给出配置模型、ACL 菜谱与 Runtime 运维直觉;Nginx 深度 与 Envoy 数据面 各占「多进程文件驱动」与「API 驱动 Filter/xDS」一格。网关选型 把三者放进产品对比。中间仍缺一层:一次连接如何经 frontend → stream/mux/HTX → ACL → backend,以及 Runtime 热改与 seamless reload 各自保证什么、丢什么。
本系列回答:经典 L4/L7 负载均衡数据面内核里,延迟与失败落在哪一层,动态运维又如何在不停流量下生效或失效。
写:
- 线程组与调度;frontend bind / accept / FD。
- Stream、mux、HTX 与 HTTP 路径。
- ACL 求值、backend/LB、stick-table、health-check、TLS 路径。
- Runtime API、seamless reload、排障与选型。
不写:network/56 配置菜谱全书、HAProxy
Enterprise 专有功能、Envoy/Istio
内核重写、未实测延迟排行、Lua/SPOE SDK 教程。对照 API
驱动范式见 Envoy;网格控制面见 Istio xDS。
系列状态:01–14 已全部发布(2026-08-12)。 规划见 PLAN.md。无本机 HAProxy 环境则不粘贴伪造
show info/show sess/ stats 输出。
版本锚定:HAProxy 3.4.3(LTS 线 3.4;Management Guide / Configuration Manual / 源码 tag v3.4.3)。
适合谁看
- 平台 / 网关 / LB 数据面工程师,要把「能跑」推进到「能归因」。
- 读过 network/56,需要路径与失败模式的读者。
- 在 Nginx / HAProxy / Envoy / eBPF 之间做数据面选型的架构师。
与 network/56 的分工
| 维度 | network/56 | 本系列 |
|---|---|---|
| 定位 | 网络工程 单篇运维地图 | 14 篇机制路线图 |
| 深度 | 配置直觉与运维手法 | 官方文档路径、源码目录、失败模式、开放问题 |
| 对照 | 略述多线程与 reload | 显式外链 55 / Envoy / 60;不重写选型全书 |
读法:只要「建立 HAProxy 配置坐标系」→ 56 足够;要「一次请求卡在哪、reload 丢了什么」→ 本系列 01 → 04 → 08 → 12 → 13。
一、这个领域最值得关注的 5 个问题
- 一次请求的延迟与失败点落在哪一层? → 第 1–7、13 篇。
- 多线程下共享状态(stick-table / stats)如何正确且不毁吞吐? → 第 2、8 篇。
- Runtime 改权重/上下线与 full reload 各自保证什么、丢什么? → 第 11–12 篇。
- HTTP 在 HAProxy 内部以什么形态流动(HTX/mux)? → 第 4–5 篇。
- 何时选 HAProxy 而非 Nginx / Envoy / eBPF? → 第 14 篇;外链 Envoy 16、network/55·56·60。
二、篇目依赖关系与推荐阅读路径
flowchart TD
overview["01 Overview"] --> threads["02 Threads"]
threads --> frontend["03 Frontend Accept"]
frontend --> stream["04 Stream Mux"]
stream --> htx["05 HTX HTTP"]
htx --> acl["06 ACL Rules"]
acl --> backend["07 Backend LB"]
backend --> stick["08 Stick Table"]
stick --> health["09 Health Check"]
health --> tls["10 SSL TLS"]
tls --> runtime["11 Runtime API"]
runtime --> reload["12 Seamless Reload"]
reload --> trouble["13 Obs Troubleshoot"]
trouble --> select["14 Selection"]
overview --> select
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 2 → 4 → 8 → 12 → 13 | 快速建立坐标系 |
| 请求路径深挖 | 3 → 4 → 5 → 6 → 7 | 延迟与上游故障 |
| 动态运维 | 11 → 12 → 13 | Runtime / reload 联调 |
| 对照选型 | 1 → 13 → 14 | 网关 / LB 选型 |
| 完整通读 | 1 → … → 14 | 系统掌握 |
三、目录与每篇价值点
第一部分:进程与请求路径(01–06)
- 数据面全景
- 相对 56/55/Envoy 的缺口;五条坐标系与 14 篇路线。
- 线程与调度
nbthread/ thread-group、每线程事件循环、共享内存边界。
- Frontend
/ bind / accept
- listener、FD、accept 路径与
expose-fd前置。
- listener、FD、accept 路径与
- Stream 与
Mux
- connection→stream;TCP vs HTTP mux 分层。
- HTX 与
HTTP 路径
- 内部表示、改写落点;非应用层菜谱。
- ACL /
规则引擎求值
- 匹配顺序、副作用、与 stick/限流耦合。
第二部分:上游、状态与动态性(07–11)
- Backend / server /
LB
- 算法、队列、连接复用边界。
- Stick-table
- 类型、容量、过期、跨线程与 peers/reload 复制。
- Health-check
引擎
- 检查与数据面调度关系、agent-check 边界。
- SSL/TLS
路径
- 终结 vs 透传;握手与会话对线程/FD 的影响。
- Runtime
API
- 可热改范围 vs 必须 reload 的配置面。
第三部分:生命周期与收束(12–14)
- Seamless
reload / soft-stop
- FD 交接、旧进程排空;对照 Nginx / Envoy hot-restart。
- 排障与可观测
- stats /
show sess/ 日志落点;五轴清单。
- stats /
- 选型收束与开放问题
- 排除树;stick-table 规模、QUIC/H3、reload vs Runtime。
四、延伸阅读
- HAProxy 工程(network/56)
- Nginx 架构深度(network/55)
- Envoy / 数据面代理内核
- Istio / 网格控制面内核
- 网关选型(network/60)
- 全部系列索引
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【HAProxy 数据面】数据面全景:从 Frontend 到 Seamless Reload 的代理内核
定位 HAProxy 相对 network/56 配置运维、Nginx 多进程与 Envoy Filter/xDS 的生态位;钉住请求路径、线程共享、协议表示、动态运维、失败归因五条坐标系,并给出 14 篇阅读路线。
【HAProxy 数据面】HTX 与 HTTP 路径:内部表示、改写落点与协议分叉
说明 HTX 作为版本无关的内部 HTTP 表示如何分离解析与处理;http-request 改写/重定向落在 HTX 而非永恒原始缓冲;HTTP/1 与 HTTP/2 在 mux 边界的分叉;以及相对纯 L4 路径的成本模型——非应用层菜谱。
【HAProxy 数据面】Runtime API:可热改边界与必须 reload 的配置面
按 HAProxy 3.4.3 Management Guide 钉住 Runtime API 能改什么、不能改什么;区分 worker stats socket 与 master CLI,说明热改与 seamless reload 的语义边界。
【HAProxy 数据面】Seamless reload 与 soft-stop:FD 交接、排空与状态保留
按 HAProxy 3.4.3 Management Guide 拆解 -x / expose-fd listeners / master-worker sockpair 的 listen FD 交接、SIGUSR1 soft-stop 排空,以及 stick-table/peers 在 reload 下的保留边界;对照 Nginx 与 Envoy hot-restart。