Istio流控,服务发现,负载均衡,核心流程是如何实现的?

简介: Istio架构体系中,流控(Traffic Management)虽然是数据平面的Envoy Proxy实施的,但整个架构的核心其实在于控制平面的Pilot。

Istio架构体系中,流控(Traffic Management)虽然是数据平面的Envoy Proxy实施的,但整个架构的核心其实在于控制平面的Pilot。

灰度发布的过程在《Istio,灰度发布》一文中已经有过描述,今天重点说说Pilot和Envoy的交互流程与内部结构。

一、通用交互流程

image.png

图示:

  • 灰色圆形,为业务服务
  • 紫色六边形,为Envoy代理

二者相生相伴。

起初,上游调用方ServiceA访问下游服务提供方ServiceB的V1版本,在ServiceB的V2版本部署好之后,调用方如何知道“SvcA切分1%的流量至SvcB的V2版本”这个指令的呢?

整个过程主要分为三大步骤:

(1)用户在控制平面的后台,通过Pilot的API,修改A到B的路由策略(标号1);

(2)Pilot将路由策略固化存储,以便未来新注册的调用方A能够知道当前最新的路由策略;对于已经存在的调用方A,Pilot则通过主动通知的方式告之调用方A对应的Envoy(标号2);

(3)Envoy作为数据平面,实施最新的路由策略(标号3),在本例中,即将1%的流量导给灰度版本Bv2;

二、服务发现与负载均衡

image.png

讲了通用的流控策略实施通用流程,而服务发现与负载均衡,只是一个种策略实施的特例:

(1)提供服务的SvcB新增一个Pod(标号1);

(2)在Pilot后台修改SvcB的集群配置(标号2);

(3)Pilot将SvcB的最新信息同步给该配置的订阅方(标号3),即SvcB的调用方SvcA对应的Proxy;

(4)SvcA对应的Proxy增加到SvcB的链接(标号4),并实施负载均衡;

画外音:实际是链接到SvcB对应的Proxy。

整个过程,与使用配置中心来实施服务发现基本类似。

三、请求的入口及出口

image.png

ServiceMesh的核心,是技术基础设施与业务服务的解耦,服务A调用服务B,再次强调:

  • 一个容器Pod内的一个服务,服务进程(SrvA/SrvB)和边车进程(Proxy)是相生相伴的,他们之间的交互是本地交互(标号1)
  • 跨容器Pod之间的远程调用,必须通过Proxy进行(标号2)

言下之意,服务A调用服务B,请求的流程是:

SvcA -> SvcA Proxy -> SvcB Proxy -> SvcB

响应的流程则反过来:

SvcB -> SvcB Proxy -> SvcA Proxy -> SvcA

跨网之间调用,请求的入口和出口,都是Proxy。

四、Pilot内部结构

Pilot它的内部结构并不复杂:

(1)Pilot的核心,是各种流控策略的维护,Abstract Model;

(2)必然,Pilot需要提供接口给用户,增删查改这些策略,Rules API;

(3)一方面,Pilot需要保持各类底层基础设施的兼容性,Platform Adapter;

(4)另一方面,Pilot又需要保持不同Proxy实接口的兼容性,Envoy API;

这么设计的好处是:

  • Istio设计时已经考虑了异构的基础设施,不管底层是K8s还是其他体系,都可以兼容
  • 任何第三方可以实现自己的proxy,只要符合相关的API标准,都可以和Pilot集成

Pilot与Envoy的配合,是Istio的核心,如此一来:

  • 服务发现(discovery)
  • 负载均衡(load balancing)
  • 故障恢复(failure recovery)
  • 服务度量(metrics)
  • 服务监控(monitoring)
  • A/B测试(A/B testing)
  • 灰度发布(canary rollouts)
  • 限流限速(rate limiting)

等很多能力都可以实现了。

MerviceMesh并没有大家想的复杂。

思路比结论重要。

image.png

架构师之路-分享技术思路

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
24天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
8月前
|
负载均衡 Kubernetes 安全
Istio Ambient Mesh 四层负载均衡实现剖析
前言k8s通过service将相同类型的工作负载组织成为一组集群,并提供了负载均衡的能力,可以将请求随机路由到集群中的端点。然而在Istio Ambient Mesh中,为了实现四层安全,Istio Ambient Mesh通过配置iptables规则,将流量拦截到ztunnel组件,以便实现4层流量的加密处理后再向对端ztunnel发出,最终对端ztunnel再将流量转发至目标工作负载,而这样一
283 1
|
9月前
|
弹性计算 负载均衡 安全
阿里云SLB简介和购买流程
阿里云SLB是阿里巴巴集团旗下的一个功能强大且高性能的负载均衡服务。在互联网的快速发展和技术创新的推动下,SLB成为了保证网站和应用程序可靠性、可扩展性和高可用性的重要组成部分之一。通过阿里云SLB,用户可以轻松地将流量分发到多个服务器,从而提高系统的整体性能和应用的可用性。这样每台服务器承受的压力都会减小很多
|
9月前
|
缓存 SpringCloudAlibaba 负载均衡
springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)
springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)
|
9月前
|
负载均衡 Kubernetes 中间件
服务发现与负载均衡机制-Service
服务发现与负载均衡机制-Service
291 0
|
11月前
|
Dubbo Java 应用服务中间件
带你读《Apache Dubbo微服务开发从入门到精通》—— 一、 Dubbo服务发现设计
带你读《Apache Dubbo微服务开发从入门到精通》—— 一、 Dubbo服务发现设计
93 0
|
11月前
|
存储 负载均衡 Kubernetes
带你读《Apache Dubbo微服务开发从入门到精通》——二、 应用级服务发现机制详解(上)
带你读《Apache Dubbo微服务开发从入门到精通》——二、 应用级服务发现机制详解(上)
94 0
|
11月前
|
负载均衡 Kubernetes Dubbo
带你读《Apache Dubbo微服务开发从入门到精通》——二、 应用级服务发现机制详解(下)
带你读《Apache Dubbo微服务开发从入门到精通》——二、 应用级服务发现机制详解(下)
104 1
|
11月前
|
自然语言处理 负载均衡 Dubbo
带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(1)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(1)
90 0
|
11月前
|
负载均衡 Dubbo 算法
带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(2)
带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(2)
72 1
带你读《Apache Dubbo微服务开发从入门到精通》——三、 负载均衡机制(2)