Service Mesh的实现原理

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【5月更文挑战第6天】Service Mesh是一种针对云原生应用的服务治理技术,通过轻量级网络代理(SideCar)实现服务间的通信和可靠性保证,无需代码集成。它解决了跨语言服务调用和云原生服务治理的问题。

Service Mesh是一种新型的用于处理服务与服务之间通信的技术,尤其适用于以云原生应用形式部署的服务,能够保证服务与服务之间调用的可靠性。在实际部署时,Service Mesh通常以轻量级的网络代理方式与应用的代码部署在一起,从而以应用无感知的方式实现服务治理。

1、与传统的微服务架构的本质区别

Service Mesh以轻量级的网络代理方式与应用的代码部署在一起,用于保证服务与服务之间调用的可靠性,这与传统的微服务架构有着本质区别,具体体现在以下两点。

  • 跨语言服务调用的需要。大多数公司通常都存在多个业务团队,每个团队业务所采用的开发语言一般都不相同。比如移动服务端的业务主要采用的是PHP语言开发,API平台的业务主要采用的是Java语言开发,移动服务端调用API平台使用的是HTTP请求。如果要进行服务化,改成RPC调用,就需要一种既支持PHP语言又支持Java语言的服务化框架。
  • 云原生应用服务治理的需要。现在微服务越来越多开始容器化,并使用类似Kubernetes的容器平台对服务进行管理,逐步向云原生应用的方向进化。而传统的服务治理要求在业务代码里集成服务框架的SDK,这显然与云原生应用的理念相悖,因此迫切需要一种对业务代码无侵入的适合云原生应用的服务治理方式。

2、Service Mesh实现原理

服务A要调用服务B,经过Linkerd来代理转发,服务A和服务B的业务代码不需要关心服务框架功能的实现。为此Linkerd需要具备负载均衡、熔断、超时重试、监控统计及服务路由等功能。这样,对于跨语言服务调用来说,即使服务消费者和服务提供者采用的语言不同,也不需要集成各自语言的SDK。

可见Service Mesh的实现原理有以下两个。

  • 一个是轻量级的网络代理,也被称为SideCar,它的作用就是转发服务之间的调用。
  • 一个是基于SideCar的服务治理,也被称为Control Plane,它的作用是向SideCar发送各种指令,以完成各种服务治理功能。

3、SideCar

在Service Mesh架构中,服务框架的功能都集中在SideCar中实现,并在每一个服务消费者和服务提供者的本地都部署一个SideCar,服务消费者和服务提供者只负责自己的业务实现,服务消费者向本地的SideCar发起请求,本地的SideCar根据请求的路径向注册中心查询,得到服务提供者的可用节点列表后,再根据负载均衡策略选择一个服务提供者节点,并向这个节点上的SideCar转发请求,服务提供者节点上的SideCar完成流量统计、限流等功能后,再把请求转发给本地部署的服务提供者进程,从而完成一次服务请求。

服务消费者节点上的SideCar称为正向代理,服务提供者节点上的SideCar称为反向代理,Service Mesh架构的关键点就在于服务消费者发出的请求如何通过正向代理转发,以及服务提供者收到的请求如何通过反向代理转发。

4、Control Plane

SideCar能实现服务之间的调用拦截功能,那么服务之间的所有流量都可以通过SideCar来转发,这样所有的SideCar就组成了一个服务网格,再通过一个统一的地方与各个SideCar交互,就能控制网格中流量的运转了,这个统一的地方在Service Mesh中就被称为Control Plane。

Control Plane包括以下功能:

  • 服务发现

服务提供者会通过SideCar注册到Control Plane的注册中心,这样服务消费者把请求发送给SideCar后,SideCar就会查询Control Plane的注册中心来获取服务提供者节点列表。

  • 负载均衡

SideCar从Control Plane获取到服务提供者节点列表信息后,需要按照一定的负载均衡算法从可用的节点列表中选取一个节点发起调用,可以通过Control Plane动态修改SideCar中的负载均衡配置。

  • 请求路由

SideCar从Control Plane获取的服务提供者节点列表,也可以通过Control Plane来动态改变,如需要进行A/B测试、灰度发布或者流量切换时,就可以动态地改变请求路由。

  • 故障处理

服务之间的调用如果出现故障,就需要加以控制,常用的手段有超时重试、熔断等,这些都可以在SideCar转发请求时,通过Control Plane动态配置。

  • 安全认证

可以通过Control Plane控制一个服务可以被谁访问,以及访问哪些信息。

  • 监控上报

所有SideCar转发的请求信息都会发送到Control Plane,再由Control Plane发送给监控系统,如Prometheus等。

  • 日志记录

所有SideCar转发的日志信息也会发送到Control Plane,再由Control Plane发送给日志系统,如Stackdriver等。

  • 配额控制

可以在Control Plane中为服务的每个调用方配置最大调用次数,在SideCar转发请求给某个服务时,会审计调用是否超出服务对应的次数限制。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
负载均衡 监控 Cloud Native
|
6月前
|
Kubernetes 网络协议 数据库
在Service Mesh内访问网格外的服务
阿里云服务网格ASM提供了访问外部服务的三种方式,包含设置外部服务访问策略、配置ServiceEntry和设置拦截对外访问的网段。本文介绍如何在服务网格ASM上访问外部服务。
98 0
|
6月前
|
负载均衡 Dubbo Java
Service Mesh 的基本模式
【5月更文挑战第16天】Service Mesh分为两种模式:Sidecar和第二代Service Mesh。
|
6月前
|
负载均衡 监控 Cloud Native
Service Mesh 的实现原理
【2月更文挑战第20天】
|
11月前
|
Kubernetes 监控 Cloud Native
k8s 自身原理之 Service
k8s 自身原理之 Service
|
运维 监控 安全
什么是service mesh?
什么是service mesh?
|
Rust Kubernetes 负载均衡
Service Mesh 体系解析
Service Mesh(服务网格)诞生于云原生生态领域的潮流中,虽然大家对这一技术生态充满不确定性,甚至难以接受,然而,如果我们消除外面的“杂声”,细心洞察里面的细节,或许能有不一样的收获,毕竟,所有新技术的出现是为了解决业务痛点,而非是为了一些没用意义的炒作。
367 0
|
存储 负载均衡 Kubernetes
简单说说K8S的Service底层,总感觉还是说不清楚。
简单说说K8S的Service底层,总感觉还是说不清楚。
195 0
|
负载均衡 Kubernetes Cloud Native
对 Service Mesh 望而却步?可能都没理解这一点
Service Mesh 发展已经有 6-7年的时间,很多人对 Service Mesh 只停留在知道的水平上,特别是很多技术人第一次接触到 Service Mesh,看到服务网格的解释,看到 Istio 的架构,对这门技术仍然云里雾里。实际上,劝退大多数人的不是技术,而是概念本身。
201 0
对 Service Mesh 望而却步?可能都没理解这一点
|
Kubernetes 监控 Devops
Service Mesh 介绍| 学习笔记
快速学习 Service Mesh 介绍