源码深度学习 · 零基础友好 · higress-group 1/5

Envoy 源码学习

20 天 · 每天 30 分钟 · 逐层读懂 CNCF 的云原生高性能代理 Envoy——它是 Istio、Higress 等服务网格/网关的数据面内核。从线程模型、过滤器链,到 xDS 动态配置、Wasm 扩展。

00

开篇 · 这是个什么项目

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 里的角色:Higress 是基于 Envoy + Istio 的云原生网关。Envoy 是"发动机"(数据面,真正转发流量),Istio 是"控制器"(控制面,下发配置),Higress 在其上做了增强和 Wasm 插件生态。本系列 5 个子项目层层相关,Envoy 是最底层的地基。前 5 天不假设你懂 C++/代理/网络编程。源码在 higress-group/envoy/source/
01

架构全景(动起来看)

下图那颗发光小球是"一个请求穿过 Envoy"的旅程。从上到下:监听接入 → 过滤器处理 → 上游转发 → 底层引擎。

L1 · 接入层(Listener)
Listener监听端口
Connection连接
L4 Filters网络过滤器
L2 · L7 处理(HTTP)
HCM连接管理器
HTTP Filtersdecode/encode
Router路由
CodecH1/H2
L3 · 上游(Cluster)
Cluster Mgr集群管理
Load Balancer负载均衡
Health Check健康检查
xDS动态配置
L4 · 引擎底座
Dispatcher事件循环
ThreadLocal无锁
Buffer零拷贝
Wasm扩展

Envoy 的心智模型是"Listener → 过滤器链 → Router → Cluster → 负载均衡 → 上游"——一个请求的旅程:

Listener收到连接 L4/L7 过滤器逐层处理 Router选 Cluster 负载均衡选后端转发
为什么 Envoy 这么快? 三大法宝:①线程模型——主线程管配置、N 个 worker 线程各自处理连接,用"线程本地存储"避免锁竞争(热路径无锁);②事件驱动——非阻塞 IO + 事件循环(Dispatcher),单线程扛海量连接;③零拷贝 Buffer——数据在内核和用户态间尽量不复制。这三点是第 1、4 周的重点。
02

怎么用这份教程

⏱️

每天 30 分钟

一天一个独立页面,跟着"今日小结 + 动手"收尾。

👶

零基础友好

不假设你懂 C++/代理/网络编程,术语首次出现都有大白话解释。

📍

精确到行号

关键代码标 文件:行号,可在真源码里跳转对照。

一条主线:从"Envoy 是什么、怎么启动、线程模型为何快",到"过滤器链怎么处理请求",到"xDS 怎么动态配置、上游怎么负载均衡",最后是"扩展机制、Wasm、可观测、构建"。
W1

第 1 周 · 架构与线程模型

全景、启动、线程模型、事件循环、请求入口
01

项目全景(云原生代理)

Envoy 是什么、代理概念、目录地图、它在 higress-group 的角色。

≈30 min开始学 →
02

启动路径

main.cc → MainCommon → Server 初始化,进程怎么 boot。

≈30 min开始学 →
03

线程模型(无锁的秘密)

主线程 + N worker + ThreadLocal,热路径为何无锁。

≈30 min开始学 →
04

Dispatcher 事件循环

libevent、非阻塞 IO、事件驱动怎么扛海量连接。

≈30 min开始学 →
05

请求入口全景

Listener → Connection → Filter,请求怎么进 Envoy。

≈30 min开始学 →
W2

第 2 周 · 过滤器与请求生命周期

L4 过滤器、HCM、L7 过滤器、Router、Codec
06

L4 网络过滤器链

FilterManager、ReadFilter/WriteFilter、FilterStatus。

≈30 min开始学 →
07

HTTP 连接管理器 HCM

L7 的心脏:解码 HTTP、管理流、跑过滤器链。

≈30 min开始学 →
08

L7 HTTP 过滤器

decode/encode 双向路径,StreamFilter 接口。

≈30 min开始学 →
09

Router 路由过滤器

路由匹配、重试、超时,请求转发到上游。

≈30 min开始学 →
10

Codec(H1/H2 抽象)

HTTP/1、HTTP/2 怎么被统一抽象。

≈30 min开始学 →
W3

第 3 周 · xDS 与上游管理

xDS 总览、配置订阅、集群管理、负载均衡、健康检查
11

xDS 动态配置总览

LDS/CDS/RDS/EDS/SDS,管理服务器模型。

≈30 min开始学 →
12

配置订阅机制

ADS/gRPC/GrpcMux,配置热更新不重启。

≈30 min开始学 →
13

Cluster Manager

集群管理、线程本地集群状态。

≈30 min开始学 →
14

负载均衡

轮询/最少请求/环形哈希,LoadBalancer 接口。

≈30 min开始学 →
15

健康检查 + 服务发现

主动/被动健康检查、异常点检测、EDS。

≈30 min开始学 →
W4

第 4 周 · 扩展/可观测/构建

扩展机制、Wasm、可观测、Buffer、Bazel、收官
16

扩展机制(工厂模式)

Registry::RegisterFactory,扩展怎么注册发现。

≈30 min开始学 →
17

Wasm 扩展(Higress 基础)

WebAssembly 插件、proxy-wasm ABI。

≈30 min开始学 →
18

可观测性 + Admin

stats/access log/tracing,/config_dump 内省。

≈30 min开始学 →
19

Buffer 零拷贝 + Bazel

水位缓冲、零拷贝设计、Bazel 构建。

≈30 min开始学 →
20

收官串讲

Envoy 全景回顾、它在 Istio/Higress 中的角色。

≈30 min开始学 →

Envoy 全部 20 天已就绪!(higress-group 系列 1/5)建议按顺序学。