用人话说明白Service Mesh(服务网格)

用人话说明白Service Mesh(服务网格)

首先让我们理解Service Mesh的概念,它非常精炼:
Service Mesh的功能和范围:服务间通信
Service Mesh的目标:请求的可靠传递
Service Mesh的部署方式:轻量级网络代理
Service Mesh的特点:对应用透明,零侵入


什么是Service Mesh

定义:

  • Service Mesh用于处理微服务间通信的基础设施层,用于在云原生应用复杂的拓扑结构中实现可靠的请求传递
  • 在实践中,Service Mesh一般是一组和应用一起部署,但是对应用透明的轻量级网络代理,一般以sidecar的形式部署在服务两侧。

那么Service Mesh和其他微服务框架(Spring CloudDubbo)的本质区别在哪呢?

  1. Service Mesh将原本微服务之间的通信从应用中剥离形成一个单独的通讯层,起到了承上启下的作用,一方面利用了底层容器的系统能力,一方面为上层应用提供可靠的通讯服务
  2. Service Mesh可以一路下沉到基础设施层,并充分利用底层基础设施(比如k8s)的能力

那么,什么是sidecar呢?


sidecar模式

sidecar翻译成接地气的中文,大概是“边三轮”,大伙儿应该都看过抗日剧,“边三轮”就是小鬼子坐的那种摩托车,有没有旁边那个座位小摩托都能跑~

所谓sidecar模式,就是将应用功能从应用本身剥离出来作为单独进程的模式,它允许我们以松耦合的方式向应用无侵入地添加多种功能。

Service Mesh中的Sidecar

  • Service Mesh的核心就是Sidecar它和应用部署在一起,零侵入地代理应用的网络,实现可靠的请求传递

  • Sidecar和微服务节点部署再同一台主机上并且共用相同的虚拟网卡,所以Sidecar和微服务节点之间的通信实际上是通过内存拷贝实现的,不会带来额外的网络成本,但是内存拷贝的额外成本仍然会在一定程度上影响性能

  • Sidecar要求高性能、低资源消耗,并且要求高并发和网络编程,同时要和底层的k8s等基础设置频繁交互,所以最理想的编程语言非Go莫属。

  • 最成熟的Sidecar当属Envoy,但是它是C++编程的,维护成本高,所以很多公司在Service Mesh落地时,会用Go开发自己的Sidecar

现在我们知道了Service Mesh通过Sidecar代理模式实现微服务之间可靠通信的基础设施层,可以回过头来质疑下:
为什么需要Service Mesh
原本微服务间是怎么通信的?
存在什么问题?


为什么需要Service Mesh

1.RPCHTTP RESTful接口不适用于跨语言微服务通信

微服务之间的通讯一般有两种方式,一种是RPC框架,另一种就是HTTP RESTful接口:

  1. HTTP RESTful接口的好处在于HTTP是明文协议,并且足够简单,天生支持跨语言微服务之间的通信,但是缺点是HTTP协议本身比较臃肿,内部服务通信并不需要那么多无用的请求头
  2. RPC框架具有可编程特性,可以进行定制化开发,比HTTP轻量,但是缺点也很明显,RPC不支持跨语言微服务之间的通信,而如果采用序列化/反序列化的方式,就会带来额外耗时,失去了RPC直连的优势

所以以上两种方式都不适用于跨语言微服务通信,而Service Mesh可以通过Sidecar对服务进行代理,很好地支持了不同语言微服务之间的通信。

2.API网关的局限性

服务之间通信需要关注服务发现、监控、路由、流量控制等问题,在现有的微服务框架中一般都是通过API网关(如Spring Cloud Zuul)来处理,但是API网关存在缺陷:

  1. API网关可能出现单点故障,一旦故障,所有服务都不可用;
  2. API网关使用不当可能导致系统臃肿;
  3. API网关的核心是面向用户,也就是说它可以解决用户到微服务之间的流量问题,但是却无法很好地解决微服务之间相互的通信问题

3.微服务容器化

随着容器的迅速发展,微服务常部署在容器内,Service Mesh可以一路下沉到基础设施层,并充分利用底层基础设施(比如k8s)的能力,来做服务注册与发现的功能,这是普通微服务框架不具备的能力。


Service Mesh架构:Data Plane + Control Plane

  • 负责配置管理的部分 —— Control Plane(控制面板):将所有Sidecar代理连接到一个分布式网络中,定义服务发现、路由、流量控制等策略,这些策略可以是全局的,也可以是限定的
  • 负责网络通信的部分 —— Data Plane(数据面板):Sidecar模式部署在服务两侧,负责在服务间通信时应用和执行Control Plane的策略

Service Mesh提供的功能

  1. 请求转发:如服务发现、负载均衡……
  2. 路由能力
  3. 服务治理
  4. 纠错能力:限流、熔断、重试……
  5. 安全:身份认证、鉴权、加密……

不难看到发现,微服务能够提供的功能,Service Mesh都应该要提供,所以才说Service Mesh是“下一代微服务框架”。

-------------本文结束感谢您的阅读-------------

本文标题:用人话说明白Service Mesh(服务网格)

文章作者:DragonBaby308

发布时间:2020年01月03日 - 23:01

最后更新:2020年01月30日 - 13:29

原始链接:http://www.dragonbaby308.com/ServiceMesh/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%