服务网格作为微服务架构下的关键基础设施层,通过将服务间通信的复杂性(如服务发现、负载均衡、流量控制、安全性、可观测性)从业务逻辑中解耦,并下沉至平台层,极大地简化了分布式系统的开发与运维。
随着云计算的普及和容器化技术的成熟,微服务架构已成为构建复杂、可扩展应用的主流模式。然而,当单体应用被拆分为众多细小的、独立部署的服务后,服务间的通信变得异常复杂和关键。开发者不仅要关注业务逻辑的实现,还必须处理分布式系统固有的一系列挑战,包括服务发现、负载均衡、故障恢复、安全认证、监控追踪等。这些与业务逻辑无关但又至关重要的“网络通信”问题,传统上往往通过在应用代码中嵌入各种SDK来解决,但也导致了技术栈绑定、代码侵入性强、升级维护困难等一系列问题。
服务网格(Service Mesh)就是为了解决这一类问题,将这些通用功能从应用程序中剥离出来,下沉到平台层,由一个独立的基础设施组件负责管理。不仅将业务开发人员从复杂的分布式系统通信问题中解放出来,可以更专注于业务功能实现本身,同时也为运维团队提供了统一的、全局的服务治理、安全管控和可观测性能力。
1、服务网格的核心架构:控制平台与数据平面
Service Mesh最核心的架构设计思想云原生设计的关注点分离原则,将对基础设施和通信的“非功能性”关注(横切关注点),从核心业务代码中剥离出来,交由专门的组件(Sidecar)处理。Service Mesh的架构主要由控制面(Control Plane)和数据面(Data Plane)两大部分组成:
- 控制面 (Control Plane):不直接参与服务间的实际数据传输,而是负责管理和配置数据平面中的所有代理,负责管理和下发所有配置、安全策略及服务发现信息。控制平面提供API供运维人员定义策略和配置(如路由规则、安全策略),并将这些配置动态地分发给数据平面中的代理,指导它们的行为。以主流的Istio为例,其核心组件istiod整合了配置管理、证书签发等功能,通过 xDS 协议实时动态地将规则推送给数据面,实现了无需重启应用的热更新。
- 数据面 (Data Plane):由一组与每个服务实例伴生部署的轻量级 Sidecar 代理 组成,它们构成了处理流量的分布式网络。所有服务的网络流量都会被Sidecar透明拦截,执行从控制面接收到的各类策略。所有服务网格的功能,如负载均衡、熔断、重试、mTLS加密、遥测数据收集等,都在这一层被实际执行。

Service Mesh架构的优势在于:
- 解耦与抽象:数据平面处理实时流量,对性能要求极高;控制平面处理配置和管理,对一致性和可靠性要求高。二者分离,可以独立演进和优化。
- 集中式管理:运维人员只需与控制平面交互,即可对整个服务网格的行为进行全局配置和监控,而无需关心每个服务实例的具体实现。
- 动态性:控制平面可以根据系统状态的变化(如服务部署、扩缩容、故障等)实时更新数据平面的配置,使服务网格具备高度的动态适应能力。
选型建议:Envoy凭借高性能L4/L7代理、丰富的过滤器插件和活跃社区在数据平面占据主导;Istio提供最完整的流量治理能力,但资源消耗较高;Linkerd以轻量化和简洁著称,适合对资源敏感或规模较小的场景。

1.1 数据平面(Data Plane)
数据平面是Service Mesh中负责直接处理和转发网络流量的部分。它由一系列轻量级的网络代理组成,这些代理部署在每个微服务实例的旁边,拦截所有进出该服务实例的TCP流量。目前业界最主流的数据平面代理是Envoy,它由Lyft公司开发并贡献给CNCF。
数据平面的核心职责包括:
- 流量拦截与转发:透明地拦截应用的入站和出站流量,并根据控制平面下发的规则进行智能路由和转发。
- 服务发现与负载均衡:代理内部维护着一个上游服务实例的注册表,并根据预设的负载均衡策略(如轮询、最少连接、哈希等)将出站请求分发到健康的实例上。
- 执行流量策略:实现精细的流量控制,如请求路由(基于路径、Header、Cookie等)、流量分割(用于金丝雀发布)、超时、重试、熔断等 。
- 执行安全策略:负责服务间的认证(如mTLS握手)、授权(根据访问策略允许或拒绝请求)以及流量加密解密 。
- 遥测数据收集:在每次请求处理过程中,生成详细的遥测数据,包括延迟、吞吐量、成功率等指标,以及分布式追踪的Span信息,并将其上报给监控系统。
1.2 控制平面(Control Plane)
控制平面不直接处理任何业务流量,而是负责管理和配置数据平面中的所有代理,向它们下发策略和配置,使它们能够协同工作。控制平面的核心职责包括:
- 配置中心:提供统一的API供运维人员定义高级的流量规则、安全策略和可观测性策略。
- 服务发现:与底层的基础设施集成,发现平台中所有的服务及其端点信息。
- 策略翻译与下发:将用户定义的高级策略翻译成数据平面代理能够理解的低级、具体的配置。
- 配置分发:通过标准化的API(如Envoy的xDS协议)将翻译好的配置动态地推送给数据平面中的所有相关代理 。
- 证书管理:作为证书颁发机构(CA),为网格内的每个服务颁发身份证书,并管理证书的轮换,为数据平面的mTLS提供支持。
控制平面和数据平面之间需要一个标准化的通信协议来传递配置。Envoy项目开创并标准化的xDS(Discovery Service)协议已成为事实上的标准。
1.3 Sidecar模式
Sidecar模式是目前实现Service Mesh数据平面的最广泛采用的部署模式。在该模式下,数据平面的代理作为一个独立的容器(Sidecar Container),与业务应用容器一起被部署在同一个Pod或虚拟机中。它们共享同一个网络命名空间,因此Sidecar代理可以通过localhost来与业务应用容器通信。

Sidecar模式的工作流程如下:
- 注入:在创建业务应用的Pod时,一个自动化的过程会修改Pod的定义,向其中添加Sidecar代理容器的配置。
- 流量劫持:同时,注入过程还会修改Pod的网络配置(通常是使用iptables规则),将所有进出业务应用容器的IP流量都重定向到Sidecar代理的特定端口上。
- 代理处理:
- 出站流量:当业务应用向外发起一个请求时,该请求被iptables规则拦截,并转发给Sidecar代理。Sidecar代理随后执行服务发现、负载均衡、熔断、重试等策略,然后将请求转发给目标服务的某个实例的Sidecar代理。
- 入站流量:当一个外部请求到达该Pod时,它同样先被iptables规则拦截并交由Sidecar代理处理。Sidecar代理会执行安全策略(如mTLS解密、授权检查),并收集遥测数据,最后将合法的请求转发给localhost上正在监听的业务应用容器。
这个过程对业务应用是完全透明的,应用本身既不知道Sidecar的存在,也不知道其网络流量被拦截和处理了
1.4 与传统微服务架构对比
与传统Spring Cloud微服务方案对比如下:

Service Mesh优势如下:
- 架构解耦,专注业务:将服务治理能力彻底与业务逻辑分离,开发人员可以专注于业务本身,无需关心底层通信细节,实现“业务代码零侵入”。
- 跨语言统一治理:Sidecar作为独立进程,可以为不同语言编写的服务提供标准化的熔断、路由、安全等治理能力。
- 灵活的流量控制与发布策略:支持灰度发布、A/B测试、故障注入等高级流量管理功能。
- 强化安全防线:通过自动化的mTLS实现服务间零信任安全网络,极大提升了系统的安全能力。
- 完善的可观测性:天然集成了分布式追踪、指标收集和日志聚合能力,为故障排查和性能分析提供了强大的数据支撑。
不过Service Mesh流量经过Sidecar代理会增加处理链路,会引入1~3ms的性能延迟、增加CPU和内存资源。同时需要管理控制面和所有Sidecar代理,对运维团队的技术要求更高,故障定位和问题排查更为复杂。
2、服务网格的核心功能实现机制
服务网格的核心价值主要体现在三个功能上:流量管理、安全性和可观测性。
2.1 流量管理
1)服务发现与负载均衡
在微服务环境中,服务实例的地址是动态变化的。服务网格通过其控制平面和数据平面协同工作,实现了自动化、智能化的服务发现和负载均衡。
- 发现机制:控制面持续监控平台(如Kubernetes API Server)服务注册变化,构建全局实时视图;通过EDS API将端点列表推送给Sidecar代理,对应用透明。
- 负载均衡机制:代理使用本地端点列表和CDS下发的策略,在出站时选择实例;支持轮询、最小连接、随机、加权、会话亲和性(基于请求哈希)等算法。
2)动态路由与流量拆分
服务网格支持对L7流量的精细化控制能力,因此复杂的部署策略如金丝雀发布、A/B测试、蓝绿部署变得异常简单。
- 运维人员通过向控制平面提交声明式的配置资源(如Istio的
VirtualService和DestinationRule)来定义流量路由规则。 - 控制平面解析这些高级规则,并将其转换为Envoy能够理解的低级路由配置,并通过RDS API推送给代理
- 代理根据请求属性匹配规则,实现金丝雀发布、A/B 测试等,无需重启应用。
3)熔断和重试机制
服务网格内置了强大的弹性和韧性机制,以提升分布式系统的健壮性,防止局部故障级联导致整个系统崩溃。
- 熔断器:监控对某个服务的调用情况,当发现该服务持续出现故障时,暂时“熔断”对其的进一步调用,避免无效请求消耗资源,并给故障服务一个恢复的时间窗口。实现上通过状态机(关闭→打开→半开→关闭),基于连续错误数/错误率触发快速失败;支持最大熔断比例、熔断时长等配置,半开状态探测恢复。
- 重试:对于瞬时性网络抖动或服务短暂不可用进行自动重试。实现上按条件(如 5xx)自动重试,可配置尝试次数、每次超时、重试条件;采用指数退避 + 随机抖动防止重试风暴。
2.2 安全性
1)零信任与 mTLS
零信任安全模型的核心思想是“从不信任,永远验证”,即网络内部的任何通信都不能被默认认为是可信的,必须经过严格的身份验证和授权。服务网格通过自动化mTLS实现。
- 基于SPIFFE的工作负载身份,控制面CA自动签发X.509证书,通过SDS API动态分发和轮换。
- Sidecar间自动进行mTLS握手,双向验证证书并建立加密通道,对应用完全透明。
2)细粒度访问控制
运维人员可以定义授权策略(如Istio的AuthorizationPolicy),明确规定哪些源服务(基于其SPIFFE身份)被允许访问哪些目标服务。目标Sidecar在入站时执行策略,不匹配则拒绝(403)。
2.3 可观测性
服务网格通过其数据平面,自动地为所有服务间通信生成了丰富的遥测数据,包括指标(Metrics)、日志(Logging)与追踪(Tracing)。
- 指标 (Metrics):Sidecar代理为流经它的所有流量自动生成大量的、标准化的指标。这些指标包括Traffic、Latency、Errors等。
- 日志 (Logging):Sidecar可以为每个请求生成详细的访问日志,格式统一,包含源/目的IP、方法、路径、协议、响应码、耗时、用户代理等丰富信息
- 追踪 (Tracing):链路追踪中能够追踪一个请求的完整调用链。代理自动传播Trace Context并生成Span,构建服务间调用链,无需应用插桩即可获取完整拓扑和时序;后端可对接Jaeger/Zipkin。
运维人员通过控制平面来配置可观测性功能,例如启用/禁用特定的遥测数据收集、调整追踪的采样率、配置日志格式等。
Service Mesh的本质,是从业务代码中剥离所有与服务通信相关的横切关注点,将其下沉为标准化的基础设施,从而实现解耦、统一治理和可观测性的提升。Service Mesh是服务间TCP/IP协议之上的抽象层,接管服务间的所有网络流量,统一实现治理能力,对业务应用完全透明。它的出现解决了传统微服务治理方案(如Spring Cloud、Dubbo SDK)的语言强绑定、业务与治理耦合、SDK升级复杂、多团队治理标准不统一等核心痛点。
参考资料:
- https://developer.aliyun.com/article/1719152
396

被折叠的 条评论
为什么被折叠?



