2. Service Mesh 基础回顾:Sidecar 代理模式、Istio/Envoy 架构、数据面与控制面交互

2.1 Sidecar 代理模式:从侵入式到非侵入式

在传统微服务架构中,服务治理能力(如熔断、限流、服务发现、TLS 终止)通常以 SDK 或框架库的形式嵌入业务进程。这种侵入式模式带来三个核心痛点:

  • 语言绑定:SDK 通常只支持特定语言(Java、Go),多语言异构团队被迫重复实现治理逻辑。
  • 升级成本高:治理库版本升级需要业务应用重新编译、测试、发布,周期长且风险高。
  • 关注点耦合:业务代码与基础设施逻辑混在一起,可读性和可维护性下降。

Service Mesh 通过 Sidecar 代理模式 将治理能力从业务进程中剥离,以独立进程(Sidecar)的形式附加到每个服务 Pod 中。Sidecar 拦截所有进出 Pod 的流量,透明地执行路由、负载均衡、健康检查、TLS 握手、指标采集等操作,业务容器完全无感知。

关键原则:Sidecar 对业务容器是透明的。业务代码只关心业务逻辑,网络通信由 Sidecar 接管。这是实现“非侵入式”治理的基础。

2.2 Istio / Envoy 架构分层

Istio 是目前最主流的 Service Mesh 实现,其架构严格遵循 数据面(Data Plane) 与 控制面(Control Plane) 分离的设计。数据面由 Envoy 代理组成,控制面由 Istiod(Pilot、Citadel、Galley 的整合组件)构成。

Istio 架构分层:控制面与数据面 Istio 架构分层:控制面与数据面 控制面(Control Plane)— Istiod Pilot 服务发现 / 路由下发 Citadel 证书签发 / mTLS Galley 配置验证 / 分发 数据面(Data Plane)— Envoy Sidecar Pod A App A Envoy iptables 流量拦截 Pod B App B Envoy iptables 流量拦截 mTLS 流量 说明:控制面通过 xDS 协议(LDS/RDS/CDS/EDS)向数据面 Envoy 下发动态配置;数据面之间建立双向 mTLS 连接。

2.3 数据面核心:Envoy 代理

Envoy 是 Istio 默认的数据面代理,以 C++ 编写,具备高性能和低资源消耗特性。在 Sidecar 模式下,Envoy 承担以下职责:

功能模块 说明 对容量评估的影响
L4/L7 流量拦截 通过 iptables 规则将入站/出站流量重定向到 Envoy 监听端口 增加网络路径跳数,引入额外延迟(通常 < 1ms)
路由与负载均衡 基于 VirtualService/DestinationRule 执行流量路由、权重分发、熔断 路由规则数量影响 Envoy 内存占用和匹配性能
mTLS 终止 自动为服务间通信启用双向 TLS 加密 TLS 握手消耗 CPU,长连接复用可缓解开销
指标与访问日志 生成 TCP/HTTP 指标(请求数、延迟、错误码)并上报 指标基数(维度组合)影响 Envoy 内存和上报带宽
健康检查与故障注入 主动/被动健康检查,支持延迟/中断故障注入 健康检查频率增加控制面与数据面交互
容量评估要点:Envoy 的 CPU 消耗主要来自 TLS 加解密和 HTTP 头部解析;内存消耗主要来自连接池、路由表、指标基数。在集群升级前,需要重点评估 Envoy 的 连接数 和 监听器/路由规则数量 是否在预期范围内。

2.4 控制面与数据面交互:xDS 协议

Istio 控制面(Istiod)与数据面(Envoy)之间通过 xDS 协议族 进行配置下发。xDS 是 Envoy 动态配置发现协议的统称,包含以下核心子协议:

  • LDS(Listener Discovery Service):下发监听器配置,定义 Envoy 在哪些端口监听流量。
  • RDS(Route Discovery Service):下发路由规则,定义流量如何匹配和转发。
  • CDS(Cluster Discovery Service):下发集群配置,定义上游服务端点集合。
  • EDS(Endpoint Discovery Service):下发端点列表,定义具体的 Pod IP 和端口。
  • SDS(Secret Discovery Service):下发 TLS 证书和密钥,用于 mTLS 通信。
xDS 协议:控制面与数据面配置下发流程 xDS 协议:控制面与数据面配置下发流程 Istiod(控制面) 配置聚合与校验 服务注册表监听 证书管理 Envoy(数据面) 流量拦截与转发 负载均衡与熔断 指标与日志 LDS / RDS CDS / EDS SDS 双向 gRPC 流(ADS) 说明:Envoy 通过 ADS(Aggregated Discovery Service)在一个 gRPC 双向流中聚合所有 xDS 请求,减少连接数。

2.5 交互模式的关键特征

控制面与数据面的交互模式直接影响集群升级时的容量评估策略:

特征 描述 升级影响
最终一致性 控制面下发配置后,Envoy 异步应用,不保证强同步 升级期间可能出现短暂路由不一致,需设计优雅排空
增量推送 Istiod 仅推送变更部分(Delta xDS),而非全量配置 减少升级时控制面负载峰值,但需验证增量逻辑正确性
双向流 Envoy 与 Istiod 之间维持长连接 gRPC 流 升级 Istiod 会导致连接重建,Envoy 需重新请求全量配置
配置版本化 每次配置变更携带版本号,Envoy 通过 ACK/NACK 确认 版本不匹配可能导致 Envoy 拒绝配置,影响流量转发
升级风险提示:在控制面升级过程中,Envoy 与旧版 Istiod 断开连接后,会立即向新版 Istiod 发起全量 xDS 请求。如果集群规模较大(数千个 Sidecar),同时重建 gRPC 流和全量配置拉取可能导致控制面 CPU/内存瞬时飙升,甚至触发 OOM。这是容量评估必须覆盖的关键场景。

2.6 小结:容量评估的输入基础

理解 Service Mesh 的基础架构后,我们可以提炼出与容量评估直接相关的几个核心输入:

  • Sidecar 数量:决定控制面需要管理的代理实例总数,直接影响 xDS 推送的并发度。
  • 监听器与路由规则数量:决定 Envoy 配置的复杂度,影响内存占用和配置下发延迟。
  • 服务间通信吞吐量:决定 Envoy 的 CPU 消耗(TLS 加解密、头部解析)和连接数。
  • 指标基数:决定 Envoy 和 Prometheus 的内存消耗,高基数指标是容量瓶颈的常见来源。
  • 控制面连接数:决定 Istiod 的 gRPC 流管理开销,升级时需评估连接重建风暴。