Service Mesh 是干啥的?解决了什么问题?
Service Mesh 的特性
Service Mesh 的主流实现有哪些?
简单来讲,Service Mesh 简化 了微服务架构中服务间 调用复杂度 。
这就涉及到了2个问题:
服务调用怎么复杂了?
Service Mesh 怎么解决的?
对于每个微服务,我们可以简单的视为包含2个部分:
业务逻辑
网络功能
其中网络部分是非常复杂的,需要解决很多问题,例如:
使用什么网络传输协议(HTTP1.x/2.x, gRPC ……)
服务发现
熔断机制
处理超时
重试
服务调用时的负载均衡
……
每个微服务都需要处理这些网络问题,如果所有微服务都使用同一套语言还好,可以使用一个框架统一解决,但如果使用了多种语言,那么每种语言又需要统一处理一遍。
所以,可以说:
微服务架构中, 最复杂 的不是构建服务本身,而是处理 服务间调用问题 。
核心部分说明:
业务逻辑
微服务实现自己的业务功能。
内部网络功能
虽然很多网络功能都可以统一由 Service Mesh 解决,但有些基础的功能还需要微服务自己来解决。
例如,和 Service Mesh 如何沟通呢?使用 HTTP1.x, gRPC, TCP?
这部分功能通常由开发框架中的网络库来解决。
Service Mesh Sidecar(边车)
这部分就是用来解决应用级别通用的网络问题,例如熔断、超时、服务发现 ……。
把这些问题与微服务中的业务代码完全隔离开,开箱即用。
Service Mesh Control Plane
负责管理所有 service mesh 的代理。
例如:
1)访问控制
2)监控
3)服务发现
……
梳理一下 Service Mesh 的核心功能:
服务间调用的弹性处理:熔断、超时、重试、错误处理、负载均衡、故障转移。
服务发现:通过专用服务注册表发现服务终结点。
路由:提供原始的路由功能,不涉及服务中业务相关的路由功能。
监控:度量、监控器、分布式日志、分布式跟踪。
安全:传输层安全,key 管理。
访问控制:基于黑名单、白名单的访问控制。
部署:原生支持容器,Docker 和 Kubernetes。
通信协议:HTTP1.x, HTTP2, gRPC, TCP。
非常流行的2个开源实现:
Linkerd
Istio
他们的架构都比较简单,实现机制不同。
Service Mesh 把通用的服务调用需要处理的问题都统一处理了,你可以更加专注于服务自身的业务了,也可以放心的使用不同开发语言。
但 Service Mesh 也有不足,首先就是增加了系统整体的复杂度,例如增加了 Sidecar、Control Plane,而且服务间的通信不像以前那么直接了,需要经过代理。还有就是成熟度还不是很高,需要大规模线上应用的磨合完善。