其他分享
首页 > 其他分享> > Istio流控,服务发现,负载均衡,核心流程是如何实现的?

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

作者:互联网

前情提要:

《ServiceMesh究竟解决什么问题?》
《Istio究竟是什么?》
《Istio分层架构设计?》

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

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

一、通用交互流程

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

起初,上游调用方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;

二、服务发现与负载均衡

Istio流控,服务发现,负载均衡,核心流程是如何实现的?
讲了通用的流控策略实施通用流程,而服务发现与负载均衡,只是一个种策略实施的特例:
(1)提供服务的SvcB新增一个Pod(标号1);
(2)在Pilot后台修改SvcB的集群配置(标号2);
(3)Pilot将SvcB的最新信息同步给该配置的订阅方(标号3),即SvcB的调用方SvcA对应的Proxy;
(4)SvcA对应的Proxy增加到SvcB的链接(标号4),并实施负载均衡;
画外音:实际是链接到SvcB对应的Proxy。

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

三、请求的入口及出口

Istio流控,服务发现,负载均衡,核心流程是如何实现的?
ServiceMesh的核心,是技术基础设施与业务服务的解耦,服务A调用服务B,再次强调:

言下之意,服务A调用服务B,请求的流程是:
SvcA -> SvcA Proxy -> SvcB Proxy -> SvcB

响应的流程则反过来:
SvcB -> SvcB Proxy -> SvcA Proxy -> SvcA

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

四、Pilot内部结构

Istio流控,服务发现,负载均衡,核心流程是如何实现的?
Pilot它的内部结构并不复杂:
(1)Pilot的核心,是各种流控策略的维护,Abstract Model;
(2)必然,Pilot需要提供接口给用户,增删查改这些策略,Rules API;
(3)一方面,Pilot需要保持各类底层基础设施的兼容性,Platform Adapter;
(4)另一方面,Pilot又需要保持不同Proxy实接口的兼容性,Envoy API;

这么设计的好处是:

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

MerviceMesh并没有大家想的复杂。

思路比结论重要。
Istio流控,服务发现,负载均衡,核心流程是如何实现的?
架构师之路-分享技术思路
相关文章:
《ServiceMesh究竟解决什么问题?》
《Istio究竟是什么?》
《Istio分层架构设计?》
《Istio,灰度发布》

标签:标号,负载,服务,流控,SvcB,Istio,Proxy,Pilot
来源: https://blog.51cto.com/jyjstack/2548726