【Envoy 数据面】Main / Worker 与配置快照:事件循环、TLS 与几乎无锁热路径
钉住 Envoy 单进程多线程模型:Main 管 xDS/Admin,Worker 绑连接终生;Event::Dispatcher 与 Thread Local Storage 如何把配置变成每线程可读快照,以及快照解决什么、解决不了什么。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 8 篇文章 · 返回首页
钉住 Envoy 单进程多线程模型:Main 管 xDS/Admin,Worker 绑连接终生;Event::Dispatcher 与 Thread Local Storage 如何把配置变成每线程可读快照,以及快照解决什么、解决不了什么。
拆解 Envoy accept 之后到 network filter 之前:listener filters 如何 enrich 元数据,FilterChainMatch 如何按 SNI/ALPN/目的地址选链,以及选错 chain 的典型失败模式。
在 FilterChain 已选定之后,说明 network filter 如何在连接字节流上工作、读写水印如何反压、连接生命周期事件,以及 TCP Proxy 相对 HTTP Connection Manager 的路径分叉。
说明 HttpConnectionManager 如何把字节变成协议无关的 stream 事件;HTTP/1/2/3 codec 的职责边界;流与连接生命周期差异;以及 codec 错误与半关闭语义的失败模式。
钉住 HCM 内 HTTP filter 的 decoder/encoder 顺序、Router 作为终端过滤器的含义,以及 retry/timeout 挂在路由与 Router 上的语义;说明「Router 之后再挂 filter」为何无效,并为 Cluster 上游选型铺路。
说明 Cluster 作为上游逻辑组的模型,拆开 priority / locality 权重与 subset 元数据匹配如何缩小可选主机集,并给出主动健康检查相对 outlier 的入口分工;为连接池与熔断篇铺路。
拆解 HTTP 连接池按协议/线程分池的方式,以及 cluster 级 circuit breaker 与 outlier ejection 如何在路由与 LB 都正确时仍让请求以 503 / overloaded 失败;衔接到 xDS 资源树。
把 Listener、RouteConfiguration、Cluster、ClusterLoadAssignment(及 SDS)画成依赖树,说明资源命名如何串起引用、warming 与 make-before-break 顺序为何决定短暂黑洞,并衔接到 ADS/SotW/Delta。