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