1. 服务网格概述
1.1 服务网格定义
服务网格(Service Mesh)是云原生架构中用于处理服务间通信的基础设施层。它将原本嵌入在应用代码中的网络逻辑(服务发现、负载均衡、熔断、重试、TLS 终止、可观测性等)抽离出来,下沉到一组独立的代理进程中,使开发者可以专注于业务逻辑,而无需关心底层网络细节。
核心思想:服务网格通过“边车代理”模式,将通信功能从应用容器中剥离,形成独立的数据平面,并通过统一的控制平面进行策略下发与状态管理。
1.2 核心组件:数据平面与控制平面
服务网格架构由两个核心平面组成,它们各司其职,共同保障服务间通信的可靠性、安全性与可观测性。
| 平面 | 职责 | 典型组件 | 关键能力 |
|---|---|---|---|
| 数据平面 | 处理所有服务间网络流量,执行转发、路由、健康检查、负载均衡等操作 | Envoy、Linkerd-proxy、MOSN | 透明代理、协议解析、流量拦截、指标采集 |
| 控制平面 | 管理数据平面代理的配置下发、服务发现、证书签发、访问控制策略 | Istiod(Pilot + Citadel + Galley)、Consul、Kuma | 配置管理、证书轮换、策略编排、API 转换 |
数据平面通常以边车容器的形式与业务容器部署在同一个 Pod 中,拦截所有进出 Pod 的流量。控制平面则作为集群级别的组件运行,通过 xDS 协议(Discovery Service)将路由规则、监听器、集群等信息推送给数据平面代理。
1.3 Istio / Envoy 架构简介
Istio 是目前最流行的服务网格实现之一,其架构以 Envoy 作为数据平面代理,以 Istiod 作为统一控制平面。Envoy 由 Lyft 开源,采用 C++ 编写,具备高性能、低延迟、可编程的特点,是 CNCF 毕业项目。
性能关注点:Envoy 的 L4/L7 代理能力虽然强大,但在首次请求场景下,代理链路的建立(包括 DNS 解析、TLS 握手、xDS 配置同步、连接池初始化)会引入额外的延迟开销。这正是本课程后续章节重点诊断与优化的对象。
下图展示了 Istio + Envoy 的典型架构,以及数据平面与控制平面之间的交互关系:
1.4 代理链路建立的关键环节
在服务网格环境中,首次请求的延迟往往高于后续请求,这是因为代理链路需要经历完整的建立过程。下表列出了首次请求时数据平面代理必须完成的几个关键步骤:
| 阶段 | 描述 | 潜在延迟来源 |
|---|---|---|
| 1. xDS 配置同步 | Envoy 从 Istiod 获取初始的 Listener、Route、Cluster、Endpoint 配置 | 控制平面响应延迟、网络往返、配置体积过大 |
| 2. DNS 解析 | Envoy 解析目标服务的 DNS 名称,获取后端 IP 列表 | DNS 缓存未命中、上游 DNS 服务器延迟 |
| 3. TLS 握手 | 如果启用了 mTLS,Envoy 之间需要完成双向 TLS 证书验证与密钥协商 | 证书链验证、密钥交换计算开销 |
| 4. 连接池初始化 | Envoy 为上游集群创建 HTTP/1.1 或 HTTP/2 连接池 | TCP 三次握手、HTTP/2 设置帧交换 |
| 5. 负载均衡决策 | Envoy 根据负载均衡算法选择一个后端实例 | 一致性哈希计算、区域感知路由判断 |
延迟陷阱:在首次请求场景下,上述步骤是串行执行的。任何一个环节出现瓶颈(如控制平面配置推送延迟超过 100ms、DNS 解析超时、TLS 证书验证缓慢),都会直接导致首次请求的端到端延迟显著增加。后续请求由于连接复用和缓存命中,延迟会大幅下降,这也是“首次请求延迟问题”成为服务网格性能优化焦点的原因。