28Service Mesh(屏蔽服务治理细节)

1.基本概念

中间件解决服务通信和服务治理问题:

服务通信:RPC

服务注册和发现:注册中心

服务平均调用问题:负载均衡

服务熔断、限流和降级:API网关

分布式日志追踪:trace id

2.跨语言体系带来的挑战

跨语言调用存在的问题:

2.1.服务通信协议兼容不同语言(合适的序列化方式)

http是一种通用的网络协议,但是其不具备序列化和反序列化的能力(都解析成string)+对入参和出参没有规定

解决办法:可以使用跨语言的序列化协议(Protobuf、Thrift)

2.2.新语言无法使用之前积累的服务治理策略

(如果有n种语言就需要实现n次SDK(中间件研发团队工作量巨大:负载均衡、熔断降级、流量控制、打印分布式追踪日志等等))

解决办法:将服务治理能力抽象成单独服务进行部署(service mesh)

代理层可以单一的语言实现,所有的流量都经过代理使用其中服务治理策略

3.service mesh如何工作

3.1什么是service mesh(服务间的通信问题)

代理程序称为“Sidecar(边车):服务发现、负载均衡、服务路由、流量控制

可以把业务代码和服务治理的策略隔离开,将服务治理策略下沉,让它成为独立的基础模块(不再依赖SDK,在RPC中增加代理)

将一次网络通信,转换成三次网络通信

image.png

3.2Istio

地址:istio.io/

envoy就是Sidecar

先经过控制平面,会造成网络消耗(增加网络调用次数)

envoy=Mixer+Pilot+Istio+auth(数据平面+控制平面)

image.png

3.3如何将流量转发到 Sidecar 中

如何无感知引入Sidecar 作为网络代理

实现思路:

3.3.1使用 iptables 的方式来实现流量透明的转发

什么是Iptables:是 Linux 内核中,防火墙软件 Netfilter 的管理工具

优点:对业务完全透明

数据包流转过程依次为 PREROUTING,INPUT,FORWARD,OUTPUT 和 POSTROUTING

数据包为本机,它们也都会流经到 OUTPUT 链

image.png 本地实例:服务的节点部署在 9080 端口上,Sidecar 开发的端口是 15001

image.png

3.3.2轻量级客户端的方式(推荐)

开发一个新的服务

image.png Cilium实现了通过socket层面进行转发

\

3.4Service Mesh 框架

  • Istio\

  • Linkerd\

  • SOFAMesh\

4.总结

什么是service mesh(业务与通信技术分离),如何在项目中落地

什么是service mesh:Service Mesh = 数据平面(数据传输)+控制平面(服务治理策略的植入)

一般会把服务治理策略植入到数据平面中,控制平面负责服务治理策略数据的下发

实现方式:

1.使用 iptables 实现流量的劫持

2.通过轻量级客户端(指消费者,而不是实际客户端)来实现流量转发

适用场景:

1.多语言服务治理困境

2.快速植入服务治理

iptables:www.zsythink.net/archives/11…

猜你喜欢

转载自juejin.im/post/7017026901583593502
今日推荐