线程模型

Envoy 使用单进程-多线程架构。一个 primary 线程处理各种轻量协调任务,同时多个 worker 线程处理监听、过滤、转发。 当一个连接被监听器接受,连接的剩余生命周期将绑定在当前 worker 线程。这使得 Envoy 大部分代码近似单线程运行(高度并行), 只有少量的复杂代码用于实现 worker 线程之间的协调。Envoy 基本实现了 100% 的非阻塞,对于大多数工作负载, 我们建议将 worker 线程数配置为物理机器的线程数。

监听器连接均衡

默认情况下,worker 线程之间没有协调。这表示所有 worker 线程都独立的尝试从每一个监听器接受连接, 然后依赖内核在线程之间执行适当的均衡。对于大多数工作负载,内核都可以很好的均衡传入的连接。但是, 对于某些工作负载,特别是那些只有少量但非常长寿命的连接的工作负载(例如,服务网格 HTTP2/gRPC egress), 则可能希望让 Envoy 强制平衡工作线程之间的连接。为了支持这种行为, Envoy 允许为每个 监听器 配置不同类型的 连接均衡