16°

开发者必须要了解的架构技术趋势:Service Mesh

## 内容概要

* Service Mesh 是干啥的?解决了什么问题?
* Service Mesh 的特性
* Service Mesh 的主流实现有哪些?

## 1. Service Mesh 是什么?

简单来讲,Service Mesh **简化**了微服务架构中服务间**调用复杂度**。

这就涉及到了2个问题:

* 服务调用怎么复杂了?
* Service Mesh 怎么解决的?

### (1)服务调用复杂度问题

对于每个微服务,我们可以简单的视为包含2个部分:

* 业务逻辑
* 网络功能

其中网络部分是非常复杂的,需要解决很多问题,例如:

* 使用什么网络传输协议(HTTP1.x/2.x, gRPC ……)
* 服务发现
* 熔断机制
* 处理超时
* 重试
* 服务调用时的负载均衡
* ……

每个微服务都需要处理这些网络问题,如果所有微服务都使用同一套语言还好,可以使用一个框架统一解决,但如果使用了多种语言,那么每种语言又需要统一处理一遍。

所以,可以说:

> 微服务架构中,**最复杂**的不是构建服务本身,而是处理**服务间调用问题**。

### (2)Service Mesh 怎么解决的?

![](https://tva1.sinaimg.cn/large/006tNbRwly1gayob9hpphj316y0iwdhn.jpg)

核心部分说明:

* **业务逻辑**

微服务实现自己的业务功能。

* **内部网络功能**

虽然很多网络功能都可以统一由 Service Mesh 解决,但有些基础的功能还需要微服务自己来解决。

例如,和 Service Mesh 如何沟通呢?使用 HTTP1.x, gRPC, TCP?

这部分功能通常由开发框架中的网络库来解决。

* **Service Mesh Sidecar(边车)**

这部分就是用来解决应用级别通用的网络问题,例如熔断、超时、服务发现 ……。

把这些问题与微服务中的业务代码完全隔离开,开箱即用。

* **Service Mesh Control Plane**

负责管理所有 service mesh 的代理。

例如:

1)访问控制

2)监控

3)服务发现

……

## 2. Service Mesh 功能特性

梳理一下 Service Mesh 的核心功能:

* **服务间调用的弹性处理**:熔断、超时、重试、错误处理、负载均衡、故障转移。
* **服务发现**:通过专用服务注册表发现服务终结点。
* **路由**:提供原始的路由功能,不涉及服务中业务相关的路由功能。
* **监控**:度量、监控器、分布式日志、分布式跟踪。
* **安全**:传输层安全,key 管理。
* **访问控制**:基于黑名单、白名单的访问控制。
* **部署**:原生支持容器,Docker 和 Kubernetes。
* **通信协议**:HTTP1.x, HTTP2, gRPC, TCP。

## 3. Service Mesh 实现

非常流行的2个开源实现:

* Linkerd
* Istio

他们的架构都比较简单,实现机制不同。

## 4. 小结

Service Mesh 把通用的服务调用需要处理的问题都统一处理了,你可以更加专注于服务自身的业务了,也可以放心的使用不同开发语言。

但 Service Mesh 也有不足,首先就是增加了系统整体的复杂度,例如增加了 Sidecar、Control Plane,而且服务间的通信不像以前那么直接了,需要经过代理。还有就是成熟度还不是很高,需要大规模线上应用的磨合完善。

**推荐阅读:**

* [2020年软件开发趋势](https://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652403340&idx=1&sn=5faac27e6fea482f6b4e83b721aaa5e9&chksm=8bd8f06abcaf797c865eef683ec2a26c27f8caaf7f407746c3eee5e243733b2101a13181562d&token=801044272&lang=zh_CN#rd)
* [服务注册发现技术对比](https://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652403302&idx=1&sn=f1320133d072ac6f0d35a4fd1dfcd2f0&chksm=8bd8f080bcaf79965dfedb9236f4f04a2be88169d072b0f53a7fa749c6a89c47269fbbfa7127&token=801044272&lang=zh_CN#rd)
* [Zookeeper vs Etcd](https://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652403280&idx=1&sn=e234f524c0a939c535e43a5f62d101ad&chksm=8bd8f0b6bcaf79a0a7b8a490a4b7266fbff86c3382dd0669982cdebedd5efe01fe941a9dff62&token=801044272&lang=zh_CN#rd)
* [阿里开源的分布式事务框架 Seata](https://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652403185&idx=1&sn=fdc73d943e780942a6a8982e2f1a2edf&chksm=8bd8f317bcaf7a0162f029c41c7bdb0a6672ea61cf5d8680200a796a23cee30350c112eb8356&token=801044272&lang=zh_CN#rd)
* [快速理解 MySQL 事务隔离级别](https://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652403002&idx=1&sn=61069c6eddab7ee13c3cd3f38f5bcbfc&chksm=8bd8f3dcbcaf7acaaa66a7e5689e002c1ac8ae306af7307aeb0d0f6046a5831886d0f365843d&token=801044272&lang=zh_CN#rd)

![](https://tva1.sinaimg.cn/large/006y8mN6ly1g9emxiav0zj31a60i8gpc.jpg)

本文由【性能与架构】发布于开源中国,原文链接:https://my.oschina.net/u/3173102/blog/3159372

全部评论: 0

    我有话说: