2. Service Mesh 基础回顾:数据面与控制面的职责划分
在深入容量规划之前,必须厘清 Service Mesh 的两大核心组件——数据面(Data Plane)与控制面(Control Plane)的职责边界。这是后续所有容量模型、资源估算和升级策略的认知基础。
2.1 数据面与控制面的职责划分
| 维度 | 数据面(Data Plane) | 控制面(Control Plane) |
|---|---|---|
| 核心职责 | 拦截、处理、转发网格内所有业务流量 | 下发配置、管理证书、聚合遥测数据、驱动数据面行为 |
| 运行载体 | Sidecar 代理(Envoy / Linkerd-proxy) | 集中式服务(istiod / linkerd-controller) |
| 流量路径 | 处于业务容器与网络之间,在线处理每个请求 | 不参与业务请求路径,离线下发配置 |
| 资源敏感度 | 极高——直接影响延迟、吞吐、连接数 | 中等——影响配置下发速度,不直接影响请求 |
| 升级影响 | 重启 Sidecar 会导致连接断开、重试风暴 | 滚动升级期间配置推送可能延迟 |
| 容量规划重点 | CPU / 内存 / 连接数 / 文件描述符 | API 吞吐 / 缓存大小 / 证书签发 QPS |
关键认知:数据面是容量规划的主战场。集群升级时,Sidecar 代理的资源消耗会因版本差异、配置变更、连接迁移而产生非线性增长,必须单独建模。
2.2 Sidecar 代理的工作原理
Sidecar 代理以独立容器形式注入到业务 Pod 中,通过 iptables / eBPF 劫持进出流量。以 Envoy 和 Linkerd-proxy 为例,其核心工作流程如下:
- 流量劫持:Pod 启动时,Init 容器配置 iptables 规则,将入站和出站流量重定向到 Sidecar 的监听端口。
- 协议解析:Sidecar 识别 HTTP/1.1、HTTP/2、gRPC、TCP 等协议,提取元数据(Header、TLS SNI)。
- 策略执行:根据控制面下发的 xDS(Envoy)或 dst(Linkerd)配置,执行路由、重试、超时、熔断、限流等策略。
- 负载均衡:基于 EDS(端点发现)或服务发现结果,将请求转发到目标实例。
- 遥测上报:收集请求延迟、状态码、字节数等指标,异步上报到控制面或 Prometheus。
容量启示:步骤 2(协议解析)和步骤 5(遥测上报)是 CPU 消耗的主要来源;步骤 4(负载均衡)的端点数量直接影响内存占用。升级时若协议解析逻辑变更或遥测指标增加,资源基线会显著偏移。
2.3 Envoy 与 Linkerd-proxy 的架构对比
| 特性 | Envoy(Istio 默认) | Linkerd-proxy(Linkerd 默认) |
|---|---|---|
| 开发语言 | C++ | Rust |
| 线程模型 | 多线程 + 事件循环(Worker 线程池) | 单线程 + 异步 I/O(tokio) |
| 配置协议 | xDS(Aggregated Discovery Service) | 自定义 gRPC 流(dst / tap) |
| 内存基线 | 较高(~50-100 MB 空载) | 较低(~10-25 MB 空载) |
| 功能丰富度 | 极高(L7 路由、RBAC、Wasm、外部授权) | 适中(聚焦 L7 策略、mTLS、遥测) |
| 升级风险 | 配置兼容性复杂,需注意 xDS 版本 | 二进制替换简单,兼容性较好 |
| 适用场景 | 大型企业、多协议、复杂策略 | 中小规模、追求低资源、快速部署 |
2.4 Istio 与 Linkerd 架构对比
以下 SVG 图展示了 Istio 与 Linkerd 在控制面组件、数据面代理及配置下发路径上的核心差异。
2.5 升级视角的关键差异总结
- Sidecar 重启影响范围:Istio 的 Envoy 重启会导致所有连接断开,需要客户端重试;Linkerd-proxy 重启时通过连接迁移机制减少中断。
- 配置推送延迟:Istio 的 xDS 增量推送在大规模集群下可能产生瓶颈;Linkerd 的配置模型更简单,推送延迟更稳定。
- 资源消耗模型:Envoy 的内存与连接数、监听器数量强相关;Linkerd-proxy 的内存与端点数量、请求速率强相关。升级时必须分别建模。
- 升级策略:Istio 推荐金丝雀升级(先升级控制面,再逐步升级数据面);Linkerd 支持原地升级(直接替换二进制,连接保持)。
容量规划前置条件:在开始容量规划之前,必须明确当前集群使用的是 Istio 还是 Linkerd,以及具体的版本号。不同版本的数据面资源基线差异可达 30% 以上,切勿混用历史数据。