您的当前位置:首页一种基于zookeeper的任务负载均衡及高可用系统[发明专利]

一种基于zookeeper的任务负载均衡及高可用系统[发明专利]

2023-04-20 来源:乌哈旅游
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 112650592 A(43)申请公布日 2021.04.13

(21)申请号 202110011599.9(22)申请日 2021.01.06

(71)申请人 杭州当虹科技股份有限公司

地址 310000 浙江省杭州市西湖区西斗门

路3号天堂软件园E幢16层A座(72)发明人 代存折 李妃军 刘国强 宋录文 (74)专利代理机构 杭州橙知果专利代理事务所

(特殊普通合伙) 33261

代理人 杜放(51)Int.Cl.

G06F 9/50(2006.01)

权利要求书2页 说明书6页 附图1页

(54)发明名称

一种基于zookeeper的任务负载均衡及高可用系统(57)摘要

本发明公开了一种基于zookeeper的任务负载均衡及高可用系统。它包括应用启动模块用于运行应用程序的启动工作;创建模块用于创建应用与zookeeper集群的临时节点;zookeeper集群模块用于存储临时节点信息;任务下发模块用于任务的创建;负载计算模块用于计算出任务量较少的应用;任务处理模块用于执行任务及写入zookeeper集群的节点信息;任务结束模块用于处理任务状态及删除zookeeper集群的节点信息;监听模块用于监听zookeeper集群中的临时节点;收到节点删除事件模块用于判断监听内容;任务信息判断模块用于检测zookeeper集群的节点信息并决定后续流程。本发明的有益效果是:实现任务负载均衡及高可用,无缝将任务自动迁移至其他应用中运行,支持应用无限横向扩展。

CN 112650592 ACN 112650592 A

权 利 要 求 书

1/2页

1.一种基于zookeeper的任务负载均衡及高可用系统,其特征是,包括应用启动模块、创建模块、zookeeper集群模块、任务下发模块、负载计算模块、任务处理模块、任务结束模块、监听模块、收到节点删除事件模块、任务信息判断模块,

应用启动模块用于运行应用程序的启动工作,分别与创建模块和监听模块连接;创建模块用于创建应用与zookeeper集群的临时节点,与zookeeper集群模块连接;zookeeper集群模块用于存储临时节点信息;任务下发模块用于任务的创建,与负载计算模块连接;负载计算模块用于计算出任务量较少的应用,分别与zookeeper集群模块和任务处理模块连接;

任务处理模块用于执行任务及写入zookeeper集群的节点信息,分别与zookeeper集群模块和任务结束模块连接;

任务结束模块用于处理任务状态及删除zookeeper集群的节点信息,与zookeeper集群模块连接;

监听模块用于监听zookeeper集群中的临时节点,分别与zookeeper集群模块和收到节点删除事件模块连接;

收到节点删除事件模块用于判断监听内容,分别与监听模块和任务信息判断模块连接;

任务信息判断模块用于检测zookeeper集群的节点信息并决定后续流程,分别与监听模块和任务下发模块连接。

2.根据权利要求1所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,所述应用启动模块即应用程序的启动过程,此模块可执行多次,也就是启动多个应用程序组成一个集群来达到横向扩展的目的,在启动过程中需要触发创建模块及监听模块。

3.根据权利要求2所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,所述创建模块在应用启动模块中触发,用于收集当前机器ip、当前应用开放的端口信息,然后在zookeeper集群中创建一个临时节点,临时节点是zookeeper中的一个概念,其特点是如果当前应用异常,那么该节点会自动删除;最后把收集到的信息及其他额外标识存入该节点中。

4.根据权利要求1或2或3所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,所述任务下发模块由外部客户端及内部监听模块触发,用于接收任务信息并启动创建,任务信息需进行有有效性校验,然后将任务信息转发至负载计算模块处理。

5.根据权利要求4所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,所述负载计算模块通过与zookeeper集群交互,获取节点下的所有应用信息,解析节点内容中的taskCount标识,进行倒序排列取第一个节点中的内容,此时便拿到了该任务待运行的应用ip、端口,携带任务下发模块传递的任务信息进行接口请求转发至任务处理模块。

6.根据权利要求5所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,所述任务处理模块运行在具体的一个应用中,接收到任务信息后,先去zookeeper集群中创建一条该任务的临时节点信息,再执行真实的任务内容,任务内容视具体业务而定,任务完成后携带任务标识交由任务结束模块处理。

7.根据权利要求6所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征

2

CN 112650592 A

权 利 要 求 书

2/2页

是,所述任务结束模块主要是更新该任务在zookeeper中的状态及删除对应信息,首先在zookeeper中的节点下根据任务标识找到该任务节点,获取到节点信息中status标识进行更新:从1切换至0,然后再把该节点删除;此处之所以在删除前进行节点的更新操作,是因为删除该节点会触发监听模块的逻辑,如果不修改直接删除会导致该任务重新启动。

8.根据权利要求1或2所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,所述监听模块在应用启动模块中触发,每个应用启动后都会一直有一个监听模块在运行,主要是对zookeeper集群中的任务目录下的节点删除事件进行监听,该模块起到了高可用的作用,因为任务目录下的节点均为临时节点,由于其本身的特性:应用异常或应用所属机器宕机后该临时节点会自动删除,因此就会触发其他应用的监听模块的逻辑,监听触发的结果传递给收到节点删除事件模块进行筛选处理。

9.根据权利要求8所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,在收到节点删除事件模块中,接收到监听模块的消息后,解析信息中的type标识,如果

需要携带节点信息data执行任务信息判断模块,反之继续监听。有删除事件信息,

10.根据权利要求7所述的一种基于zookeeper的任务负载均衡及高可用系统,其特征是,在任务信息判断模块中,根据收到节点删除事件模块传递的节点信息,解析其中的status标识,如果为0表示此任务节点是正常删除,不进行处理,继续执行监听;如果为1表示此任务节点为zookeeper自动删除即任务异常退出,那么需要将该任务转发至任务下发模块进行重新启动来完成整个系统的任务自动迁移工作。

3

CN 112650592 A

说 明 书

一种基于zookeeper的任务负载均衡及高可用系统

1/6页

技术领域

[0001]本发明涉及应用任务负载相关技术领域,尤其是指一种基于zookeeper的任务负载均衡及高可用系统。

背景技术

[0002]目前应用的负载均衡及高可用大部分采用前置代理,比如nginx、F5等软件或硬件来实现,此方式虽然可以达到高可用及相关负载,但是在应用异常或应用所属机器宕机后,原本跑在该应用上的任务无法做到自动迁移,往往需要人工干预,风险大且成本高。发明内容

[0003]本发明是为了克服现有技术中存在上述的不足,提供了一种任务自动迁移的基于zookeeper的任务负载均衡及高可用系统。[0004]为了实现上述目的,本发明采用以下技术方案:

[0005]一种基于zookeeper的任务负载均衡及高可用系统,包括应用启动模块、创建模块、zookeeper集群模块、任务下发模块、负载计算模块、任务处理模块、任务结束模块、监听模块、收到节点删除事件模块、任务信息判断模块,[0006]应用启动模块用于运行应用程序的启动工作,分别与创建模块和监听模块连接;[0007]创建模块用于创建应用与zookeeper集群的临时节点,与zookeeper集群模块连接;

[0008]zookeeper集群模块用于存储临时节点信息;[0009]任务下发模块用于任务的创建,与负载计算模块连接;[0010]负载计算模块用于计算出任务量较少的应用,分别与zookeeper集群模块和任务处理模块连接;

[0011]任务处理模块用于执行任务及写入zookeeper集群的节点信息,分别与zookeeper集群模块和任务结束模块连接;

[0012]任务结束模块用于处理任务状态及删除zookeeper集群的节点信息,与zookeeper集群模块连接;

[0013]监听模块用于监听zookeeper集群中的临时节点,分别与zookeeper集群模块和收到节点删除事件模块连接;

[0014]收到节点删除事件模块用于判断监听内容,分别与监听模块和任务信息判断模块连接;

[0015]任务信息判断模块用于检测zookeeper集群的节点信息并决定后续流程,分别与监听模块和任务下发模块连接。

[0016]本发明公开了一种基于zookeeper的任务负载均衡及高可用方案,包括应用启动模块、创建模块、zookeeper集群模块、任务下发模块、负载计算模块、任务处理模块、任务结束模块、监听模块、收到节点删除事件模块、任务信息判断模块,通过该方案可以在不借助

4

CN 112650592 A

说 明 书

2/6页

外部代理程序的情况下实现应用中的任务负载均衡及高可用,同时在应用异常或应用所在机器宕机后可无缝将该应用或该机器上所有的应用中的任务自动迁移至其他应用中运行,且支持应用无限横向扩展。[0017]作为优选,所述应用启动模块即应用程序的启动过程,此模块可执行多次,也就是启动多个应用程序组成一个集群来达到横向扩展的目的,在启动过程中需要触发创建模块及监听模块。

[0018]作为优选,所述创建模块在应用启动模块中触发,用于收集当前机器ip、当前应用开放的端口信息,然后在zookeeper集群中创建一个临时节点,临时节点是zookeeper中的一个概念,其特点是如果当前应用异常,那么该节点会自动删除;最后把收集到的信息及其他额外标识存入该节点中。[0019]作为优选,所述任务下发模块由外部客户端及内部监听模块触发,用于接收任务信息并启动创建,任务信息需进行有有效性校验,然后将任务信息转发至负载计算模块处理。

[0020]作为优选,所述负载计算模块通过与zookeeper集群交互,获取节点下的所有应用信息,解析节点内容中的taskCount标识,进行倒序排列取第一个节点中的内容,此时便拿到了该任务待运行的应用ip、端口,携带任务下发模块传递的任务信息进行接口请求转发至任务处理模块。[0021]作为优选,所述任务处理模块运行在具体的一个应用中,接收到任务信息后,先去zookeeper集群中创建一条该任务的临时节点信息,再执行真实的任务内容,任务内容视具体业务而定,任务完成后携带任务标识交由任务结束模块处理。[0022]作为优选,所述任务结束模块主要是更新该任务在zookeeper中的状态及删除对应信息,首先在zookeeper中的节点下根据任务标识找到该任务节点,获取到节点信息中status标识进行更新:从1切换至0,然后再把该节点删除;此处之所以在删除前进行节点的更新操作,是因为删除该节点会触发监听模块的逻辑,如果不修改直接删除会导致该任务重新启动。

[0023]作为优选,所述监听模块在应用启动模块中触发,每个应用启动后都会一直有一

该个监听模块在运行,主要是对zookeeper集群中的任务目录下的节点删除事件进行监听,

模块起到了高可用的作用,因为任务目录下的节点均为临时节点,由于其本身的特性:应用异常或应用所属机器宕机后该临时节点会自动删除,因此就会触发其他应用的监听模块的逻辑,监听触发的结果传递给收到节点删除事件模块进行筛选处理。[0024]作为优选,在收到节点删除事件模块中,接收到监听模块的消息后,解析信息中的type标识,如果有删除事件信息,需要携带节点信息data执行任务信息判断模块,反之继续监听。

[0025]作为优选,在任务信息判断模块中,根据收到节点删除事件模块传递的节点信息,

不进行处理,继续执行监听;解析其中的status标识,如果为0表示此任务节点是正常删除,

如果为1表示此任务节点为zookeeper自动删除即任务异常退出,那么需要将该任务转发至任务下发模块进行重新启动来完成整个系统的任务自动迁移工作。[0026]本发明的有益效果是:通过该方案可以在不借助外部代理程序的情况下实现应用中的任务负载均衡及高可用,同时在应用异常或应用所在机器宕机后可无缝将该应用或该

5

CN 112650592 A

说 明 书

3/6页

机器上所有的应用中的任务自动迁移至其他应用中运行,且支持应用无限横向扩展。附图说明

[0027]图1是本发明的系统框图。

具体实施方式

[0028]下面结合附图和具体实施方式对本发明做进一步的描述。[0029]如图1所述的实施例中,一种基于zookeeper的任务负载均衡及高可用系统,包括应用启动模块、创建模块、zookeeper集群模块、任务下发模块、负载计算模块、任务处理模块、任务结束模块、监听模块、收到节点删除事件模块、任务信息判断模块,[0030]应用启动模块用于运行应用程序的启动工作,分别与创建模块和监听模块连接;应用启动模块即应用程序的启动过程,此模块可执行多次,也就是启动多个应用程序组成一个集群来达到横向扩展的目的,在启动过程中需要触发创建模块及监听模块,常规java微服务启动范例:[0031]java‑jar xxx.jar[0032]其中:

[0033]xxx.jar为该应用打包后的可执行包[0034]创建模块用于创建应用与zookeeper集群的临时节点,与zookeeper集群模块连接;创建模块在应用启动模块中触发,用于收集当前机器ip、当前应用开放的端口等信息,然后在zookeeper集群中创建一个临时节点,临时节点是zookeeper中的一个概念,其特点是如果当前应用异常,那么该节点会自动删除;最后把收集到的信息及其他额外标识存入该节点中,节点存储目录在zookeeper集群模块中会详细讲解。单个应用的节点存储格式为:

[0035]节点路径:/zookeeper/server/172.17.230.221:8080[0036]节点内容:[0037]{

[0038]ip:\"172.17.230.221\",[0039]port:8080,[0040]taskCount:0[0041]}

[0042]其中:

[0043]ip为当前应用所在的机器ip,用于后续任务下发使用[0044]port为当前应用开放的端口,用于后续任务下发使用[0045]taskCount为该应用目前运行的任务数量,初始为0,任务下发成功后+1,任务完成后‑1,实现负载的主要标识[0046]创建临时节点的伪代码为:[0047]#zookeeper实例对象[0048]curator[0049]#启动创建

6

CN 112650592 A[0050]

说 明 书

4/6页

.create()

[0051]#同时创建父级[0052].creatingParentsIfNeeded()[0053]#创建一个临时节点[0054].withMode(CreateMode.EPHEMERAL)[0055]#节点名称及内容[0056].forPath(“/zookeeper/server/172.17.230.221:8080”,[0057]“{ip:\\\"172.17.230.221\\\",port:8080,taskCount:0}”.getBytes(\"utf‑8\"))[0058]zookeeper集群模块用于存储临时节点信息;zookeeper通过在其内部创建临时节点来达到整个系统的负载及高可用,节点存储目录规划如下:[0059]/

[0060]/server[0061]/server1[0062]/server2[0063]/server3[0064]/...[0065]/task[0066]/task1[0067]/task2[0068]/task3[0069]/...[0070]其中:

[0071]/server节点下是存储所有启动的应用程序信息,server1为机器ip+应用端口,比如:172.17.230.221:8080,节点内容规则在【创建模块】中有描述[0072]/task节点下是存储所有应用的运行中的任务,task1为任务标识(视具体业务而定,不重复即可),节点内容规则在【任务处理模块】中有描述[0073]任务下发模块用于任务的创建,与负载计算模块连接;任务下发模块由外部客户端及内部监听模块触发,用于接收任务信息并启动创建,任务信息需进行有有效性校验如任务名称是否重复、任务内容是否合法、任务创建人是否存在等,然后将任务信息转发至负载计算模块处理。

[0074]负载计算模块用于计算出任务量较少的应用,分别与zookeeper集群模块和任务处理模块连接;负载计算模块通过与zookeeper集群交互,获取/server节点下的所有应用信息,解析节点内容中的taskCount标识,进行倒序排列取第一个节点中的内容,此时便拿到了该任务待运行的应用ip、端口,携带任务下发模块传递的任务信息进行接口请求转发至任务处理模块。

[0075]任务处理模块用于执行任务及写入zookeeper集群的节点信息,分别与zookeeper集群模块和任务结束模块连接;任务处理模块运行在具体的一个应用中,接收到任务信息后,先去zookeeper集群中创建一条该任务的临时节点信息,单个任务的节点规则如下:[0076]节点路径:/zookeeper/task/fa79a402c1124a8e8ed86e6d8f3c777d

7

CN 112650592 A[0077]

说 明 书

5/6页

节点内容:

[0078]{

[0079]server:\"172.17.230.221:8080\",[0080]id:”fa79a402c1124a8e8ed86e6d8f3c777d”,[0081]status:1[0082]}

[0083]其中:

[0084]fa79a402c1124a8e8ed86e6d8f3c777d为任务的标识[0085]server为当前任务所属的应用节点名称[0086]id为任务的标识

[0087]status为任务的状态:1‑运行中、0‑停止[0088]再执行真实的任务内容,任务内容视具体业务而定,比如执行一次视频转码任务、视频截图任务等等,任务完成后携带任务标识交由任务结束模块处理。

[0089]任务结束模块用于处理任务状态及删除zookeeper集群的节点信息,与zookeeper集群模块连接;任务结束模块主要是更新该任务在zookeeper中的状态及删除对应信息,首先在zookeeper中的/task节点下根据任务标识找到该任务节点,获取到节点信息中status标识进行更新:从1切换至0,然后再把该节点删除,删除节点的伪代码示例:[0090]#zookeeper实例对象[0091]curator[0092]#启动删除[0093].delete()[0094]#异步执行[0095].inBackground()[0096]#节点位置[0097].forPath(“/zookeeper/task/fa79a402c1124a8e8ed86e6d8f3c777d”)[0098]此处之所以在删除前进行节点的更新操作,是因为删除该节点会触发监听模块的逻辑,如果不修改直接删除会导致该任务重新启动。

[0099]监听模块用于监听zookeeper集群中的临时节点,分别与zookeeper集群模块和收到节点删除事件模块连接;监听模块在应用启动模块中触发,每个应用启动后都会一直有一个监听模块在运行,主要是对zookeeper集群中的/task任务目录下的节点删除事件进行监听,该模块起到了高可用的作用,因为/task任务目录下的节点均为临时节点,由于其本身的特性:应用异常或应用所属机器宕机后该临时节点会自动删除,因此就会触发其他应用的监听模块的逻辑,监听伪代码:[0100]PathChildrenCache pathChildrenCache=new PathChildrenCache(\"zookeeper服务实例\",\"/task/\",true);

[0101]//设置监听器和处理过程,cacheImpl为实现PathChildrenCacheListener接口的服务,内部可以接收到该节点下的增删改查变动通知

[0102]pathChildrenCache.getListenable().addListener(cacheImpl,Executors.newCachedThreadPool());

8

CN 112650592 A[0103]

说 明 书

6/6页

//开始监听

[0104]pathChildrenCache.start(StartMode.BUILD_INITIAL_CACHE);[0105]监听触发的结果传递给收到节点删除事件模块进行筛选处理。[0106]收到节点删除事件模块用于判断监听内容,分别与监听模块和任务信息判断模块连接;在收到节点删除事件模块中,接收到监听模块的消息后,解析信息中的type标识,如果有删除事件信息,即如果为CHILD_REMOVED,则认为是删除,需要携带节点信息data执行任务信息判断模块,反之继续监听,收到的消息范例如下:[0107]zookeeper消息通知标准如下:[0108]{

[0109]type:CHILD_REMOVED,[0110]data:{xxxx}[0111]}

[0112]其中:

[0113]type表示消息类型,CHILD_ADDED为节点新增,CHILD_UPDATED为节点更新,CHILD_REMOVED为节点删除

[0114]data为当前节点的内容,具体格式在【任务处理模块】中有描述

[0115]任务信息判断模块用于检测zookeeper集群的节点信息并决定后续流程,分别与监听模块和任务下发模块连接;在任务信息判断模块中,根据收到节点删除事件模块传递

解析其中的status标识,如果为0表示此任务节点是正常删除,不进行处理,继的节点信息,

续执行监听;如果为1表示此任务节点为zookeeper自动删除即任务异常退出,那么需要将该任务转发至任务下发模块进行重新启动来完成整个系统的任务自动迁移工作。[0116]本发明公开了一种基于zookeeper的任务负载均衡及高可用方案,包括应用启动模块、创建模块、zookeeper集群模块、任务下发模块、负载计算模块、任务处理模块、任务结束模块、监听模块、收到节点删除事件模块、任务信息判断模块,通过该方案可以在不借助外部代理程序的情况下实现应用中的任务负载均衡及高可用,同时在应用异常或应用所在机器宕机后可无缝将该应用或该机器上所有的应用中的任务自动迁移至其他应用中运行,

直播时移任务上,可以在服且支持应用无限横向扩展。已应用于当虹云产品中的直播录制、

务器异常或程序异常的情况下不会中断录制、时移任务,增加了整个直播流程的稳定性。

9

CN 112650592 A

说 明 书 附 图

1/1页

图1

10

因篇幅问题不能全部显示,请点此查看更多更全内容