1 - (2017)William Morgan的权威定义

William Morgan的博客文章给出的servicemesh的权威定义

A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware. (But there are variations to this idea, as we’ll see.)

服务网是一个专用的基础设施层,用于处理服务间通信。现代云原生应用程序有着复杂的服务拓扑,服务网格负责在这些拓扑中实现请求的可靠传递。在实践中,服务网格通常实现为一组轻量级网络代理,它们与应用程序代码部署在一起,而对应用程序透明。(但这个想法也有变化,我们会看到的)

来源

What’s a service mesh? And why do I need one?

https://buoyant.io/what-is-a-service-mesh

https://linkerd.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/

https://www.infoq.cn/news/2017/11/WHAT-SERVICE-MESH-WHY-NEED/ 中文翻译 by 薛命灯

William Morgan

2 - (QCon 2017年演讲)Servicemesh由来和定义

(QCon 2017年演讲)Servicemesh由来和定义

Service Mesh的定义

Service Mesh的定义最早是由出品Linkerd的Buoyant公司CEO William在他的经典博客文章 What’s a service mesh? And why do I need one? 给出来的。Linkerd是业界第一个Service Mesh项目,而Buoyant则创造了Service Mesh这个词汇的。作为Service Mesh全球第一个布道师,William给出的这个定义是非常官方和权威的:

A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.

服务网格是一个基础设施层,用于处理服务间通讯。现代云原生应用有着复杂的服务拓扑,服务网格负责在这些拓扑中实现请求的可靠传递。在实践中,服务网格通常实现为一组轻量级网络代理,它们与应用程序部署在一起,而对应用程序透明

我们来深入ServiceMesh具体的部署模型和工作方式,以便更好的理解Service Mesh的含义。

Service Mesh详解

单个服务调用

这是单个服务调用下的Service Mesh部署模型,当发起一个请求时,作为请求发起者的客户端应用实例,会首先用简单方式将请求发送到本地的Service Mesh代理实例。注意此时应用实例和代理是两个独立的进程,他们之间是远程调用,而不是代码层面的方法调用。

然后,Service Mesh的代理会完成完整的服务间通讯的调用流程,如服务发现、负载均衡等基本功能,熔断、限流、重试等容错功能,各种高级路由功,安全方面的认证、授权、鉴权和加密等,最后将请求发送给目标服务。最终表现为Sidecar模式,实现和传统类库类似甚至更完备的功能。

Sidecar这个词中文翻译为"边车",或者"车斗"。Sidecar 模式则早在Service Mesh出现前就在软件开发领域使用,它的灵感来源于实物,通过在原有的两轮摩托的一侧增加一个边车来实现对现有功能的扩展:

Service Mesh通过在请求调用的路径中增加Sidecar,将原本由客户端(通常通过类库)完成的复杂功能,下沉到Sidecar中,实现对客户端的简化和服务间通讯控制权的转移。

多个服务调用

当多个服务依次调用时,Service Mesh表现为一个单独的通讯层。在服务实例之下,Service Mesh接管整个网络,负责所有服务间的请求转发,从而实现让服务只需简单发送请求和处理请求的业务处理,不再负责传递请求的具体逻辑。中间服务间通讯的环节被剥离出来,呈现出一个抽象层,被称为服务间通讯专用基础设施层

大量服务调用

当系统中存在大量服务时,服务间的调用关系,就会表现为网状。如图所示,左边绿色的是应用程序,右边蓝色的是Service Mesh的Sidecar,蓝色之间的线条是表示服务之间的调用。可以看到Sidecar之间的服务调用关系形成一个网络,这也就是Service Mesh/服务网格名字的由来。

此时Service Mesh体现出来的依然是一个通讯层,只是这个通讯层内部更加复杂,不是简单的顺序调用关系,而是彼此相互调用,形成网状。

Service Mesh定义回顾

回顾Servicemesh的定义:

服务网格是一个基础设施层,用于处理服务间通讯。现代云原生应用有着复杂的服务拓扑,服务网格负责在这些拓扑中实现请求的可靠传递。在实践中,服务网格通常实现为一组轻量级网络代理,它们与应用程序部署在一起,而对应用程序透明

再来详细理解什么是Service Mesh:

  • 抽象:Service Mesh是一个抽象层,负责完成服务间通讯。但是和传统类库方式不同的是,Service Mesh将这些功能从应用中剥离出来,形成了一个单独的通讯层,并将其下沉到基础设施。
  • 功能:Service Mesh负责实现请求的可靠传递,从功能上说,和传统的类库方式并无不同,原有的功能都继续提供,甚至可以做的更多更好。
  • 部署:Service Mesh在部署上体现为轻量级网络代理,以Sidecar的模式和应用程序一对一部署,两者之间的通讯是远程调用,但是走的是localhost。
  • 透明:Service Mesh是应用程序是透明的,其功能实现完全独立于应用程序。应用程序无需关注Service Mesh的具体实现细节,甚至对Service Mesh的存在也可以无感知。带来的一个巨大优势是Service Mesh可以独立的部署升级,扩展功能修复缺陷而不必改动应用程序。

需要注意的是,上面的图中,如果把左边的应用程序去掉,只呈现出来Sidecar和它们之间的调用关系,这个时候Service Mesh的概念就会特别清晰:Sidecar和调用关系形成完整的网络,代表服务间复杂的调用关系,承载着系统内的所有应用。

这是Service Mesh定义中非常重要的一点,和传统的Sidecar模式不同的地方:Service Mesh不再将代理视为单独的组件,而是强调由这些代理连接而形成的网络。Service Mesh非常强调服务间通讯网络的整体,而不是简单的以个体的方式单独看待每个代理。

至此,我们描述了Service Mesh的定义并做了详细的解释,希望可以帮助大家了解到什么是Service Mesh。在下一章中,我们将给大家详细介绍Service Mesh技术的由来和发展历程。

3 - (2021)servicemesh.es网站的servicemesh介绍

servicemesh.es网站的servicemesh介绍

servicemesh.es 网站的介绍

https://servicemesh.es/

A service mesh is a dedicated infrastructure layer that adds features to a network between services. It allows to control traffic and gain insights throughout the system. Observability, traffic shifting (for canary releasing), resiliency features (such as circuit breaking and retry/timeout) and automatic mutual TLS can be configured once and enforced in a decentralized fashion. In contrast to libraries, which are used for similar functionality, a service mesh does not require code changes. Instead, it adds a layer of additional containers that implement the features reliably and agnostic to technology or programming language.

服务网格是一个专用的基础设施层,为服务间的网络增加功能。它允许控制流量并获得整个系统的洞察力。可观察性、流量转移(用于金丝雀发布)、弹性功能(如熔断和重试/超时)和自动双向TLS可以一次配置并以非中央化的方式执行。与用于类似功能的类库相比,服务网格不需要修改代码。相反,它增加了一层额外的容器,可靠地实现这些功能,并且和技术或编程语言无关。

The value of a service mesh grows with the number of services an application consists of. Logically, microservices architectures are the most common use cases for a service mesh. However, the specific interaction might be more relevant in regards to how a service mesh can improve the control, reliability, security, and observability of the services. Even a monolith could benefit from a service mesh and some concrete microservice applications might not.

服务网格的价值随着应用程序所包含的服务数量而增长。从逻辑上讲,微服务架构是服务网格最常见的用例。然而,对于服务网格如何改善服务的控制、可靠性、安全性和可观察性,具体的交互可能更有意义。即使是单体也可以从服务网格中受益,而一些具体的微服务应用可能不会。