| 语言 | 格式 | 评分 |
|---|---|---|
中文(简体) | .pdf | 3 |
| 摘要 | ||
本文档详细介绍了Envoy的启动配置、流量拦截原理、线程模型以及在生产环境中的优化措施。Envoy作为高性能服务网格数据面代理,通过与istiod的通信实现配置更新。其线程模型采用主进程和工作线程分离的方式,每个工作线程独立处理网络事件和请求。文档还讨论了如何优化Envoy性能,包括调整连接策略和增加监控探测点,以降低网络时延和提升处理能力。 | ||
| AI总结 | ||
# Envoy 原理及优化总结
## 1. Envoy 概述
Envoy 是一种高性能服务网格数据面代理,基于 C++11/14 实现,支持通过扩展过滤器架构实现灵活的网络流量处理。其核心功能包括流量拦截、负载均衡、服务发现、认证授权等。
## 2. Envoy 启动及配置
- **启动过程**:
- Istiod 拦截 Pod 创建请求,为指定 Namespace 的 Pod 注入两个容器:
- `istio-init`:用于配置容器网络的iptables规则。
- `istio-proxy`:启动 Pilot-Agent 进程,使用 UID/GID=1337 创建 Envoy 实例。
- 可通过自定义 Deployment 的 `sidecar.istio.io/inject` 注解跳过自动注入。
- **配置文件**:
- Envoy 的配置文件由 Istiod 生成并下发,包含监听器、路由、集群节点等信息。
- 支持通过命令行参数自定义部分启动参数。
## 3. 控制面与数据面通信
- **控制面通信**:
- Envoy 通过 Pilot-Agent 进程与 Istiod 建立长连接,使用 xDS 协议接收配置更新。
- xDS 是基于 gRPC 的应用层协议,用于传输监听器、路由、集群节点等配置信息。
- **数据面通信**:
- 客户端请求通过iptables规则被拦截,进入 Envoy 的 `virtualOutbound` 监听器。
- Envoy 根据协议(如 HTTP)处理请求,建立上游连接池,将请求转发到目标服务。
- 返回响应时,流量通过 `virtualInbound` 端口进入,最终到达客户端。
## 4. Envoy 线程模型
- **主线程**:
- 负责初始化、读取配置文件、启动 gRPC 监听器、xDS 监听、日志线程、启动工作线程等。
- 定期同步工作线程的监控数据和 DNS 信息。
- **工作线程**:
- 每个工作线程独立处理网络事件和定时器事件,无数据共享。
- 负责处理 `virtualOutbound` 和 `virtualInbound` 监听器的连接。
- 请求处理完成后延迟释放内存,确保回调安全。
## 5. 生产环境问题及优化
- **问题**:
- 连接分配不均:新连接由内核随机分配到工作线程,可能导致某些线程负载过高,影响 QPS 和 tp90 延迟。
- 配置参数冲突:部分目标集群的重试策略和缺省参数不生效。
- **优化措施**:
- 优化连接分配策略,避免连接分配过于随机,提升所有工作线程的 CPU 利用率。
- 增加更多运维监控维度和探测点,支持对异常 Envoy 实例进行旁路处理。
- 修复配置参数冲突问题,确保目标集群重试策略生效。
## 6. 性能测试工具
- 常用性能分析工具包括:
- wrk:用于 HTTP 性能测试。
- iperf:用于网络带宽测试。
- jMeter:用于分布式系统性能测试。
## 7. 华为 ASM 产品优化
- 通过以下优化提升端到端性能:
- 运行时拉取集群依赖服务和 POD 实例配置信息,降低每 Envoy 资源消耗。
- 增加观测信息收集,支持对异常 Envoy 实例进行旁路处理。
- 优化后显著降低了 tp90 网络时延。
## 总结
Envoy 作为服务网格的核心数据面代理,通过灵活的配置、高效的线程模型和扩展的过滤器架构,为分布式系统提供了强大的流量管理能力。在生产环境中,通过优化连接分配策略、增加监控和探测点,可以显著提升性能和稳定性。 | ||
| 来源 | istio.io | ||||
|---|---|---|---|---|---|
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
18 页请下载阅读 -
文档评分














Envoy原理介绍及线上问题踩坑