深入解析云原生ServiceMesh:图文详细教程

发表时间: 2024-05-01 13:23

ServieMesh是云原生非常核心的组件,也是未来微服务的发展重心,下面我就全面来详解ServieMesh@mikechen

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

ServiceMesh定义

ServiceMesh被认为是新一代微服务架构,主要用于管理、和控制微服务架构中,服务间通信的基础设施层。

服务网格(Service Mesh),“服务”和“网格”是两个关键概念,它们共同构成了服务网格的核心理念和功能。

如下图所示:

上图所示,主要包含:深色服务(业务微服务),旁边蓝色是网格(边车Sidecar服务)。

在微服务架构中,“服务”:指的是系统中的一个功能单元或模块,它通常是一个独立部署的服务实例,通过网络接口提供特定的功能、或服务。

在服务网格中,“网格”:指的是微服务架构中的服务实例之间的通信网络、和拓扑结构。

服务网格通过在服务之间插入代理(通常是 sidecar 代理),形成了一个透明的、可编程的通信网络。

为什么需要ServiceMesh

在传统的服务治理中,服务框架的 SDK 负责处理服务注册、服务发现、负载均衡、故障恢复等任务,这使得业务代码与特定的服务框架紧密耦合。

为了解决这个问题,服务网格的出现提供了一种更为灵活和可控的服务治理方式。

服务网格通过在服务之间插入专用的代理(如 sidecar 代理),将通信逻辑从业务代码中分离出来,使得业务代码无需关心服务治理的具体实现细节。

这种方式使得服务治理能够以一种更为统一和标准化的方式实现,同时也提高了应用程序的灵活性和可移植性。

并且,服务网格作为一种新型的服务治理方式,也能够更好地满足云原生应用的设计理念。

ServiceMesh原理

服务网格(Service Mesh)的原理。主要基于两个关键概念:数据平面(Data Plane)、和控制平面(Control Plane)。

如下图所示:

1. 数据平面(Data Plane)

数据平面负责:拦截、处理和转发进出服务实例的所有流量,同时执行诸如负载均衡、故障恢复、安全策略等任务。

代理,是数据平面的核心组件,通常以 sidecar 代理的形式,部署在每个服务实例旁边。

如下图所示:

代理负责:拦截进出服务实例的所有流量,并执行各种任务,如负载均衡、路由、故障检测、安全策略等。

Sidecar 代理、与业务代码相分离,服务实例的业务逻辑无需感知代理的存在。

所以,这种解耦,可以帮助实现服务间通信的透明性,并使得通信逻辑、与业务逻辑分离。

2. 控制平面(Control Plane)

控制平面,主要用于:配置、监控和管理整个服务网格中的服务间通信。

控制平面由多个子组件组成,这些组件协同工作以实现对服务间通信的配置、路由、监控和安全策略的管理。

比如:

  • Pilot :是 Istio 控制平面的核心组件之一,负责服务发现和路由管理。
  • Galley :是 Istio 控制平面的配置管理组件,负责处理和验证配置信息。
  • Citadel :是 Istio 控制平面的安全组件,负责服务间通信的身份认证和加密。
  • Mixer :是 Istio 控制平面的策略执行组件,负责执行访问控制、流量控制等策略。

这些组件通常以一种分布式系统的方式部署和协作,以实现对服务间通信的全面管理、和控制。

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。