站内 Envoy 架构剖析 已经给出线程模型、Filter Chain 与 xDS 名词地图;网关选型 与 Service Mesh 把 Envoy 放进产品对比。中间仍缺一层:一次连接如何经 Listener → FilterChainMatch → Network/HTTP filter → Router → Upstream,以及控制面推送如何经 warming / ACK 变成 Worker 上可服务的快照。
本系列回答:可编程 L7(及 L4)数据面内核里,延迟与失败落在哪一层,动态配置又如何在不停流量下生效或失效。
写:
- Main / Worker 与配置快照;几乎无锁边界。
- Listener filters、FilterChainMatch、TLS Inspector / original_dst。
- HCM、Codec、HTTP filter 链与 Router。
- Cluster、LB、连接池、熔断与 outlier。
- xDS 资源树、ADS、SotW / Incremental、warming、SDS、Hot restart。
- 扩展边界、可观测落点、排障与选型。
不写:Istio 控制面全书、Gateway API CRD 教程、未实测延迟排行、Wasm 编程全书、eBPF 数据面全书。
系列状态:01–16 已全部发布(2026-08-10)。 规划见 PLAN.md。无本机 Envoy 环境则不粘贴伪造
config_dump/ stats 输出。
版本锚定:Envoy v1.39.0(docs +
envoyproxy/envoytag);配置 API v3。
适合谁看
- 平台 / 网关 / Mesh 数据面工程师,要把「能跑」推进到「能归因」。
- 读过 network/57,需要路径与失败模式的读者。
- 在 Nginx / HAProxy / Envoy / 节点级 Envoy / eBPF 之间做数据面选型的架构师。
与 network/57 的分工
| 维度 | network/57 | 本系列 |
|---|---|---|
| 定位 | 网络工程 单篇地图 | 16 篇机制路线图 |
| 深度 | 概念与配置直觉 | 官方协议路径、源码目录、失败模式、开放问题 |
| 对照 | 略述 mesh 角色 | 显式外链 60 / 76 / Cilium / Wasm;不重写选型全书 |
读法:只要「建立 Envoy 坐标系」→ 57 足够;要「一次请求卡在哪、xDS 为何未生效」→ 本系列 01 → 03 → 06 → 09 → 15。
一、这个领域最值得关注的 5 个问题
- 一次请求的延迟与失败点落在哪一层? → 第 1–6、15 篇。
- 配置如何在不停流量下到达 Worker? → 第 2、9–11 篇。
- FilterChainMatch / Listener filter 何时改写路径? → 第 3–4、8 篇。
- xDS「已下发」为何仍会黑洞或旧路由? → 第 9–11、15 篇。
- 何时必须用 Envoy,何时 Nginx/HAProxy/节点级 Envoy/eBPF 更合适? → 第 14、16 篇。
二、篇目依赖关系与推荐阅读路径
flowchart TD
overview["01 Overview"] --> threads["02 Main Worker"]
threads --> listener["03 Listener Match"]
listener --> netfilter["04 Network Filter"]
netfilter --> hcm["05 HCM Codec"]
hcm --> httpfilter["06 HTTP Filter Router"]
httpfilter --> cluster["07 Cluster LB"]
cluster --> pool["08 Conn Pool Outlier"]
overview --> xdsTree["09 xDS Tree"]
xdsTree --> ads["10 ADS SotW Delta"]
ads --> warming["11 Warming SDS"]
warming --> hotrestart["12 Hot Restart"]
httpfilter --> ext["13 Extensions"]
pool --> obs["14 Observability DP"]
hotrestart --> trouble["15 Troubleshoot"]
ext --> select["16 Selection"]
obs --> select
trouble --> select
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 2 → 3 → 6 → 9 → 15 | 快速建立坐标系 |
| 请求路径深挖 | 3 → 4 → 5 → 6 → 7 → 8 | 延迟与上游故障 |
| xDS 与热更新 | 9 → 10 → 11 → 12 → 15 | 控制面联调 |
| 对照选型 | 1 → 13 → 14 → 16 | 网关 / Mesh 选型 |
| 完整通读 | 1 → … → 16 | 系统掌握 |
三、目录与每篇价值点
第一部分:线程与接入路径(01–06)
- 数据面全景
- Envoy 生态位;相对 57/60/76 的缺口;五条坐标系与 16 篇路线。
- Main /
Worker 与配置快照
- 事件循环、TLS 快照、几乎无锁;Main 不处理数据面流量。
- Listener
与 FilterChainMatch
- accept、listener filters、SNI/ALPN/original_dst 如何选链。
- Network
filter 与 Connection
- 字节流、水印、TCP Proxy 相对 HCM 的分叉。
- HCM
与 Codec
- HTTP/1·2·3 编解码;流与连接生命周期。
- HTTP
filter 链与 Router
- 过滤器顺序、Router 终端、重试与超时落点。
第二部分:上游与动态配置(07–12)
- Cluster
与负载均衡
- 优先级、subset、健康检查入口。
- 连接池、熔断与
outlier
- 资源限额、outlier 驱逐如何卡死上游。
- xDS
资源树
- LDS→RDS→CDS→EDS 依赖与命名。
- ADS / SotW
/ Incremental
- 流、ACK/NACK、version 与 nonce。
- Warming、SDS
与热更新
- 证书轮转、listener 热更新边界。
- Hot
restart 与 drain
- 共享内存、父子交接、连接排空。
第三部分:扩展、生产与收束(13–16)
- 扩展边界
- Wasm / Lua / ext_authz / ratelimit 的机制位置。
- 可观测数据面
- stats、access log、tracing 与请求路径耦合。
- 生产排障
- 无上游、路由未生效、证书、热更新、连接泄漏。
- 选型收束
- 相对 Nginx/HAProxy/节点 Envoy/eBPF;系列开放问题。
延伸阅读
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Envoy 数据面】数据面全景:从 Listener 到 xDS 的可编程代理内核
定位 Envoy 相对 Nginx/HAProxy 静态配置代理与 Mesh 选型叙事的生态位;钉住请求路径、配置快照、FilterChainMatch、xDS warming、上游资源五条坐标系,并给出与 network/57 的分工及 16 篇阅读路线。
【Envoy 数据面】Warming、SDS 与热更新:ACK 为何不等于新路由上量
拆解 Listener/Cluster warming、SDS 证书轮转与 xDS 热更新边界;说明为何协议 ACK 之后流量仍可能走旧路由或 503,并区分 xDS 热更新与 Hot restart。
【Envoy 数据面】HTTP filter 链与 Router:顺序语义、终端过滤器与重试超时落点
钉住 HCM 内 HTTP filter 的 decoder/encoder 顺序、Router 作为终端过滤器的含义,以及 retry/timeout 挂在路由与 Router 上的语义;说明「Router 之后再挂 filter」为何无效,并为 Cluster 上游选型铺路。
【Envoy 数据面】Hot restart 与 drain:共享内存、父子交接与连接排空
拆解 Envoy Hot restart 的 UDS RPC、共享内存统计、父子 listen socket 交接与 drain 时间线;对照 xDS-only 热更新,说明何时必须进程级重启。