用于负载均衡的方法、设备、系统及存储介质与流程

文档序号:30697356发布日期:2022-07-09 18:08阅读:88来源:国知局
用于负载均衡的方法、设备、系统及存储介质与流程

1.本技术涉及计算机技术领域,尤其涉及一种用于负载均衡的方法、设备、系统及存储介质。


背景技术:

2.在微服务架构中,一个应用程序可以包括多个应用服务,每个应用服务仅关注于完成一件任务,从而,应用程序可以视为是多个应用服务的集合。一个应用程序对应的各个应用服务可以被独立地部署,每个应用服务可以被部署在一个或者多个服务器上。
3.由于不同的应用服务可能被部署在不同的服务器上,因此,不同应用服务之间的调用涉及到不同服务器之间的通信。为了便于不同应用服务之间安全和可靠的通信,提出了一种微服务治理框架-服务网格(service mesh)。服务网格是服务于各服务应用的可配置基础设施层,旨在处理不同应用服务之间的大量基于网络的进程间通信。具体而言,在服务网格框架中,为每个应用服务部署一个网格代理(也可以称为边车(sidecar)),所有出入应用服务的流量均先经过其对应的网格代理。这样,应用服务之间的调用转变成了网格代理之间的调用。
4.在负载均衡场景中,当第一应用服务调用第二应用服务时,第一应用服务将调用请求发送给其对应的网格代理,由网格代理基于负载均衡策略确定将调用请求转发给第二应用服务的哪个工作负载(或者称为服务实例),以保证第二应用服务中的各工作负载的负载均衡。然而,由于所有调用请求均需要经过网格代理的转发,会导致业务响应时长增加。


技术实现要素:

5.本技术实施例提供一种用于负载均衡的方法、设备、系统及存储介质,用以降低不同应用服务之间的服务调用的业务响应时长。
6.第一方面,本技术实施例提供一种用于负载均衡的方法,应用于集群中的第一应用服务,所述第一应用服务包括:第一应用服务实例和服务发现xds代理,所述第一应用服务实例包括:第一工作负载和xds客户端;所述方法包括:通过所述xds代理接收xds服务器发送的第一负载均衡策略信息,并将所述第一负载均衡策略信息转发至所述xds客户端;在所述第一工作负载需要调用所述集群中的第二应用服务时,通过所述xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
7.一种可能的实现方式中,通过所述xds代理接收xds服务器发送的第一负载均衡策略信息之前,还包括:在接收到所述第一应用服务实例对应的启动指令时,启动所述xds代理;通过所述xds代理从所述xds服务器获取第一启动配置信息,所述第一启动配置信息为启动所述第一应用服务实例所需的配置信息;
根据所述第一启动配置信息,启动所述第一应用服务实例。
8.一种可能的实现方式中,通过所述xds代理从所述xds服务器获取第一启动配置信息,包括:通过所述xds代理与所述xds服务器建立连接;通过所述xds代理从所述xds服务器接收第二负载均衡策略信息;通过所述xds代理根据所述第二负载均衡策略信息,生成所述第一启动配置信息,所述第一启动配置信息包括所述第二负载均衡策略信息。
9.一种可能的实现方式中,通过所述xds代理与所述xds服务器建立连接,包括:通过所述xds代理获取证书信息,并根据所述证书信息,向所述xds服务器发送连接建立请求,所述连接建立请求中包括所述证书信息;其中,所述证书信息是由代理管理器为所述xds代理配置的;所述代理管理器用于管理所述集群中各应用服务中的xds代理;通过所述xds代理从所述xds服务器接收连接建立响应,所述连接建立响应是所述xds服务器对所述证书信息验证通过后发送的。
10.一种可能的实现方式中,启动所述xds代理,包括:获取启动所述xds代理所需的第二启动配置信息,所述第二启动配置信息是由所述代理管理器为所述xds代理配置的;根据所述第二启动配置信息,启动所述xds代理。
11.一种可能的实现方式中,在所述第一工作负载需要调用所述集群中的第二应用服务时,通过所述xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,包括:通过所述xds客户端执行下述步骤:在监测到所述第一工作负载发送所述调用请求时,拦截所述调用请求,并对所述调用请求进行解析,确定出待调用的所述第二应用服务;从所述第一负载均衡策略信息中获取所述第二应用服务对应的负载均衡策略,并根据所述第二应用服务对应的负载均衡策略,在所述第二应用服务包括的多个第二应用服务实例中确定出所述一个或多个目标第二应用服务实例;向所述一个或多个目标第二应用服务实例发送所述调用请求。
12.一种可能的实现方式中,对所述调用请求进行解析,确定出待调用的所述第二应用服务之后,还包括:确定是否存在所述第一应用服务与所述第二应用服务之间的连接通道;若不存在,则根据所述第二应用服务的地址信息和端口信息,建立所述第一应用服务和所述第二应用服务之间的连接通道。
13.一种可能的实现方式中,所述集群中不同应用服务中的xds代理基于同一编程语言框架实现。
14.第二方面,本技术实施例提供一种用于负载均衡的方法,应用于服务发现xds服务器,所述方法包括:获取集群中的第一应用服务实例对应的第一负载均衡策略信息;向所述第一应用服务实例对应的xds代理发送所述第一负载均衡策略信息,以使所述xds代理将所述第一负载均衡策略信息转发至所述第一应用服务实例中的xds客户端,
所述第一负载均衡策略信息用于在所述第一应用服务实例中的第一工作负载调用所述集群中的第二应用服务时,实现所述第二应用服务中的各第二应用服务实例的负载均衡。
15.第三方面,本技术实施例提供一种用于负载均衡的方法,应用于用于负载均衡的系统,所述系统包括:部署在控制平面层的服务发现xds服务器和部署在数据平面层的集群,所述集群中包括第一应用服务和第二应用服务,所述第一应用服务包括第一应用服务实例和xds代理,所述第一应用服务实例包括第一工作负载和xds客户端,所述第二应用服务包括多个第二应用服务实例;所述方法包括:服务发现xds服务器获取所述第一应用服务实例对应的第一负载均衡策略信息,并向所述第一应用服务实例对应的xds代理发送所述第一负载均衡策略信息;所述第一应用服务通过所述xds代理将所述第一负载均衡策略信息转发至所述xds客户端;所述第一应用服务在所述第一工作负载需要调用所述集群中的第二应用服务时,通过所述xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
16.第四方面,本技术实施例提供一种用于负载均衡的装置,应用于集群中的第一应用服务,所述第一应用服务包括:第一应用服务实例和服务发现xds代理,所述第一应用服务实例包括:第一工作负载和xds客户端;所述装置包括:策略获取模块,用于通过所述xds代理接收xds服务器发送的第一负载均衡策略信息,并将所述第一负载均衡策略信息转发至所述xds客户端;策略执行模块,用于在所述第一工作负载需要调用所述集群中的第二应用服务时,通过所述xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
17.第五方面,本技术实施例提供一种用于负载均衡的装置,应用于服务发现xds服务器,所述装置包括:获取模块,用于获取集群中的第一应用服务实例对应的第一负载均衡策略信息;发送模块,用于向所述第一应用服务实例对应的xds代理发送所述第一负载均衡策略信息,以使所述xds代理将所述第一负载均衡策略信息转发至所述第一应用服务实例中的xds客户端,所述第一负载均衡策略信息用于在所述第一应用服务实例中的第一工作负载调用所述集群中的第二应用服务时,实现所述第二应用服务中的各第二应用服务实例的负载均衡。
18.第六方面,本技术实施例提供一种用于负载均衡的系统,包括:部署在控制平面层的服务发现xds服务器和部署在数据平面层的集群,所述集群中包括第一应用服务和第二应用服务,所述第一应用服务包括第一应用服务实例和xds代理,所述第一应用服务实例包括第一工作负载和xds客户端,所述第二应用服务包括多个第二应用服务实例;所述xds服务器用于,向所述xds代理发送第一负载均衡策略信息;所述xds代理用于,将所述第一负载均衡策略信息转发至所述xds客户端;所述xds客户端用于,在所述第一工作负载需要调用所述集群中的第二应用服务
时,根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
19.一种可能的实现方式中,所述方法还包括:部署在所述控制平面层的代理管理器;所述代理管理器用于,向所述集群中各应用服务中的xds代理分发第二启动配置信息,和/或,向所述集群中各应用服务中的xds代理分发证书信息。
20.第七方面,本技术实施例提供一种电子设备,包括:存储器以及至少一个处理器,所述存储器中存储有计算机程序,所述计算机程序被配置为由所述至少一个处理器执行以实现如第一方面任一项所述的方法,或者如第二方面任一项所述的方法。
21.第八方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法,或者如第二方面任一项所述的方法。
22.第九方面,本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法,或者如第二方面任一项所述的方法。
23.本技术实施例提供的用于负载均衡的方法、设备、系统及存储介质,该方法应用于集群中的第一应用服务,第一应用服务包括:第一应用服务实例和xds代理,第一应用服务实例包括:第一工作负载和xds客户端;所述方法包括:通过xds代理接收xds服务器发送的第一负载均衡策略信息,并将所述第一负载均衡策略信息转发至所述xds客户端,在第一工作负载需要调用集群中的第二应用服务时,通过xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。通过上述过程,可以在第一应用服务实例内部实现负载均衡,不需要针对第一应用服务实例部署网格代理,在第一应用服务实例调用第二应用服务时,调用请求无需经过网格代理的转发,这样可以降低业务响应时长。
附图说明
24.图1为一种服务网格的示意图;图2为本技术实施提供的一种系统架构的示意图;图3为本技术实施例提供的一种用于负载均衡的方法的流程示意图;图4为本技术实施例提供的另一种用于负载均衡的方法的流程示意图;图5为本技术实施例提供的另一种系统架构的示意图;图6为本技术实施例提供的应用服务启动管理方法的流程示意图;图7为本技术实施例提供的又一种系统架构的示意图;图8为本技术实施例提供的一种用于负载均衡的装置的结构示意图;图9为本技术实施例提供的另一种用于负载均衡的装置的结构示意图;图10为本技术实施例提供的电子设备的结构示意图。
具体实施方式
25.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例
中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
26.本技术实施例的说明书、权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述之外的顺序实施。
27.应当理解,本文中使用的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
28.在本技术实施例的描述中,术语“对应”可表示两者之间具有直接对应或间接对应的关系,也可以表示两者之间具有关联关系,也可以是指示与被指示、配置与被配置等关系。
29.为了便于理解本技术的技术方案,首先结合图1对服务网格框架以及相关概念和术语进行介绍。
30.图1为一种服务网格的示意图。该服务网格100主要用于方便多个微服务之间进行安全和可靠的通信,微服务是指将应用程序分解为多个较小的服务或者实例,并分布在不同的集群/机器上运行。
31.如图1所示,微服务包括应用服务实例a和应用服务实例b,应用服务实例a和应用服务实例b形成服务网格100的功能应用层。在一种实施方式中,应用服务实例a和b以容器/进程的形式运行在机器/工作负载容器组(machine/pod)108。
32.在一种实施方式中,应用服务实例a可以是商品查询服务,应用服务实例b可以是商品下单服务。
33.如图1所示,应用服务实例a和网格代理(sidecar)103共存于机器/工作负载容器组114,应用服务实例b和网格代理105共存于机器/工作负载容器114。网格代理103和105形成服务网格100的数据平面层(data plane)。其中,网格代理103以容器/进程104的形式在运行,网格代理105以容器/进程106的形式运行,并且网格代理103和应用服务实例a之间可以双向通信,网格代理105和应用服务实例b之间可以双向通信。此外,网格代理103和网格代理105之间还可以双向通信。
34.在一种实施方式中,应用服务实例a的所有流量都通过网格代理103被路由到合适的目的地,应用服务实例b的所有网络流量都通过网格代理105被路由到合适的目的地。需要说明的是,在此提及的网络流量包括但不限于基于如下形式的流量:超文本传输协议(hyper text transfer protocol,http),表述性状态传递(representational state transfer, rest), 远程过程调用(remote procedure call,rpc), 远程字典服务(remote dictionary server,redis)等。
35.在一种实施方式中,可以通过为服务网格100中的网格代理103、105编写自定义的过滤器(filter)来实现扩展数据平面层的功能,服务网格代理配置可以是为了使服务网格正确地代理服务流量,实现服务互通和服务治理。网格代理103和网格代理105可以被配置
成执行至少如下功能中的一种:服务发现(service discovery),健康检查(health checking),路由(routing),负载均衡(load balancing),认证和授权(authentication and authorization),以及可观测性(observability)。
36.如图1所示,该服务网格100还包括控制平面层。其中,控制平面层可以是由一组在一个专用的命名空间中运行的服务,在机器/工作负载容器组102由托管控制面组件101来托管这些服务。如图1所示,托管控制面组件101与网格代理103和网格代理105进行双向通信。托管控制面组件101被配置成执行一些控制管理的功能。例如,托管控制面组件101接收网格代理103和网格代理105传送的数据,可以进一步对这些数据做聚合。托管控制面组件101还可以提供面向用户的应用程序接口(application programming interface,api),以便较容易地操纵网络行为,以及向网格代理103和网格代理105提供配置数据等。
37.在微服务架构下,应用服务实例具有动态分配的网络地址,随着应用服务的自动扩展、故障和发布升级,导致应用服务实例的网络地址发生动态变更。因此,需要一种机制,支持服务消费者在服务提供者所提供的应用服务实例的地址发生变更时,能够及时感知获取应用服务实例的最新地址,该机制即为服务发现机制。
38.本技术实施例适用于在不同应用服务之间进行服务调用时,实现目标应用服务的负载均衡的场景。下面结合图1说明如何基于服务发现机制来实现目标应用服务的负载均衡。
39.服务发现机制如下两个过程:自注册过程和服务发现过程。其中,在自注册过程中,每个应用服务实例对应的代理网格,负责调用服务注册表的注册接口进行实例地址注册,以及负责定期调用“心跳”接口以续租服务实例注册信息。例如,图1中,应用服务实例a通过调用注册接口向托管控制面组件101注册自己的地址信息,应用服务实例b通过调用注册接口向托管控制面组件101注册自己的地址信息。另外,运维人员可以向托管控制面组件101配置各应用服务对应的负载均衡策略信息。
40.在服务发现过程中,托管控制面组件101向每个应用服务实例对应的网格代理(例如网格代理103、网格代理105)推送如下信息:各应用服务实例的地址信息、各应用服务对应的负载均衡策略等。网格代理接收到的上述推送信息缓存到本地。
41.当第一应用服务(例如图1中的应用服务实例a)需要调用第二应用服务时,将调用请求转发至网格代理103,网格代理103通过查询本地缓存的推送信息,确定第二应用服务的地址,以及第二应用服务的负载均衡策略,并基于第二应用服务的负载均衡策略,在第二应用服务的多个应用服务实例中选择一个可用的应用服务实例(例如图1中的应用服务实例b)。进而,网格代理103将调用请求转发至应用服务实例b对应的网格代理105。网格代理105将调用请求发送至应用服务实例b,从而完成应用服务实例a对应用服务实例b的调用。通过上述过程,实现了第二应用服务中各应用服务实例的负载均衡。
42.上述服务发现过程中,托管控制面组件101和网络代理103之间可以基于(x discovery service,xds)协议进行通信。其中,托管控制面组件101作为xds协议的服务端,网格代理103作为xds协议的客户端。其中,xds协议包括但不限于如下协议:侦听器发现服务(listener discovery service,lds);路由发现服务(route discovery service,rds) ;范围路由发现服务(scoped route discovery service,srds);
虚拟主机发现服务(virtual host discovery service,vhds);集群发现服务(cluster discovery service,cds) ;端点发现服务(endpoint discovery service,eds);秘密发现服务(secret discovery service,sds);运行时发现服务(runtime discovery service,rtds) 。
43.基于图1所示的服务网格,由网格代理实现了服务治理功能,从而,各应用服务实例可以仅关注自身的应用层面功能,而无需关注负载均衡等服务治理功能,实现了功能应用层与数据平面层的解耦。
44.在图1所示的服务网格架构中,每个应用服务实例均对应有网格代理,可以称这些应用服务实例为代理(proxy)模式。基于代理模式实现负载均衡时,由于所有调用请求均需要经过网格代理的转发,会导致业务响应时长增加。
45.为了解决上述技术问题,本技术实施例提供一种用于负载均衡的方法、设备、系统及存储介质。在本技术技术方案中,应用服务实例可以采用无代理(proxyless)模式,即取消应用服务实例对应的网格代理,在应用服务实例内部实现负载均衡。下面结合图2对本技术实施例涉及的应用场景进行说明。
46.图2为本技术实施提供的一种系统架构的示意图。如图2所示,该系统架构包括:部署在控制平面层的xds服务器、以及部署在数据平面层的基于微服务架构的集群。其中,xds服务器相当于图1中的托管控制面组件101。集群中包括多个应用服务。图2中以第一应用服务和第二应用服务为例进行示意。应理解,该系统架构中包括的集群数量可以为一个或多个,本实施例对此不做限定。
47.继续参见图2,第一应用服务包括:第一应用服务实例,第一应用服务实例包括:第一工作负载和xds客户端。其中,第一工作负载用于提供某种服务,例如,商品查询服务、商品下单服务等。xds客户端作为xds协议的客户端,xds服务器作为xds协议的服务端,二者基于xds协议实现服务发现过程。
48.第一工作负载可以调用其他应用服务。以调用第二应用服务的场景为例,第二应用服务包括多个第二应用服务实例,图2中以3个第二应用服务实例为例进行示意。
49.继续参见图2,第一应用服务中还包括:xds代理(xds agent)。本技术实施例中,xds客户端与xds服务器不是直接建立连接通道,而是在xds服务器与xds客户端之间部署xds代理。也就是说,xds代理作为xds客户端与xds服务器之间的中介,即,xds代理与xds服务器建立连接,xds代理与xds客户端建立连接。这样,xds代理可以接收xds服务器推送的负载均衡策略信息,并将负载均衡策略信息提供给xds客户端。从而,在第一工作负载调用第二应用服务时,xds客户端可以基于负载均衡策略信息向第二应用服务的一个或者多个目标第二应用服务实例发送调用请求,以实现第二应用服务的负载均衡。
50.应理解,第一应用服务中可以包括多个第一应用服务实例,图2中仅示例了一个。当第一应用服务中包括多个第一应用服务实例时,每个第一应用服务实例中均包括第一工作负载及其对应的xds客户端。每个第一应用服务实例均对应有一个xds代理。
51.本技术实施例中,第一应用服务实例通过采用无代理模式,在第一应用服务实例调用第二应用服务时,调用请求无需经过网格代理的转发,这样可以降低业务响应时长。
52.下面通过具体实施例对本技术实施例提供的技术方案进行详细说明。需要说明的
是,本技术实施例提供的技术方案可以包括以下内容中的部分或全部,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
53.图3为本技术实施例提供的一种用于负载均衡的方法的流程示意图。本实施例的方法可以应用于如图2所示的系统架构。该系统架构中包括:部署在控制平面层的xds服务器和部署在数据平面层的集群。示例性的,该集群可以为kubernetes集群。
54.集群中包括多个应用服务。以集群中包括第一应用服务和第二应用服务为例,所述第一应用服务包括:第一应用服务实例和xds代理。第一应用服务实例包括第一工作负载和xds客户端。第二应用服务包括多个第二应用服务实例。
55.如图3所示,本实施例的方法,包括:s301:xds服务器向xds代理发送第一负载均衡策略信息。
56.本实施例中,xds服务器部署在控制平面层,xds服务器对于集群的管理采用托管模式。其中,托管模式是指用于实现集群管理功能的组件运行于独立的一个服务器运行时, 而不是运行于数据平面层的某个集群中。可选的,xds服务器可以为托管在云端网络中组件,这样,可以在云端实现集群的管理功能,降低集群用户的运维复杂度和成本。
57.xds服务器和xds代理之间可以基于xds协议进行通信。具体而言,xds服务器和xds代理之间通过xds协议的api进行通信,二者的通信机制本质上是发布/订阅机制,其中每个 api 都允许订阅不同类型的服务。xds中字母x表示它是一个变量,可能的选项x包括但不限于:lds、rds、srds、vhds、cds、eds、sds、rtds。示例性的,集群中的所有应用服务实例都通过eds api将自己注册到xds服务器。当某个应用服务实例过载时, 它可以自行向xds服务器注销,然后当它再次可用时,可以再次向xds服务器注册。
58.本技术实施例中,以第一应用服务调用第二应用服务的场景为例,xds服务器向xds代理发送的第一负载均衡策略信息至少包括第二应用服务对应的负载均衡策略。例如,第一负载均衡策略信息中可以包括集群中所有应用服务对应的负载均衡策略。又例如,第一负载均衡策略信息中可以包括第一应用服务所需调用的其他各应用服务对应的负载均衡策略。
59.在控制平面层,用户可以根据集群中各应用服务的负载均衡需求,向xds服务器配置各应用服务的负载均衡策略。举例而言,以第二应用服务为例,假设第二应用服务包括3个第二应用服务实例,分别为第二应用服务实例a、第二应用服务实例b、第二应用服务实例c,则用户可以向xds服务器配置各第二应用服务实例对应的流量占比,例如,第二应用服务实例a的流量占比为20%,第二应用服务实例b的流量占比为30%,第二流量服务实例c的流量占比为50%。该情况下,第二应用服务对应的负载均衡策略用于指示3个第二应用服务实例各自对应的流量占比信息。
60.本实施例中,当某个应用服务对应的负载均衡策略发生变更时,例如,用户对第二应用服务配置的流量占比信息发生变更时,或者,第二应用服务中的某个应用服务实例注销/重新注册时,xds服务器向xds代理推送更新后的第一负载均衡策略信息。
61.s302:xds代理将第一负载均衡策略信息转发至xds客户端。
62.本技术实施例中,xds代理作为xds服务器与xds客户端之间的中介,xds代理从xds服务器接收到第一负载均衡策略信息后,向xds客户端转发第一负载均衡信息。xds客户端接收到第一负载均衡信息后,可以对第一负载均衡信息进行缓存,以备后续第一应用服务
实例需要进行服务调用时使用。
63.s303:在第一工作负载需要调用第二应用服务时,通过xds客户端根据第一负载均衡策略信息,向第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
64.示例性的,假设xds客户端根据第一负载均衡策略信息,确定第二应用服务中的3个第二应用服务实例各自对应的流量占比分别为:20%,30%,50%,则xds客户端可以基于该流量占比,确定向哪个或者哪些第二应用服务实例发送调用请求。在这个过程中,xds客户端可以结合自身在历史时段内对第二应用服务各实例的调用情况、以及第一负载均衡策略信息,在第二应用服务包括的多个第二应用服务实例中,确定出一个或者多个目标第二应用服务实例,并向所述一个或多个目标第二应用服务实例发送调用请求,从而实现第二应用服务中各第二应用服务实例的负载均衡。
65.本实施例提供的用于负载均衡的方法,应用于集群中的第一应用服务,所述第一应用服务包括:第一应用服务实例和xds代理,第一应用服务实例包括:第一工作负载和xds客户端,通过xds代理接收xds服务器发送的第一负载均衡策略信息,并将所述第一负载均衡策略信息转发至所述xds客户端;在第一工作负载需要调用集群中的第二应用服务时,通过xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。通过上述过程,可以在第一应用服务实例内部实现负载均衡,不需要针对第一应用服务实例部署网格代理,在第一应用服务实例调用第二应用服务时,调用请求无需经过网格代理的转发,这样可以降低业务响应时长。
66.另外,需要说明的是,本技术实施例中,第二应用服务中的各第二应用服务实例可以为代理模式,也可以为无代理模式,本技术实施例对此不做限定。当第二应用服务实例为代理模式时,第二应用服务中还包括各第二应用服务实例对应的网格代理。当第二应用服务实例为无代理模式时,第二应用服务实例包括:第二工作负载和xds客户端。
67.进一步的,在实际应用场景中,集群中的各应用服务通常基于特定语言框架实现,不同应用服务所基于的语言框架通常不同。各应用服务中的应用服务实例通常称为特定于框架或软件开发工具包(software development kit,sdk)的xds处理器。在本技术实施例中,第一应用服务实例和xds代理可以解耦实现。也就是说,针对每个应用服务,其对应的xds代理无需基于该应用服务的特定语言框架实现,而是集群中的不同应用服务中的xds代理可以基于同一编程语言框架实现。其中,基于同一编程语言框架实现是指:采用同一编程语言实现,或者,基于同一编程框架实现,或者,基于同一sdk实现。
68.这样,无需针对每个应用服务,均开发其对应的xds代理,而是针对所有应用服务,开发统一的xds代理即可,集群中的所有应用服务可以共用一份xds代理的代码,这样可以降低开发成本以及维护成本。
69.由此可见,本技术实施例实现了一种通过xds服务器对集群中的各种应用服务进行统一管理的机制。通过为应用服务实例部署xds代理,且不同应用服务中的xds代理基于同一编程语言框架实现,即使是在集群中各应用服务基于不同编程语言框架的场景中,也可以便捷地实现各应用服务的统一管理。
70.另外,本技术实施例中,允许集群中的一部分应用服务的实例采用代理模式,另一
部分应用服务的实例采用无代理模式。也就是说,即使是在异构集群(同时存在代理模式和无代理模式的应用服务)的场景下,也可以实现xds服务器对各应用服务的统一管理。
71.在图3所示实施例的基础上,下面结合一个具体的实施例对本技术技术方案进行更详细的说明。
72.图4为本技术实施例提供的另一种用于负载均衡的方法的流程示意图。如图4所示,本实施例的方法包括:s401:xds服务器向xds代理发送第一负载均衡策略信息。
73.s402:xds代理将第一负载均衡策略信息转发至xds客户端。
74.应理解,s401和s402的具体实现方式与图3所示实施例类似,此处不做赘述。
75.s403:xds客户端在监测到第一工作负载发送调用请求时,拦截所述调用请求,并对所述调用请求进行解析,确定出待调用的第二应用服务。
76.第一工作负载在需要调用其他应用服务时,会向其他应用服务发送调用请求。本实施例中,xds客户端具有对第一工作负载的监听功能,可以监测到第一工作负载发送的调用请求。在xds客户端监测到调用请求后,可以对调用请求进行解析,确定出待调用的应用服务。
77.举例而言,假设第二应用服务的地址+端口为“mytest.com:8888”,xds客户端拦截到的调用请求为“xds:mytest.com:8888”或“xds:///mytest.com:8888”,则通过对调用请求中的“mytest.com:8888”进行解析,确定出待调用的应用服务为第二应用服务。
78.s404:xds客户端从所述第一负载均衡策略信息中获取所述第二应用服务对应的负载均衡策略,并根据所述第二应用服务对应的负载均衡策略,在所述第二应用服务包括的多个第二应用服务实例中确定出一个或多个目标第二应用服务实例。
79.示例性的,第一负载均衡策略信息中包括多个应用服务的标识以及各标识对应的负载均衡策略。xds客户端在确定出待调用的第二应用服务后,可以根据第二应用服务的标识,从第一负载均衡策略信息中提取出第二应用服务对应的负载均衡策略。进而,根据第二应用服务对应的负载均衡策略,在第二应用服务包括的多个第二应用服务实例中确定出一个或多个目标第二应用服务实例。
80.举例而言,假设第二应用服务包括:第二应用服务实例a、第二应用服务实例b和第二应用服务实例c,则xds客户端可以基于第二应用服务对应的负载均衡策略,将第二应用服务实例a作为目标第二应用服务实例,或者,将第二应用服务实例a和第二应用服务实例b作为目标第二应用服务实例。
81.s405: xds客户端向所述一个或多个目标第二应用服务实例发送所述调用请求。
82.由于所述一个或者多个目标第二应用服务实例是基于第二应用服务对应的负载均衡策略确定出的,因此,xds客户端向所述一个或多个目标第二应用服务实例发送调用请求,可以实现第二应用服务中的各第二应用服务实例之间的负载均衡。
83.在一些可能的实现方式中,在s403之后,还可以包括:确定是否存在第一应用服务与第二应用服务之间的连接通道;若不存在,则根据所述第二应用服务的地址信息和端口信息,建立所述第一应用服务和所述第二应用服务之间的连接通道。若存在,则在s405中,xds客户端通过该连接通道向所述一个或者多个目标第二应用服务实例发送所述调用请求。
84.在图4所示实施例的基础上,下面结合图5对xds客户端的具体实现进行举例说明。图5为本技术实施例提供的另一种系统架构的示意图。如图5所示,在图2所示系统架构的基础上,本实施例中,xds客户端可以包括:xds拦截器、xds解析器、通道创建器、监听请求器、子策略创建器和发送器。
85.其中,xds拦截器用于对第一工作负载发送的调用请求进行拦截。xds解析器用于对拦截到的调用请求进行解析。通道创建器用于建立第一应用服务与第二应用服务之间的连接通道。监听请求器和子策略创建器用于从第一负载均衡策略信息中获取第二应用服务对应的负载均衡策略。发送器用于基于负载均衡策略向第二应用服务中的一个或多个目标第二应用服务实例发送调用请求。
86.基于图5所示的系统架构,在第一工作负载发送调用请求(例如“xds:mytest.com:8888”或“xds:///mytest.com:8888”)时,通过xds拦截器拦截到该调用请求,并通过xds解析器对拦截到的调用请求进行解析,确定出待调用应用服务为第二应用服务(即“mytest.com:8888”所指示的应用服务)。然后,xds客户端确定是否存在第一应用服务与第二应用服务之间的连接通道,若不存在,则通过通道创建器根据第二应用服务的地址信息和端口信息,建立第一应用服务与第二应用服务之间的连接通道。该连接通道用于第一应用服务向第二应用服务发送调用请求。进一步的,通过监听请求器和子策略创建器从第一负载均衡策略信息中获取第二应用服务对应的负载均衡策略。例如,参见图5,通过监听请求器从第一负载均衡策略信息中获取第二应用服务对应的cds策略,进而通过子策略创建器获取第二应用服务对应的eds策略。eds策略作为cds策略的子策略。这样,cds策略和eds策略即作为第二应用服务对应的负载均衡策略。进一步的,发送器基于cds策略和eds策略在第二应用服务包括的多个第二应用服务实例中确定出一个或多个目标第二应用服务实例,并通过连接通道向该一个或多个目标第二应用服务实例发送调用请求。
87.本实施例中,通过xds代理将第一负载均衡策略信息提供给xds客户端,并且,xds客户端对第一工作负载发送的调用请求进行拦截,并基于第一负载均衡策略,将拦截到的调用请求转发至第二应用服务的可用实例,在第一应用服务实例内部实现了负载均衡的控制,从而无需针对第一应用服务实例部署网格代理,无需网格代理对调用请求进行转发,降低了业务响应时长。
88.在上述任意实施例的基础上,xds服务器还可以利用xds代理实现对集群中应用服务实例进行统一的启动管理。下面结合图6和图7进行介绍。
89.图6为本技术实施例提供的应用服务启动管理方法的流程示意图。图7为本技术实施例提供的又一种系统架构的示意图。本实施例的方法可以在图3或图4所示实施例之前执行。如图6所示,本实施例的方法包括:s601:在接收到所述第一应用服务实例对应的启动指令时,启动所述xds代理。
90.其中,启动指令用于指示启动第一应用服务。示例性的,在需要启动第一应用服务实例时,用户或者控制设备向第一应用服务输入启动指令。在第一应用服务接收到第一应用服务实例对应的启动指令后,先启动xds代理。
91.一种可能的实现方式中,可以采用如下方式启动xds代理:获取启动xds代理所需的第二启动配置信息,第二启动配置信息是由代理管理器为xds代理配置的。示例性的,第二启动配置信息中可以包括xds代理启动过程所需的参数。进而根据第二启动配置信息,启
动xds代理。
92.结合图7进行说明。如图7所示,在控制平面层还部署有代理管理器。代理管理器可以作为控制平面层部署的一个组件。代理管理器用于管理所述集群中各应用服务中的xds代理。
93.本实施例中,代理管理器可以实现对各应用服务中的xds代理的启动过程进行统一管理。一个示例中,代理管理器可以向各应用服务中的xds代理分发第二启动配置信息,所述第二配置信息为所述xds代理启动过程所需的配置信息。例如,代理管理器可以将每个xds代理启动过程所需的第二启动配置信息,写入到该xds代理对应的预设路径下的配置文件中。这样,当xds代理需要启动时,可以从该预设路径下的配置文件中读取得到第二启动配置信息,从根据第二启动配置信息启动xds代理。
94.本实施例中,通过在控制平面层部署代理管理器,并用于对各应用服务中的xds代理配置启动过程所需的第二启动配置信息,从而代理管理器可以实现对各应用服务中的xds代理的启动过程进行统一管理,提高xds代理的管理效率。
95.s602:通过xds代理从xds服务器获取第一启动配置信息,所述第一启动配置信息为启动所述第一应用服务实例所需的配置信息。
96.本实施例中,xds代理启动之后,可以通过与xds服务器的交互过程,获取得到启动第一应用服务实例(例如第一工作负载、xds客户端)所需的第一启动配置信息。第一启动配置信息中可以包括第一应用服务实例启动过程中所需的参数。
97.一种可能的实现方式中,s602可以采用如下方式实现:(1)xds代理与xds服务器建立连接。
98.xds代理与xds服务器之间基于xds协议建立通信连接。示例性的,二者之间建立通信连接的方式如下:xds代理获取证书信息,并根据所述证书信息,向xds服务器发送连接建立请求,所述连接建立请求中包括所述证书信息。xds服务器对所述证书信息进行验证,在验证通过后,向xds代理发送连接建立响应。相应的,xds代理从xds服务器接收连接建立响应。从而,xds代理与xds服务器之间连接通信连接。上述过程中,证书信息是由代理管理器为xds代理配置的。
99.继续参见图7,代理管理器可以向各应用服务中的xds代理分发证书信息。例如,代理管理器可以将每个xds代理对应的证书信息,写入到该xds代理对应的预设路径下的配置文件中。这样,当xds代理需要与xds服务器建立连接时,可以从该预设路径下的配置文件中读取得到证书信息,并将证书信息携带到连接建立请求中,以便xds服务器基于证书信息对xds代理进行鉴权。
100.本实施例中,通过为每个应用服务实例部署xds代理,并通过在控制平面层部署代理管理器,代理管理器对各xds代理配置证书信息,一方面实现了各xds代理的统一证书颁发管理机制,另一方面实现了各xds代理与xds服务器的统一连接连接机制。另外,还使得应用服务实例支持本地管理安全证书生命周期的能力。
101.(2)xds代理从所述xds服务器接收第二负载均衡策略信息。
102.示例性的,xds代理与xds服务器建立连接之后,xds代理可以向xds服务器请求第二负载均衡策略信息,或者,xds服务器可以主动向xds代理发送第二负载均衡策略信息。第二负载均衡策略信息包括:在xds代理与xds服务器建立连接时,集群中的所有应用服务对
应的负载均衡策略,或者,第一应用服务实例所需调用的其他应用服务对应的负载均衡策略。若在xds代理与xds服务器建立连接时,某个应用服务(例如第二应用服务)对应的负载均衡策略还未被配置,则第二负载均衡策略中可以包括该应用服务对应的默认负载均衡策略。
103.(3)xds代理根据所述第二负载均衡策略信息,生成所述第一启动配置信息,所述第一启动配置信息包括所述第二负载均衡策略信息。
104.第一启动配置信息为用于启动第一应用服务实例所需的配置信息,第一启动配置信息中可以包括第一应用服务实例启动过程所需的参数。本实施例中,xds代理可以基于第二负载均衡策略信息,生成第一应用服务实例所需的第一启动配置信息。该第一启动配置信息中可以包括第二负载均衡策略信息。
105.s603:根据所述第一启动配置信息启动所述第一应用服务实例。
106.示例性的,根据所述第一启动配置信息启动第一工作负载以及xds客户端,使得第一应用服务实例启动完成。
107.需要说明的是,图7中主要示例的是第一应用服务实例的启动过程。针对第二应用服务,若第二应用服务采用的是无代理模式,则第二应用服务中各实例的启动过程与第一应用服务实例是类似的,此处不做赘述。
108.本实施例中,通过为应用服务实例部署xds代理,在应用服务实例启动时,可以通过xds代理从xds服务器获取第一启动配置信息,并基于第一启动配置信息启动应用服务实例。从而,实现了xds服务器对各应用服务实例的启动过程进行统一管理的机制,提高了各应用服务实例的启动管理效率。
109.上文描述了本技术实施例提供的用于负载均衡的方法,下面将描述本技术实施例提供的用于负载均衡的装置。
110.本技术实施例可以根据上述方法实施例对用于负载均衡的装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以使用硬件的形式实现,也可以使用软件功能模块的形式实现。
111.需要说明的是,本技术实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。下面以使用对应各个功能划分各个功能模块为例进行说明。
112.图8为本技术实施例提供的一种用于负载均衡的装置的结构示意图。本实施例提供的装置可以应用于集群中的第一应用服务,所述第一应用服务包括:第一应用服务实例和xds代理,所述第一应用服务实例包括:第一工作负载和xds客户端。如图8所示,本实施例提供的用于负载均衡的装置800,包括:策略获取模块801和策略执行模块802。其中,策略获取模块801,用于通过所述xds代理接收xds服务器发送的第一负载均衡策略信息,并将所述第一负载均衡策略信息转发至所述xds客户端;策略执行模块802,用于在所述第一工作负载需要调用所述集群中的第二应用服务时,通过所述xds客户端根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
113.一种可能的实现方式中,本实施例提供的装置还包括:启动模块,所述启动模块用于:在接收到所述第一应用服务实例对应的启动指令时,启动所述xds代理;通过所述xds代理从所述xds服务器获取第一启动配置信息,所述第一启动配置信息为启动所述第一应用服务实例所需的配置信息;根据所述第一启动配置信息,启动所述第一应用服务实例。
114.一种可能的实现方式中,所述启动模块具体用于:通过所述xds代理与所述xds服务器建立连接;通过所述xds代理从所述xds服务器接收第二负载均衡策略信息;通过所述xds代理根据所述第二负载均衡策略信息,生成所述第一启动配置信息,所述第一启动配置信息包括所述第二负载均衡策略信息。
115.一种可能的实现方式中,所述启动模块具体用于:通过所述xds代理获取证书信息,并根据所述证书信息,向所述xds服务器发送连接建立请求,所述连接建立请求中包括所述证书信息;其中,所述证书信息是由代理管理器为所述xds代理配置的;所述代理管理器用于管理所述集群中各应用服务中的xds代理;通过所述xds代理从所述xds服务器接收连接建立响应,所述连接建立响应是所述xds服务器对所述证书信息验证通过后发送的。
116.一种可能的实现方式中,所述启动模块具体用于:获取启动所述xds代理所需的第二启动配置信息,所述第二启动配置信息是由所述代理管理器为所述xds代理配置的;根据所述第二启动配置信息,启动所述xds代理。
117.一种可能的实现方式中,所述策略执行模块802具体用于:通过所述xds客户端执行下述步骤:在监测到所述第一工作负载发送所述调用请求时,拦截所述调用请求,并对所述调用请求进行解析,确定出待调用的所述第二应用服务;从所述第一负载均衡策略信息中获取所述第二应用服务对应的负载均衡策略,并根据所述第二应用服务对应的负载均衡策略,在所述第二应用服务包括的多个第二应用服务实例中确定出所述一个或多个目标第二应用服务实例;向所述一个或多个目标第二应用服务实例发送所述调用请求。
118.一种可能的实现方式中,所述策略执行模块802还用于:确定是否存在所述第一应用服务与所述第二应用服务之间的连接通道;若不存在,则根据所述第二应用服务的地址信息和端口信息,建立所述第一应用服务和所述第二应用服务之间的连接通道。
119.一种可能的实现方式中,所述集群中不同应用服务中的xds代理基于同一编程语言框架实现。
120.本实施例提供的用于负载均衡的装置,可以执行上述任一方法实施例中由第一应用服务实现的用于负载均衡的方法,其实现原理和技术效果类似,此处不再赘述。
121.图9为本技术实施例提供的另一种用于负载均衡的装置的结构示意图。本实施例提供的装置可以应用于xds服务器。如图9所示,本实施例提供的用于负载均衡的装置900,
包括:获取模块901和发送模块902。其中,获取模块901,用于获取集群中的第一应用服务实例对应的第一负载均衡策略信息;发送模块902,用于向所述第一应用服务实例对应的xds代理发送所述第一负载均衡策略信息,以使所述xds代理将所述第一负载均衡策略信息转发至所述第一应用服务实例中的xds客户端,所述第一负载均衡策略信息用于在所述第一应用服务实例中的第一工作负载调用所述集群中的第二应用服务时,实现所述第二应用服务中的各第二应用服务实例的负载均衡。
122.本实施例提供的用于负载均衡的装置,可用于执行上述任意方法实施例中由xds服务器执行的用于负载均衡的方法,其实现原理和技术效果类似,此处不做赘述。
123.本技术实施例还提供一种用于负载均衡的系统,该系统包括:部署在控制平面层的服务发现xds服务器和部署在数据平面层的集群,所述集群中包括第一应用服务和第二应用服务,所述第一应用服务包括第一应用服务实例和xds代理,所述第一应用服务实例包括第一工作负载和xds客户端,所述第二应用服务包括多个第二应用服务实例;所述xds服务器用于,向所述xds代理发送第一负载均衡策略信息;所述xds代理用于,将所述第一负载均衡策略信息转发至所述xds客户端;所述xds客户端用于,在所述第一工作负载需要调用所述集群中的第二应用服务时,根据所述第一负载均衡策略信息,向所述第二应用服务中的一个或多个目标第二应用服务实例发送调用请求,以实现所述第二应用服务中的各第二应用服务实例的负载均衡。
124.一种可能的实现方式中,所述代理管理器用于,向所述集群中各应用服务中的xds代理分发第二启动配置信息,和/或,向所述集群中各应用服务中的xds代理分发证书信息。
125.本实施例提供的系统可用于实现上述任意方法实施例提供的用于负载均衡的方法,其实现原理和技术效果类似,此处不做赘述。
126.图10为本技术实施例提供的电子设备的结构示意图。如图10所示,本实施例提供的电子设备1000,包括:存储器1001以及至少一个处理器1002;所述存储器1001中存储有计算机程序,所述计算机程序被配置为由所述至少一个处理器1002执行以实现上述任一方法实施例中由第一应用服务实现的用于负载均衡的方法,或者,由xds服务器实现的用于负载均衡的方法,其实现原理和技术效果类似,此处不再赘述。
127.可选的,存储器1001既可以是独立的,也可以跟处理器1002集成在一起。当存储器1001是独立于处理器1002之外的器件时,电子设备1000还包括:总线1003,用于连接存储器1001和处理器1002。
128.本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行以实现如前述任一方法实施例中由第一应用服务实现的用于负载均衡的方法,或者,由xds服务器实现的用于负载均衡的方法,其实现原理和技术效果类似,此处不做赘述。
129.本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如前述任一方法实施例中由第一应用服务实现的用于负载均衡的方法,或者,由xds服务器实现的用于负载均衡的方法,其实现原理和技术效果类似,此处不做赘述。
130.本技术实施例还提供了一种芯片,包括:存储器和处理器,所述存储器中存储有计
算机程序,所述处理器运行所述计算机程序,以实现上述任一方法实施例中由第一应用服务实现的用于负载均衡的方法,或者,由xds服务器实现的用于负载均衡的方法,其实现原理和技术效果类似,此处不再赘述。
131.应理解,上述处理器可以是中央处理单元(英文:central processing unit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digital signal processor,简称:dsp)、专用集成电路(英文:application specific integrated circuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
132.存储器可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器,还可以为u盘、移动硬盘、只读存储器、磁盘或光盘等。
133.总线可以是工业标准体系结构(industry standard architecture,isa)总线、外部设备互连(peripheral component,pci)总线或扩展工业标准体系结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本技术附图中的总线并不限定仅有一根总线或一种类型的总线。
134.上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
135.一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(application specific integrated circuits,简称:asic)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备中。
136.本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
137.最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例的技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1