前面我们已经在k8s上部署了istio和官方的示例应用Bookinfo。本篇来学习一下ServiceMesh的基本概念,加深一下对服务网格的理解。ServiceMesh实际上处于云原生平台微服务的基础设施层,用来连接、管理和保护微服务。 目前CNCF官方项目列表中有两个Service Mesh的项目,分别是LinkerdEnvoy

Service Mesh的定义

BuoyantIO的WHAT’S A SERVICE MESH? AND WHY DO I NEED ONE?中给出了ServiceMesh的定义:

Service Mesh是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh保证请求可以在这些拓扑中可靠地穿梭。在实践上,Service Mesh由一系列轻量级的网络代理组成,它们同应用部署在一起,但对应用透明。

对应用透明,表明使用Service Mesh之后不需要在应用开发层面关注负载均衡、路由、熔断、限流、服务发现、分布式追踪等服务治理的内容,这些都将在Service Mesh这个基础设施层解决。

Service Mesh的功能

Service Mesh作为一个基础设施层用来管理微服务之间的通信,主要包含下面的功能:

  • 路由。例如根据路由规则确定请求是发给某个旧版本的服务实例还是发给最新版本的服务实例
  • 断路器
  • 负载均衡
  • 服务发现
  • 超时和重试
  • 延迟感知

Service Mesh是作为基础设施实现了上面的功能,而不与服务的代码相耦合。

参考