一种基于zookeeper的分布式任务协调的方法及装置转让专利

申请号 : CN201910386401.8

文献号 : CN110109742B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 成鑫程名

申请人 : 重庆八戒电子商务有限公司

摘要 :

本发明公开了一种基于zookeeper的分布式任务协调的方法及装置;方法包括如下步骤:将待执行的任务抽象成有限个初始分片,并将有限个初始分片存储在zookeeper中;初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数;延迟启动两个监听线程,分别监听节点变化和分片变化;当监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数;判断初始最大片数以及更新最大片数是否相同;若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。本发明的方案采用开箱即用的分布式任务协调方案,通过简洁的方法,提高了灵活度,降低分布式系统的构建成本。

权利要求 :

1.一种基于zookeeper的分布式任务协调的方法,其特征在于包括:将待执行的任务抽象成有限个初始分片,并将所述有限个初始分片存储在zookeeper中;初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数;延迟启动两个监听线程,分别监听节点变化和分片变化;当所述监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数;判断所述初始最大片数以及所述更新最大片数是否相同;若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。

2.根据权利要求1所述的方法,其特征在于,所述初始最大片数的计算步骤包括:判断所述初始分片的数量是否为初始节点的整数倍;若是,则所述初始最大片数为所述初始分片的数量相对于所述初始节点的数量的倍数;若否,则所述初始最大片数为所述初始分片的数量与所述初始节点的数量的商加1。

3.根据权利要求1所述的方法,其特征在于,在重新计算所述更新最大片数之后,利用所述监听线程持续监听节点变化和分片变化,并在发生变化后重复计算所述更新最大片数。

4.根据权利要求1所述的方法,其特征在于,进行分片抢占或丢弃操作的步骤,包括:若所述更新最大片数大于所述初始最大片数,使所述节点放弃已经占用的分片,并重新计算所述更新最大片数;若所述更新最大片数小于所述初始最大片数,尝试抢占未被占用的分片,并重新计算所述更新最大片数。

5.一种基于zookeeper的分布式任务协调的装置,其特征在于包括:任务设定单元,用于将待执行的任务抽象成有限个初始分片,并将所述有限个初始分片存储在zookeeper中;

注册启动单元,用于初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数;

任务监控单元,延迟启动两个监听线程,分别监听节点变化和分片变化;变化计算单元,用于当所述监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数;协调分配单元,用于判断所述初始最大片数以及所述更新最大片数是否相同;若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。

6.根据权利要求5所述的装置,其特征在于,所述变化计算单元,还用于判断所述初始分片的数量是否为初始节点的整数倍;若是,则所述初始最大片数为所述初始分片的数量相对于所述初始节点的数量的倍数;若否,则所述初始最大片数为所述初始分片的数量与所述初始节点的数量的商加1。

7.根据权利要求5所述的装置,其特征在于,所述任务监控单元,还用于在重新计算所述更新最大片数之后,利用所述监听线程持续监听节点变化和分片变化;并且所述变化计算单元,还用于在发生变化后重复计算所述更新最大片数。

8.根据权利要求5所述的装置,其特征在于,所述协调分配单元,还用于若所述更新最大片数大于所述初始最大片数,使所述节点放弃已经占用的分片,并重新计算所述更新最大片数;若所述更新最大片数小于所述初始最大片数,尝试抢占未被占用的分片,并重新计算所述更新最大片数。

9.一种存储介质,其存储有计算机程序,该计算机程序被执行时用于实现根据权利要求1-4中任一项所述的基于zookeeper的分布式任务协调的方法。

10.一种计算设备,包括存储器以及处理器,所述存储器存储有计算机程序,该计算机程序被所述处理器执行时用于实现1-4中任一项所述的基于zookeeper的分布式任务协调的方法。

说明书 :

一种基于zookeeper的分布式任务协调的方法及装置

技术领域

[0001] 本发明涉及分布式系统中任务分配的框架技术领域,具体涉及一种基于zookeeper的分布式任务协调的方法及装置。

背景技术

[0002] 在互联网系统中,涉及大量的分布式计算;但如何来进行任务协调、分配,节点变化后的任务调整,缺少灵活、简洁以及与业务耦合度低比较通用的框架;进而导致了构建分布式系统难度增大。
[0003] ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。然而目前的ZooKeeper存在以下问题:不能及时对节点或者任务分片的变化进行更新,导致节点的处理能力无法充分发挥。

发明内容

[0004] 针对现有技术中的缺陷,本发明提供一种基于zookeeper的分布式任务协调的方法及装置。
[0005] 一方面,本发明提供了一种基于zookeeper的分布式任务协调的方法,所述方法包括下述步骤:将待执行的任务抽象成有限个初始分片,并将有限个初始分片存储在zookeeper中;初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数;延迟启动两个监听线程,分别监听节点变化和分片变化;当监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数;判断初始最大片数以及更新最大片数是否相同;若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。
[0006] 可选地,初始最大片数的计算步骤包括:判断初始分片的数量是否为初始节点的整数倍;若是,则初始最大片数为初始分片的数量相对于初始节点的数量的倍数;若否,则初始最大片数为初始分片的数量与初始节点的数量的商加1。
[0007] 可选地,在重新计算更新最大片数之后,利用监听线程持续监听节点变化和分片变化,并在发生变化后重复计算更新最大片数。
[0008] 可选地,进行分片抢占或丢弃操作的步骤,包括:若更新最大片数大于初始最大片数,使节点放弃已经占用的分片,并重新计算更新最大片数;若更新最大片数小于初始最大片数,尝试抢占未被占用的分片,并重新计算更新最大片数。
[0009] 另一方面,本发明提供了一种基于zookeeper的分布式任务协调的装置,所述装置包括任务设定单元,用于将待执行的任务抽象成有限个初始分片,并将有限个初始分片存储在zookeeper中;注册启动单元,用于初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数;任务监控单元,延迟启动两个监听线程,分别监听节点变化和分片变化;变化计算单元,用于当监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数;协调分配单元,用于判断初始最大片数以及更新最大片数是否相同;若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。
[0010] 可选地,变化计算单元,还用于判断初始分片的数量是否为初始节点的整数倍;若是,则初始最大片数为初始分片的数量相对于初始节点的数量的倍数;若否,则初始最大片数为初始分片的数量与初始节点的数量的商加1。
[0011] 可选地,任务监控单元,还用于在重新计算更新最大片数之后,利用监听线程持续监听节点变化和分片变化;并且变化计算单元,还用于在发生变化后重复计算更新最大片数。
[0012] 可选地,协调分配单元,还用于若更新最大片数大于初始最大片数,使节点放弃已经占用的分片,并重新计算更新最大片数;若更新最大片数小于初始最大片数,尝试抢占未被占用的分片,并重新计算更新最大片数。
[0013] 另一方面,本发明提供了一种存储介质,其存储有计算机程序,该计算机程序被执行时用于实现上述基于zookeeper的分布式任务协调的方法。
[0014] 另一方面,本发明提供了一种计算设备,包括存储器以及处理器,存储器存储有计算机程序,该计算机程序被处理器执行时用于实现上述基于zookeeper的分布式任务协调的方法。
[0015] 本发明的有益效果体现在:
[0016] 在本发明中,通过监听线程发现节点或者分片变化,立即进行节点允许抢占的初始最大片数的计算,根据计算结果执行分片抢占或者放弃操作;采用这种分布式任务协调方案,通过简洁的方法,提高了灵活度,降低分布式系统的构建成本。

附图说明

[0017] 为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。
[0018] 图1是本发明实施例提供的一种基于zookeeper的分布式任务协调的方法流程示意图;
[0019] 图2是本发明实施例提供的一种基于zookeeper的分布式任务协调的装置的结构示意图;
[0020] 图3是本发明实施例提供的一种基于zookeeper的分布式任务协调的方法的流程图;
[0021] 图4是本发明实施例提供的存储介质的示意图;
[0022] 图5是本发明实施例提供的计算设备的示意图。

具体实施方式

[0023] 下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只作为示例,而不能以此来限制本发明的保护范围。
[0024] 需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。
[0025] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0026] 在互联网系统中,涉及大量的分布式计算;但如何来进行任务协调、分配,节点变化后的任务调整,缺少灵活、简洁以及与业务耦合度低比较通用的框架;进而导致了构建分布式系统难度增大;为了解决上述问题,所以有必要,研制一种基于zookeeper的分布式任务协调的方法及装置,采用开箱即用的分布式任务协调方案,通过简洁的方法,提高了灵活度,降低分布式系统的构建成本。
[0027] 本发明具体实施方式提供一种基于zookeeper的分布式任务协调的方法,该方法如图1所示,包括如下步骤:
[0028] 步骤S1,将待执行的任务抽象成有限个初始分片,并将有限个初始分片存储在zookeeper中;系统维护者可以自行维护任务与分片的映射关系,
[0029] 步骤S2,初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数;初始最大片数的计算步骤包括:判断初始分片的数量是否为初始节点的整数倍;若是,则初始最大片数为初始分片的数量相对于初始节点的数量的倍数;若否,则初始最大片数为初始分片的数量与初始节点的数量的商加1。初始最大片数max的计算伪代码可以为Max=n÷m,If(n/m>0)max++。中n为初始分片的数量,而m为初始节点的数量。
[0030] 步骤S3,延迟启动两个监听线程,分别监听节点变化和分片变化;其中第一监听线程可以用于监听节点变化,第二监听线程可以用于监听分片变化。
[0031] 在本发明实施例中,为了保证系统稳定性,除了2个监听线程,还可以增加新增终端检测,终端周期性地检查当前节点所占有的分片数量是否与之前分片数量相同;若相同,不执行任何操作;若不同,触发分片抢占或丢弃操作。
[0032] 步骤S4,当监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数。
[0033] 在本发明实施例中,只要节点或分片其中一个有变化,就立即进行更新最大片数max’的计算,更新最大片数max’的计算方式与初始最大片数max的计算方式相同。更新最大片数max’计算步骤包括:判断变化后的分片的数量n’是否为变化后的节点m’的整数倍;若是,则更新最大片数max’为变化后的分片的数量n’相对于变化后的节点m’的倍数;若否,则更新最大片数max’为变化后的分片的数量n’与变化后的节点m’的商加1。初始最大片数max’的计算伪代码可以为Max’=n’÷m’,If(n’/m’>0)max’++。中n’为分片的数量,而m’为节点的数量。
[0034] 步骤S5,判断初始最大片数以及更新最大片数是否相同;
[0035] 步骤S6,若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。进行分片抢占或丢弃操作的流程可以包括:若更新最大片数大于初始最大片数,使节点放弃已经占用的分片,并重新计算更新最大片数;若更新最大片数小于初始最大片数,尝试抢占未被占用的分片,并重新计算更新最大片数。注销过程的步骤,包括关闭终端的轮休线程,关闭监听线程;放弃本地占有的所有分片,且通知业务程序;在zookeeper中删除当前节点,注销快捷、方便。
[0036] 如果初始最大片数以及更新最大片数相同,不执行新的操作,维持当前分片。在步骤S6之后,还可以持续利用监听线程持续监听节点变化和分片变化,并在发生变化后重复计算更新最大片数,并重复步骤S5和S6的流程。
[0037] 通过监听线程发现节点或者分片变化,立即进行新的max计算,判断执行分片抢占或者放弃操作;采用开箱即用的分布式任务协调方案,通过简洁的方法,提高了灵活度,降低分布式系统的构建成本。
[0038] 参阅图2,图2提供一种基于zookeeper的分布式任务协调的装置,装置包括:
[0039] 任务设定单元21,用于将待执行的任务抽象成有限个初始分片,并将有限个初始分片存储在zookeeper中。
[0040] 注册启动单元22,用于初始化zookeeper的节点,并计算初始节点允许抢占的初始最大片数。
[0041] 任务监控单元23,用于延迟启动两个监听线程,分别监听节点变化和分片变化。
[0042] 可选的,所述任务监控单元23,还用于周期性地检查当前节点所占有的分片数量是否与之前分片数量相同;若相同,不执行任何操作;若不同,触发分片抢占或丢弃操作。
[0043] 变化计算单元24,用于当监听线程发现节点或分片变化后,重新计算节点允许抢占的最大片数,得到更新最大片数。
[0044] 可选的,所述变化计算单元24,还用于判断初始分片的数量是否为初始节点的整数倍;若是,则初始最大片数为初始分片的数量相对于初始节点的数量的倍数;若否,则初始最大片数为初始分片的数量与初始节点的数量的商加1。初始最大片数max的计算伪代码可以为Max=n÷m,If(n/m>0)max++。中n为初始分片的数量,而m为初始节点的数量。
[0045] 协调分配单元25,用于判断初始最大片数以及更新最大片数是否相同;若不同,进行分片抢占或丢弃操作,并将结果通知业务程序。
[0046] 所述协调分配单元25,还可以用于周期性地检查当前节点所占有的分片数量是否与之前分片数量相同;若相同,不执行任何操作;若不同,触发分片抢占或丢弃操作。只要节点或分片其中一个有变化,就立即进行更新最大片数max’的计算,更新最大片数max’的计算方式与初始最大片数max的计算方式相同。更新最大片数max’计算步骤包括:判断变化后的分片的数量n’是否为变化后的节点m’的整数倍;若是,则更新最大片数max’为变化后的分片的数量n’相对于变化后的节点m’的倍数;若否,则更新最大片数max’为变化后的分片的数量n’与变化后的节点m’的商加1。初始最大片数max’的计算伪代码可以为Max’=n’÷m’,If(n’/m’>0)max’++。中n’为分片的数量,而m’为节点的数量。
[0047] 在本发明实施例中,基于zookeeper的分布式任务协调的装置的各单元可由相应的硬件或软件单元实现,各单元可以为独立的软、硬件单元,也可以集成为一个软、硬件单元,在此不用以限制本发明。
[0048] 图3是本发明实施例提供的一种基于zookeeper的分布式任务协调的方法的流程图;该流程包括:
[0049] 步骤S302,将待执行的任务抽象为有限个分片,并将有限个分片存储在zookeeper中;
[0050] 步骤S304,初始化zookeeper的节点,并计算初始节点抢占的初始最大片数;
[0051] 步骤S306,延迟启动两个监听线程,分别实时监听节点变化和分片变化;
[0052] 步骤S308,检测节点以及分片任一是否出现变化,若无变化,持续进行监听;
[0053] 步骤S310,若是,判断分片数量/节点数量是否为整数,
[0054] 步骤S312,若为整数,重新计算最大片数max=分片数量/节点数量;
[0055] 步骤S314,若非整数,重新计算最大片数max=分片数量/节点数量之商+1;
[0056] 步骤S316,判断重新计算的最大片数max是否与当前使用的最大片数max相同,若相同则持续监听节点变化和分片变化;
[0057] 步骤S318,若是,则进行分片抢占或丢弃操作,然后持续监听节点变化和分片变化。
[0058] 图4是本发明实施例提供的存储介质的示意图。本申请实施例还提供了一种计算机可读存储介质40,存储有计算机程序41,该计算机程序41被执行时用于实现根据上述实施例的方法。本申请所使用的存储器、存储、数据库或其它介质可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM),它用作外部高速缓冲存储器。
[0059] 图5是本发明实施例提供的计算设备的示意图。本申请实施例还提供了一种计算设备50,包括存储器51以及处理器52,存储器51存储有计算机程序53,该计算机程序53被处理器52执行时用于实现上述基于zookeeper的分布式任务协调的方法。
[0060] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。