1. 服务网格基础:什么是服务网格、Sidecar 代理模式、Istio/Envoy 架构概览

1.1 什么是服务网格

服务网格(Service Mesh)是云原生架构中用于处理服务间通信的基础设施层。它将流量管理、可观测性、安全策略从业务代码中剥离,下沉到独立的代理层,使开发者无需在应用内重复实现熔断、重试、超时等逻辑。

从拓扑角度看,服务网格由两部分构成:

  • 数据平面(Data Plane):由一组轻量级代理(Sidecar)组成,负责拦截并处理进出服务的所有网络流量。
  • 控制平面(Control Plane):集中管理数据平面代理的配置,下发路由规则、限流策略、TLS 证书等。
核心价值:服务网格实现了“通信即配置”,让运维人员通过声明式 API 控制服务间调用行为,无需修改业务代码。

1.2 Sidecar 代理模式

Sidecar 是服务网格的部署单元——每个服务实例旁边部署一个代理容器,所有入站和出站流量都经过该代理。这种模式带来以下优势:

维度 传统 SDK 模式 Sidecar 代理模式
侵入性 需引入特定语言库,修改代码 零侵入,代理与业务容器独立
语言绑定 每种语言需单独适配 语言无关,代理统一处理
升级成本 业务应用需重新构建部署 仅升级代理容器,业务无感
故障隔离 SDK 崩溃可能导致进程退出 代理故障不影响业务进程

Sidecar 代理的典型工作流程:

  1. 服务 A 发起 HTTP/gRPC 请求,流量被本地 Sidecar 拦截。
  2. Sidecar 根据控制平面下发的规则,执行负载均衡、重试、限流等策略。
  3. Sidecar 将请求转发至目标服务 B 的 Sidecar。
  4. 目标 Sidecar 将请求递交给服务 B 的业务容器。
Sidecar 代理模式通信流程 服务 A 业务容器 Sidecar 代理 服务 B 业务容器 Sidecar 代理 mTLS 加密通信 控制平面(Istiod) XDS 配置下发 XDS 配置下发

1.3 Istio / Envoy 架构概览

Istio 是目前最成熟的服务网格实现,其数据平面默认使用 Envoy 代理,控制平面由 Istiod 统一管理。整体架构分为三层:

1.3.1 数据平面:Envoy 代理

Envoy 是一个高性能、C++ 编写的 L7 代理,具备以下核心能力:

  • 流量拦截:通过 iptables 透明劫持所有入站/出站流量。
  • 协议支持:HTTP/1.1、HTTP/2、gRPC、TCP、WebSocket 等。
  • 高级负载均衡:支持加权轮询、最少请求、一致性哈希等算法。
  • 内置熔断与限流:基于连接池、异常检测、本地限流实现弹性。
  • 可观测性:自动生成访问日志、分布式追踪(Zipkin/Jaeger)、Prometheus 指标。

1.3.2 控制平面:Istiod

Istiod 是 Istio 的控制平面组件,整合了以下功能:

组件 职责 关键协议/接口
Pilot 服务发现、流量管理规则下发 XDS(LDS/RDS/CDS/EDS)
Citadel 证书签发、mTLS 身份认证 SPIFFE 标准
Galley 配置验证、格式转换与分发 Kubernetes CRD → 内部模型
性能关键点:Envoy 的 XDS 配置更新频率直接影响 Sidecar 的 CPU 开销。在限流降级策略频繁变更时,需关注控制平面配置推送的批量化与增量能力,避免因全量更新导致代理短暂阻塞。
Istio / Envoy 架构分层图 应用层 服务 A(Pod) | 服务 B(Pod) | 服务 C(Pod) 数据平面 Envoy Sidecar(流量拦截、负载均衡、熔断限流、可观测性) 控制平面(Istiod) Pilot(XDS 下发) Citadel(mTLS) Galley(配置校验) XDS 配置推送 基础设施层(Kubernetes / 虚拟机 / 混合部署)

1.4 限流降级在服务网格中的位置

在 Istio/Envoy 架构中,限流与降级策略通常配置在数据平面:

  • 本地限流:Envoy 基于令牌桶算法,在 Sidecar 内直接拒绝超出阈值的请求,延迟极低(微秒级)。
  • 全局限流:通过 Rate Limit Service(RLS)实现跨实例的精确限流,但会引入额外的 RPC 开销。
  • 熔断降级:Envoy 的异常检测与连接池熔断,在检测到上游故障时快速失败,防止级联雪崩。