本发明属于信息系统领域,尤其涉及一种基于实时负载率的远程服务调用负载均衡系统。
背景技术:
随着信息系统的发展,应用规模日趋庞大,不同应用间的交互不断增多,传统信息系统存在大量重复的共性业务逻辑,大大降低了系统的可靠性、可维护性与可定制性。目前,采取将核心业务抽取出来成为服务,划分原有复杂的应用,以模块形式独立部署,能够实现服务的共享与重用。
然而当服务数量不断增多,服务间依赖关系变的复杂,简单暴露与引用远程服务无法满足用户需求。传统的远程服务调用过程中,客户端直接配置远程服务地址进行服务访问,大量服务交互使得服务地址的配置管理十分困难。
在集群环境中,为保证服务调用的可靠性,多采用多服务实例部署。即单个服务包含多个可用的服务实例,防止单个服务实例出现异常的情况下,仍能维持服务的正常访问。在多实例场景中,如何选择服务实例进行连接成为服务交互中不可避免的问题。随机负载均衡算法,采用随机的方式发放客户端请求;轮询负载均衡算法,采用遍历服务实例列表的方式发放客户端请求。以上算法不具有一定的动态性,未能考虑服务的实时负载情况,并且不支持用户自定义的负载策略配置。
技术实现要素:
发明目的:本发明针对目前信息系统中远程服务调用过程中存在的服务寻址不透明、服务负载不均问题,从服务实时负载率角度,提出一种基于实时负载率的远程服务调用负载均衡系统,包括监控中心、注册中心、客户端和服务端,
所述监控中心用于状态监控和统计服务连接数,并向注册中心定时上报;
所述注册中心用于提供服务发布与服务订阅,向客户端推送可用服务实例列表,并实时获取服务负载数量,计算服务实例负载等级;
所述客户端包括负载均衡器模块,所述负载均衡器模块用于分析服务实例负载等级,根据负载均衡筛选算法筛选出服务实例,并推荐给客户端。
所述服务端用于提供远程服务并向注册中心注册服务实例名称和访问地址等信息。
所述监控中心用于状态监控和统计服务连接数,具体包括:
监控中心分别接收服务端与客户端定时发送的心跳数据,根据心跳状态判断当前客户端与服务端的连接情况,将服务实例的新增、变更、异常、断开信息实时推送给在线的客户端;
监控中心实时统计当前服务实例所对应的客户端连接数信息,并向注册中心推送实例连接数更新列表;
监控中心提供可配置的监控周期设置,用户根据系统需求,定制监控统计频率。
所述注册中心作为负载均衡架构服务发布与服务订阅中心,分别向服务端与客户端提供服务自动注册与订阅功能。同时,注册中心内置服务实例负载等级划分器,接收由监控中心推送的服务实例当前连接数信息,并计算实时的服务实例负载率。
所述注册中心用于提供服务发布与服务订阅,向客户端推送可用服务实例列表,并实时获取服务负载数量,计算服务实例负载等级,具体包括:
启动服务实例时,服务实例自动向注册中心发送注册信息,包括服务实例访问地址、服务实例名称、服务实例支持最大连接数MAX信息,注册中心接收注册信息并进行持久化,同时通知客户端;
注册中心获取服务实例连接数信息,计算服务负载率情况,实时将服务实例负载等级变动列表推送给客户端;
注册中心提供负载等级划分算法,根据等级划分标准,以级别数代替具体连接数字,表示服务实例当前负载率,同时屏蔽小范围连接数频繁上下波动导致的级别数更新,避免大量负载等级变更信息发送所导致的资源浪费;
当客户端启动时,向注册中心发送服务连接请求,注册中心接收服务连接请求,查询当前服务下可用服务实例列表向客户端推送,可用服务实例列表包括服务实例地址及其负载等级信息;
注册中心支持自定义的负载等级划分标准配置;
注册中心支持自定义的波动屏蔽范围配置。
所述注册中心包括负载等级划分模块,负载等级划分模块提供负载等级划分算法,计算服务实例当前负载率(Load Factor,LF),并将负载率转化为相应负载等级(Load Level,LL)以可量化的方式表示当前服务负载状态。
服务实例当前负载率LF的计算方式为:当前连接服务实例的客户端数量(Client Number,CN)与服务实例配置的最大连接数MAX之间的比值,通过如下公式计算负载等级LL:
所述负载等级划分模块提供可配置的负载等级划分标准,支持用户自定义的划分方式:负载等级划分模块提供划分标准的可配置文件,用户通过修改文件中包括等级数等配置项,生成自定义负载等级划分标准。
为避免连接服务实例的客户端数量在等级边界值上下波动导致负载等级在连续两个区间之间不断转换,并推送大量负载等级变更信息,所述负载等级划分模块对指定范围的连接服务实例的客户端数量变化采用屏蔽处理,方法如下:通过如下公式计算变动率CR(Change Rate,CR):
其中CN’表示前次统计得到的连接服务实例的客户端数量。
将变动率CR与设置的最小变动率MIN_CR(Minimal Change Rate,MIN_CR)进行比较,若CR≤MIN_CR,判定此次负载变动较小,屏蔽此次变动;若CR>MIN_CR,判定此次负载变动有效,计算负载均衡等级,并向负载均衡器模块推送服务实例新的负载等级值。
与负载等级划分标准相同,除了默认提供的MIN_CR值(0.1),架构支持可配置的MIN_CR值设置,用户可根据服务实例的实际负载状况进行配置。
负载率越高,负载等级越高,服务实例当前负载越大。默认的负载等级由高到低分包括1级、2级、3级、4级、5级。
默认的负载等级划分标准为:
负载率在20%以内(包括20%),相应负载等级为5(LOW);
负载率在20%以上,40%以内(包括40%),相应负载等级为4;
负载率在40%以上,60%以内(包括60%),相应负载等级为3;
负载率在60%以上,80%以内(包括80%),相应负载等级为2;
负载率在80%以上,相应负载等级为1(HIGH)。
所述负载均衡器模块为远程服务调用架构提供可定制化的负载均衡策略,从可用服务实例列表中筛选出服务实例向客户端推荐。
所述负载均衡器模块用于分析服务实例负载等级,根据负载均衡筛选算法筛选出服务实例,并推荐给客户端,具体包括:
负载均衡器模块维护服务实例信息缓存,保证服务实例信息实时准确性,在注册中心故障中,仍能通过本地缓存实现服务调用;
负载均衡器模块提供基于服务实例负载均衡等级的负载均衡筛选算法,根据服务实例实时的负载率,分配客户端调用请求;
负载均衡器模块对于连接数等级最低的服务实例,始终推荐,减少重复的计算导致的客户端连接请求响应效率降低;
负载均衡器模块对不含有最高或最低负载等级服务实例集合,计算所有服务实例等级之和,按照负载等级高被选中概率低,负载等级低被选中概率高的算法,均衡化服务实例负载,从可用服务实例列表中筛选出服务实例,并向客户端推荐连接。所述负载均衡筛选算法包括如下步骤:
步骤1,一个服务包含一个服务实例的集合I={i0,i1,i2,...,iq},q为自然数,其中服务实例i0对应的负载等级以l0表示,i1对应的负载等级以l1表示,iq对应的负载等级以lq表示,以集合L表示服务实例对应的负载等级,则L={l0,l1,l2,...lq},以函数f(i)表示服务实例与其负载等级的对应关系,则f(i)=l。I包含子集Imin,Imax,Imid;I=Imin∪Imax∪Imid,且任意两个子集合之间的交集为空;子集Imin中的任意服务实例ik满足f(ik)=LOW,表示最低负载等级的服务实例集合;Imax中的任意服务实例ij满足f(ij)=HIGH,表示最高负载等级的服务实例集合;Imid中的任意服务实例im满足f(im)=(LOW,HIGH),表示最低与最高负载等级间的服务实例集合;
步骤2,若表示当前服务实例集合中,有服务实例负载等级最低的服务实例,则客户端从集合Imin中随机选取一个服务实例进行连接;并且若选中的服务实例负载等级维持最低,客户端始终选择该服务实例进行连接,不再重新筛选服务实例;
步骤3,若表示当前服务实例集合当中没有负载最低的服务实例,则根据服务实例负载高,被选择概率较低,服务实例负载高,被选择概率较低的规则,均分客户端请求,使得负载等级较高的服务实例被选中的概率较低,负载等级较低的服务实例被选择概率较高;
步骤4,若表示当前服务实例均负载较高,则客户端从集合Imax中随机选取一个服务实例进行连接。
步骤3包括如下步骤:
步骤3-1,对Imid中的元素按照负载等级由高到低进行排序,Imid={i0,i1,i2,...,in},其中i0表示Imid中负载等级最高的服务实例,in表示负载等级最低的服务实例;若Imid中存在负载等级相同的服务实例,则每个负载等级只计算一次;
步骤3-2,计算Imid中所有元素的负载等级之和此时,服务实例的负载等级所占sum(Imid)的比率表示该服务实例能够被选中的概率,负载率越高,其负载等级越高,所表示的数字越小,所占sum(Imid)的比率越小,被选中概率越低,反之负载等级越低,被选中概率越高;
步骤3-3,生成随机数r∈(0,sum(Imid)];
步骤3-4,被选中的服务实例i′满足:
有益效果:本发明针对服务远程调用技术领域,特别针对实时远程服务在发布订阅、监控与服务路由方面的应用。本发明通过注册中心、监控中心实现服务的透明寻址与实时监控,通过基于服务实时负载率的负载均衡算法以及可配置设置,实现服务调用的负载均衡。本发明能够实现远程服务资源的透明访问与平均分配。本发明收集服务实例的发布信息、实时状态与连接数量,根据可定制化的负载均衡算法,划分服务负载等级并筛选出服务实例向客户端推荐,实现对服务资源的合理调用。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为负载均衡系统架构。
图2为服务实例发布流程。
图3为服务实例订阅流程。
图4为服务实例更新流程。
图5为服务实例负载均衡算法流程。
具体实施方式
本发明是一种负载均衡策略,解决服务远程调用过程中的发布、订阅问题,特别是在服务访问过程中实现可动态调节的负载均衡方法。
如图1所示,本发明提出一种基于实时负载率的远程服务调用负载均衡系统,包括监控中心、注册中心、客户端和服务端,所述客户端包括负载均衡器模块,所述负载均衡器模块用于分析服务实例负载等级,根据负载均衡筛选算法筛选出服务实例,并推荐给客户端。
所述监控中心用于状态监控和统计服务连接数,具体包括:
所述监控中心用于状态监控和统计服务连接数,并向注册中心定时上报。监控中心分别接收服务端与客户端定时发送的心跳数据,根据心跳状态判断当前客户端与服务端的连接情况,将服务实例的新增、变更、异常、断开信息实时推送给在线的客户端;
所述注册中心作为负载均衡架构服务发布与服务订阅中心,分别向服务端与客户端提供服务自动注册与订阅功能。同时,注册中心内置服务实例负载等级划分器,接收由监控中心推送的服务实例当前连接数信息,并计算实时的服务实例负载率。注册中心向客户端推送可用服务实例列表,并实时获取服务负载数量,计算服务实例负载等级;
监控中心提供可配置的监控周期设置,用户根据系统需求,定制监控统计频率。
如图2所示,为服务实例发布流程。服务端启动后,注册服务实例,然后上报心跳信息,如果服务实例启动中,继续上报心跳信息,否则停止上报心跳信息。
如图3所示,为服务实例订阅流程。客户端启动后,发送服务订阅请求,注册中心接收请求,获取服务实例列表,推送服务实例列表向客户端,客户端接收服务实例列表信息。如图4所示,为服务实例更新流程,监控中心实时统计当前服务实例所对应的客户端连接数信息,并向注册中心推送实例连接数更新列表,客户端接收服务实例更新信息后进行更新。
所述注册中心用于提供服务发布与服务订阅,向客户端推送可用服务实例列表,并实时获取服务负载数量,计算服务实例负载等级,具体包括:
启动服务实例时,服务实例自动向注册中心发送注册信息,包括服务实例访问地址、服务实例名称、服务实例支持最大连接数MAX信息,注册中心接收注册信息并进行持久化,同时通知客户端。
注册中心获取服务实例连接数信息,计算服务负载率情况,实时将服务实例负载等级变动列表推送给客户端。
注册中心提供负载等级划分算法,根据等级划分标准,以级别数代替具体连接数字,表示服务实例当前负载率,同时屏蔽小范围连接数频繁上下波动导致的级别数更新,避免大量负载等级变更信息发送所导致的资源浪费;
当客户端启动时,向注册中心发送服务连接请求,注册中心接收服务连接请求,查询当前服务下可用服务实例列表向客户端推送,可用服务实例列表包括服务实例地址及其负载等级信息。
注册中心支持自定义的负载等级划分标准配置;
注册中心支持自定义的波动屏蔽范围配置。
所述注册中心包括负载等级划分模块,负载等级划分模块提供负载等级划分算法,计算服务实例当前负载率(Load Factor,LF),并将负载率转化为相应负载等级(Load Level,LL)以可量化的方式表示当前服务负载状态。
服务实例当前负载率LF的计算方式为:当前连接服务实例的客户端数量(Client Number,CN)与服务实例配置的最大连接数MAX之间的比值,通过如下公式计算负载等级LL:
其中,CN表示当前连接服务实例的客户端数量。
所述负载等级划分模块提供可配置的负载等级划分标准,支持用户自定义的划分方式:负载等级划分模块提供划分标准的可配置文件,用户通过修改文件中包括等级数LN、负载率范围LFR配置项,生成自定义负载等级划分标准。
所述负载等级划分模块提供可配置的负载等级划分标准,支持用户自定义的划分方式:负载等级划分模块提供划分标准的可配置文件,用户通过修改文件中包括等级数等配置项,生成自定义负载等级划分标准。
为避免连接服务实例的客户端数量在等级边界值上下波动导致负载等级在连续两个区间之间不断转换,并推送大量负载等级变更信息,所述负载等级划分模块对指定范围的连接服务实例的客户端数量变化采用屏蔽处理,方法如下:通过如下公式计算变动率CR(Change Rate,CR):
其中CN’表示前次统计得到的连接服务实例的客户端数量。
将变动率CR与设置的最小变动率MIN_CR进行比较,若CR≤MIN_CR,判定此次负载变动较小,屏蔽此次变动;若CR>MIN_CR,判定此次负载变动有效,计算负载均衡等级,并向负载均衡器模块推送服务实例新的负载等级值。
与负载等级划分标准相同,除了默认提供的MIN_CR值(0.1),架构支持可配置的MIN_CR值设置,用户可根据服务实例的实际负载状况进行配置。
负载率越高,负载等级越高,服务实例当前负载越大。默认的负载等级由高到低分包括1级、2级、3级、4级、5级。
默认的负载等级划分标准为:
负载率在20%以内(包括20%),相应负载等级为5(LOW);
负载率在20%以上,40%以内(包括40%),相应负载等级为4;
负载率在40%以上,60%以内(包括60%),相应负载等级为3;
负载率在60%以上,80%以内(包括80%),相应负载等级为2;
负载率在80%以上,相应负载等级为1(HIGH)。
所述负载均衡器模块为远程服务调用架构提供可定制化的负载均衡策略,从可用服务实例列表中筛选出服务实例向客户端推荐。
所述负载均衡器模块用于分析服务实例负载等级,根据负载均衡筛选算法筛选出服务实例,并推荐给客户端,具体包括:
负载均衡器模块维护服务实例信息缓存,保证服务实例信息实时准确性,在注册中心故障中,仍能通过本地缓存实现服务调用;
负载均衡器模块提供基于服务实例负载均衡等级的负载均衡筛选算法,根据服务实例实时的负载率,分配客户端调用请求;
负载均衡器模块对于连接数等级最低的服务实例,始终推荐,减少重复的计算导致的客户端连接请求响应效率降低;
负载均衡器模块对不含有最高或最低负载等级服务实例集合,计算所有服务实例等级之和,按照负载等级高被选中概率低,负载等级低被选中概率高的算法,均衡化服务实例负载,从可用服务实例列表中筛选出服务实例,并向客户端推荐连接。如图5所示,所述负载均衡筛选算法包括如下步骤:
步骤1,一个服务包含一个服务实例的集合I={i0,i1,i2,...,iq}(q为自然数),其中服务实例i0对应的负载等级以l0表示,i1对应的负载等级以l1表示,…,iq对应的负载等级以lq表示,以集合L表示服务实例对应的负载等级,则L={l0,l1,l2,...lq}(q为自然数),以函数f(i)表示服务实例与其负载等级的对应关系,则f(i)=l。I包含子集Imin,Imax,Imid;I=Imin∪Imax∪Imid,且任意两个子集合之间的交集为空;子集Imin中的任意服务实例ik满足f(ik)=LOW,表示最低负载等级的服务实例集合;Imax中的任意服务实例ij满足f(ij)=HIGH,表示最高负载等级的服务实例集合;Imid中的任意服务实例im满足f(im)=(LOW,HIGH),表示最低与最高负载等级间的服务实例集合;
步骤2,若表示当前服务实例集合中,有服务实例负载等级最低的服务实例,则客户端从Imin中随机选取一个服务实例进行连接;并且若选中的服务实例负载等级维持最低,客户端始终选择该服务实例进行连接,不再重新筛选服务实例;
步骤3,若表示当前服务实例集合当中没有负载最低的服务实例,则根据服务实例负载高,被选择概率较低,服务实例负载高,被选择概率较低的规则,均分客户端请求,使得负载等级较高的服务实例被选中的概率较低,负载等级较低的服务实例被选择概率较高;
步骤4,若表示当前服务实例均负载较高,则客户端从Imax中随机选取一个服务实例进行连接。
步骤3包括如下步骤:
步骤3-1,对Imid中的元素按照负载等级由高到低进行排序,Imid={i0,i1,i2,...,in},其中i0表示Imid中负载等级最高的服务实例,in表示负载等级最低的服务实例;若Imid中存在负载等级相同的服务实例,则每个负载等级只计算一次;
步骤3-2,计算Imid中所有元素的负载等级之和此时,服务实例的负载等级所占sum(Imid)的比率表示该服务实例能够被选中的概率,负载率越高,其负载等级越高,所表示的数字越小,所占sum(Imid)的比率越小,被选中概率越低,反之负载等级越低,被选中概率越高;
步骤3-3,生成随机数r∈(0,sum(Imid)];
步骤3-4,被选中的服务实例i′满足:
本发明支持服务的透明访问、实时监控与负载均衡。通过监控服务实例运行状态,统计服务实例的实时负载情况,本发明能够在同一服务多个服务实例间有效均衡分配客户端请求,使得客户端调用请求大概率发送至当前处于空闲状态的服务实例端,降低单个服务实例高负荷出现概率,从而整体提高远程服务调用的可靠性与稳定性,实现服务调用负载均衡。
尽管本发明就优选实施方式进行了示意和描述,但本领域的技术人员应当理解,只要不超出本发明的权利要求所限定的范围,可以对本发明进行各种变化和修改。