什么是服务网格?

What is a service mesh?

在云计算的背景下,后端开发人员经常提到构建(或使用)"service mesh",但我并不完全理解它是什么。你能告诉更多吗?

在分布式应用程序中,应用程序的每个部分都称为微服务,并分配了一项非常基本的任务来完成。这可以是 "return profile information" 甚至更小的一个。

所有这些微服务都需要相互通信才能构成整个应用程序。这正是服务网格所提供的。事实上,服务网格描述了两者:

  • 应用程序使用的所有微服务网络;
  • 以及可以让他们一起互动的软件。

Istio 是一种非常流行的服务网格软件,您通常会在从单体架构过渡而来的大型应用程序中找到它。但请记住,有 downsides to use a service mesh and more generally to adopt a distributed application.

在典型的基于微服务的分布式应用架构中,很少有以集中方式存在的功能被转移到微服务级别,这样业务逻辑模块处理功能和相关业务逻辑,网络功能负责内部服务通信、冗余、健康监控、服务发现等。编排与容器和微服务相结合有助于引入云设置的管理和可扩展性,但是还需要广泛管理端到端(服务到服务) ) 服务之间的连接以及它们之间的通信,还可以降低单个微服务在维护服务间通信、弹性、健康监视器、服务发现等方面的复杂性。这带来了对服务网格的需求。服务网格通常高于 CNI 并基于其功能构建。

在服务网格的帮助下,管理服务到服务通信的逻辑已经从单个微服务中抽取出来,并以基础设施层的形式抽象出来。所有服务间通信活动都已卸载到服务网格,服务网格又为冗余、服务发现、健康监控等网络功能提供内置支持。因此,使用服务网格,所有服务到服务的通信都应发生在称为服务网格(或边车代理)的软件组件之上,微服务不直接与其他微服务通信。

术语服务网格用于描述构成此类应用程序的微服务网络以及它们之间的交互[src] 服务网格支持跨服务的托管、可观察和安全通信,让您可以在所选基础架构上创建由许多微服务组成的强大企业应用程序。

服务网格架构在使用的任何开发范例中都使用称为 sidecar 的代理实例,通常是容器 and/or 微服务。在微服务应用程序中,sidecar 将附加到每个服务。在容器中,sidecar 附加到每个应用程序容器、VM 或容器编排单元,例如 Kubernetes pod [src].

Sidecar Proxy :Sidecar 代理与单个实例或 pod 一起运行。 Sidecars 可以处理从服务本身抽象出来的任务,例如路由或代理、进出与它一起运行的容器的流量、监控和安全性。 Sidecars 及其交互构成了服务网格中所谓的数据平面。

控制平面控制平面管理诸如创建实例、监控和实施网络管理和安全策略等任务。控制平面可以连接到 CLI 或 GUI 界面以进行应用程序管理 [src].

img src