Service Mesh

Service Mesh是什么:

Service Mesh是一个基础设施,处理服务间通信,提供服务间通信的各种功能(服务路由,熔断降级,监控上报等)。

Service Mesh诞生的背景:

1.微服务之间的调用关系越来越复杂,服务治理也越来越困难

2.微服务之间存在跨语言调用场景,现有RPC框架支持多语言的情景成本较高(比如Thrift为每种语言都实现了相应的客户端,Dubbo干脆不支持多语言)

3.微服务框架的客户端逻辑越来愈重

4.容器技术的不断普及

Service Mesh解决的问题:

1.中间件和业务绑定在一起,制约着彼此迭代,升级困难。服务治理逻辑的升级迭代应该对业务服务是透明的

2.跨语言成本高,服务治理逻辑、通信逻辑还要实现一遍

3.治理决策比较分散

你会发现Service Mesh真的很像K8S

Service Mesh的规范

Service Mesh 1.0规范通常只包括数据平面,2.0规范通常包括数据平面和控制平面。

service Mesh架构,对比传统RPC架构可以发现,服务化的相关逻辑下沉至了一个独立进程,并增加了负责全局控制的控制平面

SideCar数据平面:

数据平面可以理解为业务服务的代理Proxy(独立进程),和业务服务部署在一起,负责进行服务间(包括微服务与SideCar、SideCar与SideCar、SideCar与Control Plane)的可靠通信、服务路由、向注册中心注册服务、服务发现、上报心跳等。微服务与SideCar之间的通信协也是基于TCP实现的。

Control Plane控制平面:

进行一些全局控制,比如全局监控、热点链路发现、下发动态配置(比如限流配置、鉴权配置、熔断配置等)、下发注册中心数据等,它也是通过基于TCP协议实现的私有通信协议与SideCar进行交互。

由此可见,使用Service Mesh后,一次Rpc请求的流程应该是这样的:调用方业务进程 ->(TCP协议) 调用方SideCar代理 ->(服务路由) 服务方SideCar代理 -> 服务方业务进程

若干个服务组成服务网

Service Mesh的优势

1.对于中间件开发人员:

1.限流、熔断、异常重试、服务发现、路由、鉴权等逻辑只需要在SideCar实现一次即可,不需要每种语言客户端都编写一次。

2.对于业务开发人员:

1.如果你的项目是比较冷门的语言,只要存在相应的客户端,也可以享受到全部的Rpc框架通过的服务,不会出现因语言而导致部分功能不支持的问题

2.中间件的版本迭代不需要改动业务代码

3.标准化、异构化

Service Mesh的问题

1.网络耗时增加,之前是一次通信,现在变成三次。

经过蚂蚁Service Mesh的实践表明,其实这个对于耗时的增长没有特别显著,究其原因,是因为在RPC调用的过程中,网络并不是唯一长耗时的因素,序列化、反序列化(SideCar会尽量避免序列化/反序列化请求的body)、业务逻辑的耗时同样可观,同时由于Service Mesh的推进,顺便优化了老RPC client的服务路由逻辑,综合各种因素,最终,采用Service Mesh并没有显著增加服务耗时(蚂蚁给出的数据是耗时增加7%)

2.吞吐率的下降

业界对Service Mesh的探索:

蚂蚁 MOSN:

https://www.infoq.cn/article/IhCKjgEDOO-YQAAPxesh

蚂蚁是如何提升数据平面的处理性能呢:

1.不关心请求body以减少序列化开销

2.很多地方直接控制内存(相当于使用Unsafe类),最大化的提升性能

3.优化升级服务路由/负载均衡的逻辑

Istio & Envoy:

Envoy仅是数据平面,而Istio基于Envoy实现数据平面,同时增加了控制平面

Envoy作为数据平面,承担了流量控制、负载均衡、熔断等一系列重要功能。作为一个服务代理,它也可以被当作集群网关使用。C++实现,性能很高

Istio的控制平面包括Pilot 、Mixer、Istio-Auth三部分组成

Istio-Auth主要负责配置一些安全及身份认证的信息

Mixer主要负责链路追踪与处理数据平面的监控上报。

Pilot主要负责服务发现和服务路由管理,并负责与Envoy的通信。

当Istio中的Pilot发现服务发生变化(创建/删除新的服务节点或者路由规则),便会通过xDS协议将这种动态配置下发给Envoy,实现服务发现的功能

Enovy有很多资源实体,比如

1.Listener/监听起发现服务LDS:

Listener监听服务端口,接受来自客户端的连接(不论Enovy是作为正向代理还是作为反向代理),每一个Llistener都有唯一的命名,Envoy通过LDS动态获取Listener。

 

2.Cluster/集群发现服务CDS

在Envoy中,每个下游服务集群都被抽象成一个Cluster。Cluster包含该服务的连接池、超时时间、地址、端口、类型(相当于接口)等等,Envoy依靠CDS负责获取这些Cluster。

3.Router/路由发现服务RDS

在Enovy中,RDS负责动态获取路由配置

4.Filter/插件

定制化的扩展Envoy的能力

当然,Envoy还支持RLS(速率限制服务,相当于限流组件)、MS(Metric 服务,相当于监控打点)等高级API

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值