一种分布式去中心化的负载均衡方法及系统与流程

文档序号:26003891发布日期:2021-07-23 21:21阅读:207来源:国知局
一种分布式去中心化的负载均衡方法及系统与流程

本发明实施例涉及互联网技术领域,具体涉及一种分布式去中心化的负载均衡方法及系统。



背景技术:

在如今的分布式系统环境下,服务之间的调用非常的频繁,不同服务之间根据业务的不同,调用方式也不同。尤其是在微服务系统下服务发现与注册功能显得尤为重要,当下也有很多服务注册与发现的开源项目(zookeeper、etcd、consol),这些组件虽然解决了现有分布式系统下的服务注册与发现的相关问题,但每个组件都有自身的缺点,还存在不足之处,比如:1、不支持实时服务信息的变化通知;2、没有健康检查;3、不支持多数据中心;4、接口api调用复杂,不易用(sdk集成或者http接口)。



技术实现要素:

为此,本发明实施例提供一种分布式去中心化的负载均衡方法,基于代理插件与服务注册与发现中心相结合的方式,提高了服务进程之间调用的高可用性,使服务调用更加简单易用,降低了代码的冗余度,提高了开发效率。

为了实现上述目的,本发明实施例提供如下技术方案:

根据本发明实施例的第一方面,提出了一种分布式去中心化的负载均衡方法,所述方法包括:

在业务服务进程内部设置有不同的代理插件,当业务服务进程需要调用下游服务时,均通过内部设置的代理插件向所调用的下游服务发送请求,且代理插件在第一次向下游服务发送请求时会通过请求服务注册与发现中心获取到该下游服务的服务地址列表并放入本地缓存中,再按照设置的负载均衡方式,选择一个服务地址建立长连接自动负载均衡,而在下次请求服务时,直接从本地缓存中获取该服务地址列表进行自动负载均衡;

业务服务进程内的代理插件定期自动上报服务进程的内部状态、服务所在机器的负载情况到服务注册与发现中心进行健康检测,并根据上报返回的结果进行代理插件内缓存的服务地址列表的更新;

服务注册与发现中心将监控到的服务的变化实时通知到监听该服务的的业务服务进程中,以便更新代理插件内缓存的服务地址列表。

进一步地,所述方法还包括:

业务服务进程启动后会通过代理插件完成在服务注册与发现中心的服务地址相关信息的自动注册。

进一步地,所述方法还包括:

若健康检测失败,说明业务服务进程与服务注册与发现中心出现网络故障或者服务注册与发现中心处于不可用状态,此时代理插件内部通过本地缓存可到下游服务的地址,继续执行发送请求的需要。

进一步地,所述方法还包括:

在代理插件内部会配置多个服务注册与发现中心的地址,多个服务注册与发现中心定时同步数据,在与一个服务注册与发现中心建立连接或者中途连接断开时,代理插件内部会轮询服务注册与发现中心的地址,直到连接上其中一个。

进一步地,所述服务所在机器的负载情况包括cpuload、cpu使用率、当前机器的连接数。

根据本发明实施例的第二方面,提出了一种分布式去中心化的负载均衡系统,所述系统包括:

负载均衡模块,用于在业务服务进程内部设置有不同的代理插件,当业务服务进程需要调用下游服务时,均通过内部设置的代理插件向所调用的下游服务发送请求,且代理插件在第一次向下游服务发送请求时会通过请求服务注册与发现中心获取到该下游服务的服务地址列表并放入本地缓存中,再按照设置的负载均衡方式,选择一个服务地址建立长连接自动负载均衡,而在下次请求服务时,直接从本地缓存中获取该服务地址列表进行自动负载均衡;

缓存列表更新模块,用于业务服务进程内的代理插件定期自动上报服务进程的内部状态、服务所在机器的负载情况到服务注册与发现中心进行健康检测,并根据上报返回的结果进行代理插件内缓存的服务地址列表的更新;

服务注册与发现中心将监控到的服务的变化实时通知到监听该服务的的业务服务进程中,以便更新代理插件内缓存的服务地址列表。

进一步地,所述缓存列表更新模块还用于:

若健康检测失败,说明业务服务进程与服务注册与发现中心出现网络故障或者服务注册与发现中心处于不可用状态,此时代理插件内部通过本地缓存可到下游服务的地址,继续执行发送请求的需要。

进一步地,所述负载均衡模块还用于:

在代理插件内部会配置多个服务注册与发现中心的地址,多个服务注册与发现中心定时同步数据,在与一个服务注册与发现中心建立连接或者中途连接断开时,代理插件内部会轮询服务注册与发现中心的地址,直到连接上其中一个。

根据本发明实施例的第三方面,提出了一种计算机可读存储介质,所述计算机可读存储介质中包含一个或多个程序指令,所述一个或多个程序指令用于被处理器执行如上任一项所述的一种分布式去中心化的负载均衡方法。

本发明实施例具有如下优点:

本发明实施例提出的一种分布式去中心化的负载均衡方法及系统,所述方法包括:在业务服务进程内部设置有不同的代理插件,当业务服务进程需要调用下游服务时,均通过内部设置的代理插件向所调用的下游服务发送请求,且代理插件在第一次向下游服务发送请求时会通过请求服务注册与发现中心获取到该下游服务的服务地址列表并放入本地缓存中,再按照设置的负载均衡方式,选择一个服务地址建立长连接自动负载均衡,而在下次请求服务时,直接从本地缓存中获取该服务地址列表进行自动负载均衡。业务服务进程内部无需做任何事情,通过代理插件即可轻松完成发送任何请求到下游服务的需求,业务服务进程无需关心代理插件内部的实现与网络拓扑,只需在业务服务进程内部嵌入公共代理插件即可,这样减少了大量冗余的代码,增强了服务的高可用性,提高了服务之间的调用性能,同时简单易用对业务代码无任何侵入,提高了工作效率。

附图说明

为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。

图1为本发明实施例1提供的一种分布式去中心化的负载均衡方法的流程示意图。

具体实施方式

以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例1提出了一种分布式去中心化的负载均衡方法,具体如图1所示,该方法包括:

在业务服务进程内部设置有不同的代理插件,当业务服务进程需要调用下游服务时,均通过内部设置的代理插件向所调用的下游服务发送请求,且代理插件在第一次向下游服务发送请求时会通过请求服务注册与发现中心获取到该下游服务的服务地址列表并放入本地缓存中,再按照设置的负载均衡方式,选择一个服务地址建立长连接自动负载均衡,而在下次请求服务时,直接从本地缓存中获取该服务地址列表进行自动负载均衡。

具体的,根据分布式系统业务服务进程a需要调用下游服务(b、c、d)的业务方式,在a服务进程内部设置不同的代理插件,比如:一致性哈希代理、随机代理、轮询代理、强一致性代理。

在服务进程a需要调用下游服务b时,全部通过代理插件去发送请求,代理插件内部在第一次向服务b发送请求时会通过请求服务注册与发现中心获取下游服务b的服务地址列表,再通过设置的负载均衡方式,选择一个服务b的地址建立长连接,同时发送请求到b服务进程。业务端无需做任何事情,只需调用代理插件发请求即可,也不需要关心代理插件内部的具体实现。

在代理插件获取到下游服务b的服务地址列表时,同时将b的服务地址列表放入本地缓存中,以便下次请求b服务时,不需要再去服务注册与发现中心去重新获取,直接通过代理插件的本地缓存去获取b服务地址列表进行负载均衡策略,代理插件的本地缓存会在收到服务注册与发现中心变动的通知以及根据上报自身状态返回的结果进行缓存的更新。这样可以加快访问速度,提高了服务的调用性能,也避免了服务注册与发现中心不可用导致业务调用的不可用的问题。

该方法还包括:业务服务进程内的代理插件定期自动上报服务进程的内部状态、服务所在机器的负载情况到服务注册与发现中心进行健康检测,并根据上报返回的结果进行代理插件内缓存的服务地址列表的更新。本实施例中,服务所在机器的负载情况包括cpuload、cpu使用率、当前机器的连接数。进一步地,该方法还包括:业务服务进程启动后会通过代理插件完成在服务注册与发现中心的服务地址相关信息的自动注册。

具体的,进程a启动后代理插件内部会和服务注册与发现中心保持长连接,通过代理插件完成向服务注册与发现中心的自动注册的功能,这样以便其他监控服务能够及时收到服务a变化的通知,然后每隔2s代理会自动上报一次服务的内部状态、服务所在机器的负载情况(cpuload、cpu使用率、当前机器的连接数)到服务注册与发现中心进行健康检测,并根据上报返回的结果,更新该服务进程a所监听的所有服务的本地缓存列表。

进一步地,该方法还包括:若健康检测失败,说明业务服务进程与服务注册与发现中心出现网络故障或者服务注册与发现中心处于不可用状态,此时代理插件内部通过本地缓存可到下游服务的地址,继续执行发送请求的需要。一切似乎没有任何异常的进行请求发送。

该方法还包括:服务注册与发现中心将监控到的服务的变化实时通知到监听该服务的的业务服务进程中,以便更新代理插件内缓存的服务地址列表。

具体的,服务注册与发现中心在监控到服务b发生变动时,即有服务b上下线时,实时给监听b的其他服务(比如a服务进程)发送服务变化的通知,此时a服务进程内的代理插件会收到服务b的变动通知,代理插件立即更新内部服务b的缓存列表,做到服务b变动的及时通知,以便调用b服务时做到动态调用。

进一步地,该方法还包括:在代理插件内部会配置多个服务注册与发现中心的地址,多个服务注册与发现中心定时同步数据,在与一个服务注册与发现中心建立连接或者中途连接断开时,代理插件内部会轮询服务注册与发现中心的地址,直到连接上其中一个。这些多个服务注册与发现中心全部是对等网络,可以部署多个数据中心,注册与发现中心之间定时同步数据,这样可以做到无master节点不用每次都进行选举,在分布式网络下不管哪一个处于不可用状态,其他服务都能照常提供服务,大幅度提高了服务的可用性。

与上述实施例1相对应的,本发明实施例2提出了一种分布式去中心化的负载均衡系统,该系统包括:

负载均衡模块,用于根据业务服务进程需要调用下游服务的业务方式,在业务服务进程内部设置不同的代理插件,当业务服务进程需要调用下游服务时,均通过内部设置的代理插件向所调用的下游服务发送请求,且代理插件在第一次向下游服务发送请求时会通过请求服务注册与发现中心获取到该下游服务的服务地址列表并放入本地缓存中,再按照设置的负载均衡方式,选择一个服务地址建立长连接自动负载均衡,而在下次请求服务时,直接从本地缓存中获取该服务地址列表进行自动负载均衡;

缓存列表更新模块,用于业务服务进程内的代理插件定期自动上报服务进程的内部状态、服务所在机器的负载情况到服务注册与发现中心进行健康检测,并根据上报返回的结果进行代理插件内缓存的服务地址列表的更新;

服务注册与发现中心将监控到的服务的变化实时通知到监听该服务的的业务服务进程中,以便更新代理插件内缓存的服务地址列表。

进一步地,缓存列表更新模块还用于:

若健康检测失败,说明业务服务进程与服务注册与发现中心出现网络故障或者服务注册与发现中心处于不可用状态,此时代理插件内部通过本地缓存可到下游服务的地址,继续执行发送请求的需要。

进一步地,负载均衡模块还用于:

在代理插件内部会配置多个服务注册与发现中心的地址,多个服务注册与发现中心定时同步数据,在与一个服务注册与发现中心建立连接或者中途连接断开时,代理插件内部会轮询服务注册与发现中心的地址,直到连接上其中一个。

本发明实施例提供的一种分布式去中心化的负载均衡系统中各部件所执行的功能均已在上述实施例1中做了详细介绍,因此这里不做过多赘述。

本发明实施例3提出了一种计算机可读存储介质,计算机可读存储介质中包含一个或多个程序指令,一个或多个程序指令用于被处理器执行如上实施例1中的一种分布式去中心化的负载均衡方法。

虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1