土法炼钢 · 系统与基础设施

HAProxy / 数据面代理内核:从 Frontend 到 Seamless Reload

文章导航

分类入口
networkproxy
标签入口
#haproxy#load-balancer#data-plane#stick-table#htx#mux#runtime-api#seamless-reload

目录

站内 HAProxy 工程 已经给出配置模型、ACL 菜谱与 Runtime 运维直觉;Nginx 深度Envoy 数据面 各占「多进程文件驱动」与「API 驱动 Filter/xDS」一格。网关选型 把三者放进产品对比。中间仍缺一层:一次连接如何经 frontend → stream/mux/HTX → ACL → backend,以及 Runtime 热改与 seamless reload 各自保证什么、丢什么。

本系列回答:经典 L4/L7 负载均衡数据面内核里,延迟与失败落在哪一层,动态运维又如何在不停流量下生效或失效。

写:

不写: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)。

适合谁看

与 network/56 的分工

维度 network/56 本系列
定位 网络工程 单篇运维地图 14 篇机制路线图
深度 配置直觉与运维手法 官方文档路径、源码目录、失败模式、开放问题
对照 略述多线程与 reload 显式外链 55 / Envoy / 60;不重写选型全书

读法:只要「建立 HAProxy 配置坐标系」→ 56 足够;要「一次请求卡在哪、reload 丢了什么」→ 本系列 01 → 04 → 08 → 12 → 13。

一、这个领域最值得关注的 5 个问题

  1. 一次请求的延迟与失败点落在哪一层? → 第 1–7、13 篇。
  2. 多线程下共享状态(stick-table / stats)如何正确且不毁吞吐? → 第 2、8 篇。
  3. Runtime 改权重/上下线与 full reload 各自保证什么、丢什么? → 第 11–12 篇。
  4. HTTP 在 HAProxy 内部以什么形态流动(HTX/mux)? → 第 4–5 篇。
  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)

  1. 数据面全景
    • 相对 56/55/Envoy 的缺口;五条坐标系与 14 篇路线。
  2. 线程与调度
    • nbthread / thread-group、每线程事件循环、共享内存边界。
  3. Frontend / bind / accept
    • listener、FD、accept 路径与 expose-fd 前置。
  4. Stream 与 Mux
    • connection→stream;TCP vs HTTP mux 分层。
  5. HTX 与 HTTP 路径
    • 内部表示、改写落点;非应用层菜谱。
  6. ACL / 规则引擎求值
    • 匹配顺序、副作用、与 stick/限流耦合。

第二部分:上游、状态与动态性(07–11)

  1. Backend / server / LB
    • 算法、队列、连接复用边界。
  2. Stick-table
    • 类型、容量、过期、跨线程与 peers/reload 复制。
  3. Health-check 引擎
    • 检查与数据面调度关系、agent-check 边界。
  4. SSL/TLS 路径
    • 终结 vs 透传;握手与会话对线程/FD 的影响。
  5. Runtime API
    • 可热改范围 vs 必须 reload 的配置面。

第三部分:生命周期与收束(12–14)

  1. Seamless reload / soft-stop
    • FD 交接、旧进程排空;对照 Nginx / Envoy hot-restart。
  2. 排障与可观测
    • stats / show sess / 日志落点;五轴清单。
  3. 选型收束与开放问题
    • 排除树;stick-table 规模、QUIC/H3、reload vs Runtime。

四、延伸阅读

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。


By .