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 的典型架构,以及数据平面与控制平面之间的交互关系:

Istio / Envoy 架构图 Istio / Envoy 服务网格架构 控制平面 (Istiod) Pod A 业务容器 Envoy 边车 入站 出站 Pod B 业务容器 Envoy 边车 入站 xDS 配置推送 xDS 配置推送 服务间流量 说明: Envoy 边车代理拦截 Pod 内所有进出流量,控制平面 Istiod 通过 xDS 协议向 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 证书验证缓慢),都会直接导致首次请求的端到端延迟显著增加。后续请求由于连接复用和缓存命中,延迟会大幅下降,这也是“首次请求延迟问题”成为服务网格性能优化焦点的原因。

1.5 本章小结