搜索

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

2.67 MB 30 页 1 下载 116 浏览 0 评论 0 收藏
语言 格式 评分
中文(简体)
.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 页请下载阅读 -
文档评分
请文明评论,理性发言.