Service Mesh

微服务(架构风格) -> service mesh(基础设施)

SpringCloud Dubbo 等微服务框架的痛点:

从容器到服务网格,一个原因就是因为环境的异构性

痛点往往是技术发展到一定的程度必然要经历的阶段,这些痛点促使技术不断发展、不断前进

基本概念

Service Mesh 是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明

服务网格带来的变革:

服务网格相比传统微服务框架的优势:

服务网格带来的问题:

透明通讯

分布式通讯的演化

第一阶段:控制逻辑和业务逻辑耦合

202012214381

第二阶段:将控制逻辑抽取到独立的库中

202012214408

第三阶段:抽离出进程外的网络代理

2020122144218

第四阶段:将网络代理以边车的形式注入到应用容器

202012214445

第五阶段:服务网格

20201023152156

数据平面

代理注入

流量劫持

可靠通讯

Envoy在这方面进行了创新,它将代理的转发的行为规则抽象成Listener、Router、Cluster三种资源

控制平面

202012214595

ServiceMesh K8S Istio

Kubernetes vs Service Mesh

20201024153146 20201024153524

Service Mesh的劣势:为了细粒度地进行流量管理,必将添加一系列新的抽象,从而会进一步增加用户的学习成本

Service Mesh的优势:kube-proxy 的设置都是全局生效的,无法对每个服务做细粒度的控制, Service Mesh 通过 sidecar proxy 的方式将 Kubernetes 中对流量的控制从 service 一层抽离出来,可以做更多的扩展

xDS 协议

20201024154155

Envoy

Envoy 是 Istio Service Mesh 中默认的 Sidecar

20201024154334

Istio Service Mesh

20201024154437

Istio

它是一个完全开源的服务网格,以透明的方式构建在现有的分布式应用中。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使你能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

负载均衡

Istio 负载均衡的实现

故障注入

Istio故障注入实现(超时与错误状态码)

数据包重放

通过在边车复制流量到影子容器