Envoy 源码学习
20 天 · 每天 30 分钟 · 逐层读懂 CNCF 的云原生高性能代理 Envoy——它是 Istio、Higress 等服务网格/网关的数据面内核。从线程模型、过滤器链,到 xDS 动态配置、Wasm 扩展。
开篇 · 这是个什么项目
Envoy 是 CNCF 毕业的云原生高性能边缘/服务代理(C++ 编写)。你可以把它理解成一个"超级智能的流量中转站":所有进出你服务的网络请求都先经过它,它负责路由、负载均衡、限流、认证、可观测、故障注入等。它是 Istio 服务网格、Higress 网关的数据面(data plane)内核——学 Envoy 是理解现代云原生流量基础设施的地基。
🎯 一句话:Envoy = Listener(监听端口) + Filter Chain(过滤器链,L4/L7 处理逻辑) + Cluster(上游服务集群) + xDS(动态配置)。请求进 Listener → 走过滤器链 → HTTP 连接管理器 → 路由到 Cluster → 负载均衡选一个后端 → 转发。全程配置可通过 xDS 热更新、不重启。
线程模型
主线程 + N worker + 线程本地存储,热路径无锁,极致性能。
过滤器链
L4/L7 可插拔过滤器,请求处理像流水线一样组合。
xDS 动态配置
LDS/CDS/RDS/EDS 从管理服务器热更新,不重启。
Wasm 扩展
WebAssembly 插件(Higress 插件的运行基础)。
higress-group/envoy/source/。架构全景(动起来看)
下图那颗发光小球是"一个请求穿过 Envoy"的旅程。从上到下:监听接入 → 过滤器处理 → 上游转发 → 底层引擎。
Envoy 的心智模型是"Listener → 过滤器链 → Router → Cluster → 负载均衡 → 上游"——一个请求的旅程:
怎么用这份教程
每天 30 分钟
一天一个独立页面,跟着"今日小结 + 动手"收尾。
零基础友好
不假设你懂 C++/代理/网络编程,术语首次出现都有大白话解释。
精确到行号
关键代码标 文件:行号,可在真源码里跳转对照。
项目全景(云原生代理)
Envoy 是什么、代理概念、目录地图、它在 higress-group 的角色。
启动路径
main.cc → MainCommon → Server 初始化,进程怎么 boot。
线程模型(无锁的秘密)
主线程 + N worker + ThreadLocal,热路径为何无锁。
Dispatcher 事件循环
libevent、非阻塞 IO、事件驱动怎么扛海量连接。
请求入口全景
Listener → Connection → Filter,请求怎么进 Envoy。
L4 网络过滤器链
FilterManager、ReadFilter/WriteFilter、FilterStatus。
HTTP 连接管理器 HCM
L7 的心脏:解码 HTTP、管理流、跑过滤器链。
L7 HTTP 过滤器
decode/encode 双向路径,StreamFilter 接口。
Router 路由过滤器
路由匹配、重试、超时,请求转发到上游。
Codec(H1/H2 抽象)
HTTP/1、HTTP/2 怎么被统一抽象。
xDS 动态配置总览
LDS/CDS/RDS/EDS/SDS,管理服务器模型。
配置订阅机制
ADS/gRPC/GrpcMux,配置热更新不重启。
Cluster Manager
集群管理、线程本地集群状态。
负载均衡
轮询/最少请求/环形哈希,LoadBalancer 接口。
健康检查 + 服务发现
主动/被动健康检查、异常点检测、EDS。
扩展机制(工厂模式)
Registry::RegisterFactory,扩展怎么注册发现。
Wasm 扩展(Higress 基础)
WebAssembly 插件、proxy-wasm ABI。
可观测性 + Admin
stats/access log/tracing,/config_dump 内省。
Buffer 零拷贝 + Bazel
水位缓冲、零拷贝设计、Bazel 构建。
收官串讲
Envoy 全景回顾、它在 Istio/Higress 中的角色。
✅ Envoy 全部 20 天已就绪!(higress-group 系列 1/5)建议按顺序学。