一种业务的获取方法、装置、存储介质及计算机设备与流程

文档序号:14490739阅读:124来源:国知局
一种业务的获取方法、装置、存储介质及计算机设备与流程

本发明涉及分布式应用程序协调服务zookeeper技术,特别是涉及一种业务的获取方法、装置、存储介质及计算机设备。



背景技术:

zookeeper是一个分布式的、开放源码的分布式应用程序协调服务,是谷歌google的分布式文件系统chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点状态根据节点提交的反馈进行下一步合理操作,最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

图1为zookeeper的数据模型结构示意图,如图1所示,zookeeper数据模型的结构与unix文件系统类似,整体上可以看作是一棵树,每个节点称做一个znode,每个znode都存在其唯一的路径标识,比如图1中第三层的第一个znode,它的路径是/app1/c1。znode分为常规型节点(regularznode)和临时型节点(ephemeralznode),其中,regularznode只能通过用户的显式操作进行创建或删除,ephemeralznode可以通过用户的显式操作进行创建或删除,或在创建之后,创建该ephemeralznode的会话(session)结束,由zookeeper进行主动的删除。

当单台服务器能力不够的时候,就需要更多的服务器来进行横向扩展,通过多台服务器的分工,来实现更强的并发处理能力,更短的响应时间。多台服务器在处理任务时,会出现同一个业务被多个不同服务器分别调用,造成业务重复执行,用户得到重复结果的情况;或出现多个任务程序同时调用同一个业务造成冲突,尤其是定时任务在进行处理时,可能会因为处理数据库同一条记录造成死锁的情况。

针对在处理定时任务时出现的问题,现有的部分开源的分布式定时任务框架可以进行解决,但由于其原理复杂、封装程度较高,当定时任务框架出现问题时短时间无法解决,并且开源的分布式定时任务框架提供了较多功能,追求通用性,但是执行效率较低,使用者却无法对直接对框架进行优化,需要非常高的成本。



技术实现要素:

本发明提供一种业务的获取方法、装置、存储介质及计算机设备,用以解决现有技术中业务在执行时,出现的重复调度或调度冲突等问题。

为解决上述技术问题,一方面,本发明提供一种业务的获取方法,包括:获取预定业务对应的模值;检测预设服务器列表中与模值相同的列表号对应的服务器标识号是否与自身服务器标识号相同;在服务器标识号与自身服务器标识号相同的情况下,获取预定业务。

进一步,获取预定业务对应的模值,包括:获取预定业务的业务流水号以及当前处于工作状态的所有服务器的数量;将业务流水号与服务器的数量进行取模运算,确定预定业务对应的模值。

进一步,获取当前处于工作状态的所有服务器的数量之前,还包括:建立与zookeeper的连接;获取与zookeeper连接的服务器的信息,其中,信息至少包括服务器名称和服务器标识号;根据信息和与zookeeper连接的服务器的数量建立预设服务器列表。

进一步,根据信息和与zookeeper连接的服务器的数量建立预设服务器列表之后,还包括:检测与zookeeper连接的服务器的数量是否改变;在服务器的数量改变的情况下,根据改变后服务器的数量修改预设服务器列表。

进一步,检测与zookeeper连接的服务器的数量是否改变,包括:检测zookeeper中是否存在感知节点;在存在感知节点的情况下,在感知节点下建立子节点,其中,子节点的值为自身服务器标识号;监听感知节点的状态,其中,感知节点的状态包括:在感知节点下增加或删除子节点。

进一步,检测zookeeper中是否存在感知节点之后,还包括:在不存在感知节点的情况下,创建感知节点,并在感知节点下建立建立子节点。

另一方面,本发明还提供一种业务的获取装置,其特征在于,包括:第一获取模块,用于获取预定业务对应的模值;检测模块,用于检测预设服务器列表中与模值相同的列表号对应的服务器标识号是否与自身服务器标识号相同;第二获取模块,用于在服务器标识号与自身服务器标识号相同的情况下,获取预定业务。

进一步,第一获取模块,具体用于:获取预定业务的业务流水号以及当前处于工作状态的所有服务器的数量;将业务流水号与服务器的数量进行取模运算,确定当前业务对应的模值。

进一步,第一获取模块,具体用于:建立与分布式应用程序协调服务zookeeper的连接;获取与zookeeper连接的服务器的信息,其中,信息至少包括服务器名称和服务器标识号;根据信息和与zookeeper连接的服务器的数量建立预设服务器列表。

进一步,第一获取模块,具体用于:检测与zookeeper连接的服务器的数量是否改变;在服务器的数量改变的情况下,根据改变后服务器的数量修改预设服务器列表。

进一步,第一获取模块,具体用于:检测zookeeper中是否存在感知节点;在存在感知节点的情况下,在感知节点下建立子节点,其中,子节点的值为自身服务器标识号;监听感知节点的状态,其中,感知节点的状态包括:在感知节点下增加或删除子节点。

进一步,第一获取模块,具体用于:在不存在感知节点的情况下,创建感知节点,并在感知节点下建立建立子节点。

另一方面,本发明还提供一种存储介质,存储介质上存储有计算机程序,程序被处理器执行时实现上述的业务的获取方法。

另一方面,本发明还提供一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述的业务的获取方法。

本发明通过不同业务的业务流水号不同,计算出业务流水号对应的模值,并根据模值确定出预定业务实际应该归属哪个服务器进行处理,使服务器只需要获取自己应当处理的预定业务,不会出现多个任务在不同服务器上同时处理同一个业务的情况,解决了现有技术中业务在执行时,出现的重复调度或调度冲突等问题。

附图说明

图1是本发明现有技术中zookeeper的数据模型结构示意图;

图2是本发明第一实施例中业务的获取方法的流程图;

图3是本发明第二实施例中业务的获取装置的结构示意图。

具体实施方式

为了解决解决现有技术中业务在执行时,出现的重复调度或调度冲突等问题,本发明提供了一种业务的获取方法和存储介质,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明的第一实施例提供了一种业务的获取方法,其流程图如图2所示,具体包括步骤s201至s203:

s201,确定预定业务对应的模值;

s202,检测预设服务器列表中与模值相同的列表号对应的服务器标识号是否与自身服务器标识号相同;

s203,在服务器标识号与自身服务器标识号相同的情况下,获取预定业务。

本发明第一实施例中提供的业务获取方法的实施主体是集群中的各个服务器。各个业务的业务流水号唯一,且当前业务后续的下一个业务的业务流水号为在当前业务的业务流水号的数值上加1,以保证业务流水号的连续和唯一。

服务器在获取预定业务对应的模值时,可以首先通过获取预定业务的业务流水号以及当前处于工作状态的所有服务器的数量,随后将预定业务的业务流水号与服务器的数量进行取模运算,以确定预定业务对应的模值。优选地,由于在获取任务时,集群中每个正在工作的服务器都需要进行业务对应的模值的计算,而服务器实际获取的业务数量可能只有所有业务中的一部分,因此会造成很多不必要的计算,所以还可以布置一个用于计算预定业务对应的模值的计算设备,由该计算设备负责所有业务对应的模值计算,服务器只需要从该计算设备中直接获取模值的计算结果即可,省去了不必要的计算,进一步提升了业务获取的效率。

服务器在需要自身确定预定业务对应的模值时,获取预定业务的业务流水号,并且服务器可以获取本集群中其他服务器的工作状态,以及当前处于工作状态的所有服务器的数量。随后根据该数量值对业务流水号进行取模运算,即业务流水号作为被除数x,当前处于工作状态的所有服务器的数量值为除数y,计算出最大整数商以及余数,且该余数即为模值mod,mod的取值范围为[0,n-1]。服务器获取保存的预设服务器列表,该列表中保存有当前所有处于工作状态的服务器的服务器标识号,根据mod,获取预设服务器列表中与mod相同的列表号对应的服务器标识号,并判断该服务器标识号与自身的服务器标识号是否相同,当该服务器标识号与自身的服务器标识号相同时,服务器即确定该预定业务应该由自己进行处理,并获取该预定业务进行处理,保证了一个业务只由一个服务器进行处理,不会存在多个服务器同时处理一个业务的情况。

本实施例通过不同业务的业务流水号对应的模值不同,并根据模值确定出预定业务实际应该归属哪个服务器进行处理,使服务器只需要获取自己应当处理的预定业务,不会出现多个任务在不同服务器上同时处理同一个业务的情况,解决了现有技术中业务在执行时,出现的重复调度或调度冲突等问题。并且,本实施例的提出的业务获取方法原理简单,可以根据使用者的不同需求扩展或优化,扩展性更高。

服务器在进行获取当前处于工作状态的所有服务器的数量之前,首先应当启动zookeeper并建立服务器与zookeeper之间的连接,连接成功后,获取当前与zookeeper连接的所有服务器的信息,至少包括所有服务器的服务器名称和其对应的服务器标识号,并根据获取的信息和与zookeeper连接的服务器的数量建立预设服务器列表,在对所有服务器标识号进行排列时,可以根据服务器标识号的数值大小按顺序进行排列,或者按照服务器标识号对应的服务器连接到zookeeper的时间先后顺序进行排列。应当了解的是,预设服务器列表的列表号从0开始排列,每个列表号对应的内容至少包括服务器识别号,还可以包括服务器的名称,或系统设置的关于服务器的其他属性。进一步地,在建立预设服务器列表之后,对与zookeeper连接的服务器的数量是否改变进行实时的检测或间隔一定时间检测,在服务器的数量改变的情况下,根据改变后服务器的数量修改预设服务器列表。应当了解的是,与zookeeper连接的所有服务器中均有其自己创建的预设服务器列表,且列表内容的排列规则相同,保证所有服务器根据业务流水号判断的结果相同,不会出现冲突。例如:在所有服务器的预设服务器列表中,列表号为a对应的内容均为值为0001的服务器标识号,当服务器计算出的mod=a时,由服务器标识号为0001的服务器获取该业务进行处理。

在本实施例中,服务器通过检测zookeeper中存在的感知节点下的子节点个数,确定与zookeeper连接的服务器的数量。服务器与zookeeper连接后,检测zookeeper中是否存在感知节点,若存在感知节点,则在该感知节点下创建可以代表服务器自身的子节点,其中,子节点的值为自身服务器标识号;若不存在感知节点,则创建一个常规性节点作为感知节点,其命名可以为/timer,并在创建后在/timer下建立可以代表服务器自身的子节点,其中,子节点的值同样为自身服务器标识号;建立子节点后,监听感知节点的状态,感知节点的状态包括:在感知节点下增加或删除子节点,当感知节点的状态发生变化时,zookeeper向服务器发送节点状态变更消息,消息中包括感知节点状态的具体变化情况,如增加子节点时,增加的子节点的名称、值等信息,删除子节点时删除的是哪个子节点,该子节点的值是多少,以方便服务器对预设服务器列表的内容进行实时的修改。并且,当可以处理业务的服务器数量发生变化的时候,其他服务器处理的具体业务和业务数量也会发生变化,通过感知节点的创建以及对感知节点的监听,使服务器具备了动态扩容的能力,使整个分布式系统工作更灵活。优选地,计算设备也通过感知节点确定与zookeeper连接的服务器的数量,但计算设备无法在感知节点下建立子节点,它只能监听感知节点的状态,以获取计算模值相应的信息。

本发明的第二实施例提供了一种业务的获取装置,其结构示意图如图3所示,主要包括:第一获取模块301、检测模块302以及第二获取模块303,其中,第一获取模块301用于获取预定业务对应的模值;检测模块302用于检测预设服务器列表中与模值相同的列表号对应的服务器标识号是否与自身服务器标识号相同;第二获取模块303用于在服务器标识号与自身服务器标识号相同的情况下,获取预定业务。

本发明第二实施例中提供的业务获取装置的安装在集群中的各个服务器上。各个业务的业务流水号唯一,且当前业务后续的下一个业务的业务流水号为在当前业务的业务流水号的数值上加1,以保证业务流水号的连续和唯一。

获取装置在获取预定业务对应的模值时,可以首先通过第一获取模块301获取预定业务的业务流水号以及当前处于工作状态的所有服务器的数量,随后将预定业务的业务流水号与服务器的数量进行取模运算,以确定预定业务对应的模值。优选地,由于在获取任务时,集群中每个正在工作的服务器都需要进行业务对应的模值的计算,而服务器实际获取的业务数量可能只有所有业务中的一部分,因此会造成很多不必要的计算,所以还可以布置一个用于计算预定业务对应的模值的计算设备,由该计算设备负责所有业务对应的模值计算,获取装置只需要通过第一获取模块301从该计算设备中直接获取模值的计算结果即可,省去了不必要的计算,进一步提升了业务获取的效率。

第一获取模块301在需要自身确定预定业务对应的模值时,获取预定业务的业务流水号,并且第一获取模块301可以获取本集群中其他服务器的工作状态,以及当前处于工作状态的所有服务器的数量。随后根据该数量值对业务流水号进行取模运算,即业务流水号作为被除数x,当前处于工作状态的所有服务器的数量值为除数y,计算出最大整数商以及余数,且该余数即为模值mod,mod的取值范围为[0,n-1]。检测模块302获取保存的预设服务器列表,该列表中保存有当前所有处于工作状态的服务器的服务器标识号,根据mod,获取预设服务器列表中与mod相同的列表号对应的服务器标识号,并判断该服务器标识号与自身的服务器标识号是否相同,当该服务器标识号与自身的服务器标识号相同时,检测模块302即确定该预定业务应该由自己进行处理,并通过第二获取模块303获取该预定业务进行处理,保证了一个业务只由一个服务器进行处理,不会存在多个服务器同时处理一个业务的情况。

本实施例通过不同业务的业务流水号对应的模值不同,并根据模值确定出预定业务实际应该归属哪个服务器进行处理,使服务器只需要获取自己应当处理的预定业务,不会出现多个任务在不同服务器上同时处理同一个业务的情况,解决了现有技术中业务在执行时,出现的重复调度或调度冲突等问题。并且,本实施例的提出的业务获取方法原理简单,可以根据使用者的不同需求扩展或优化,扩展性更高。

第一获取模块301在进行获取当前处于工作状态的所有服务器的数量之前,首先应当启动zookeeper并建立服务器与zookeeper之间的连接,连接成功后,获取当前与zookeeper连接的所有服务器的信息,可以包括所有服务器的服务器名称和其对应的服务器标识号,并根据获取的信息和与zookeeper连接的服务器的数量建立预设服务器列表,在对所有服务器标识号进行排列时,可以根据服务器标识号的数值大小按顺序进行排列,或者按照服务器标识号对应的服务器连接到zookeeper的时间先后顺序进行排列。应当了解的是,预设服务器列表的列表号从0开始排列,每个列表号对应的内容至少包括服务器识别号,还可以包括服务器的名称,或系统设置的关于服务器的其他属性。进一步地,在建立预设服务器列表之后,对与zookeeper连接的服务器的数量是否改变进行实时的检测或间隔一定时间检测,在服务器的数量改变的情况下,根据改变后服务器的数量修改预设服务器列表。应当了解的是,与zookeeper连接的所有服务器中均有其自己创建的预设服务器列表,且列表内容的排列规则相同,保证所有服务器根据业务流水号判断的结果相同,不会出现冲突。例如:在所有服务器的预设服务器列表中,列表号为a对应的内容均为值为0001的服务器标识号,当服务器计算出的mod=a时,由服务器标识号为0001的服务器获取该业务进行处理。

在本实施例中,第一获取模块301通过检测zookeeper中存在的感知节点下的子节点个数,确定与zookeeper连接的服务器的数量。服务器与zookeeper连接后,检测zookeeper中是否存在感知节点,若存在感知节点,则在该感知节点下创建可以代表服务器自身的子节点,其中,子节点的值为自身服务器标识号;若不存在感知节点,则创建一个常规性节点作为感知节点,其命名可以为/timer,并在创建后在/timer下建立可以代表服务器自身的子节点,其中,子节点的值同样为自身服务器标识号;建立子节点后,监听感知节点的状态,感知节点的状态包括:在感知节点下增加或删除子节点,当感知节点的状态发生变化时,zookeeper向服务器发送节点状态变更消息,消息中包括感知节点状态的具体变化情况,如增加子节点时,增加的子节点的名称、值等信息,删除子节点时删除的是哪个子节点,该子节点的值是多少,以方便服务器对预设服务器列表的内容进行实时的修改。并且,当可以处理业务的服务器数量发生变化的时候,其他服务器处理的具体业务和业务数量也会发生变化,通过感知节点的创建以及对感知节点的监听,使服务器具备了动态扩容的能力,使整个分布式系统工作更灵活。优选地,计算设备也通过感知节点确定与zookeeper连接的服务器的数量,但计算设备无法在感知节点下建立子节点,它只能监听感知节点的状态,以获取计算模值相应的信息。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。

本发明的第三实施例还提供了一种存储介质,存储有计算机程序。可选地,在本实施例中,计算机程序被处理器执行时实现如下步骤:

s31,确定预定业务对应的模值;

s32,检测预设服务器列表中与模值相同的列表号对应的服务器标识号是否与自身服务器标识号相同;

s33,在服务器标识号与自身服务器标识号相同的情况下,获取预定业务。

本发明第三实施例中提供的存储介质安装在集群中的各个服务器上。各个业务的业务流水号唯一,且当前业务后续的下一个业务的业务流水号为在当前业务的业务流水号的数值上加1,以保证业务流水号的连续和唯一。

可选地,计算机程序在被处理器执行确定预定业务对应的模值的步骤时,具体实现如下步骤:获取预定业务的业务流水号以及当前处于工作状态的所有服务器的数量;将业务流水号与服务器的数量进行取模运算,确定预定业务对应的模值。优选地,由于在获取任务时,集群中每个正在工作的服务器都需要进行业务对应的模值的计算,而服务器实际获取的业务数量可能只有所有业务中的一部分,因此会造成很多不必要的计算,所以还可以布置一个用于计算预定业务对应的模值的计算设备,由该计算设备负责所有业务对应的模值计算,服务器只需要从该计算设备中直接获取模值的计算结果即可,省去了不必要的计算,进一步提升了业务获取的效率。

计算机程序在被处理器执行获取当前处于工作状态的所有服务器的数量的步骤之前,还被处理器执行以下步骤:建立与zookeeper的连接;获取与zookeeper连接的服务器的信息,其中,信息至少包括服务器名称和服务器标识号;根据信息和与zookeeper连接的服务器的数量建立预设服务器列表。进一步,计算机程序在被处理器执行根据信息和与zookeeper连接的服务器的数量建立预设服务器列表之后,还被处理器执行以下步骤:检测与zookeeper连接的服务器的数量是否改变;在服务器的数量改变的情况下,根据改变后服务器的数量修改预设服务器列表。

应当了解的是,计算机程序在被处理器执行检测与zookeeper连接的服务器的数量是否改变的步骤时,具体实现如下步骤:检测zookeeper中是否存在感知节点;在存在感知节点的情况下,在感知节点下建立子节点,其中,子节点的值为自身服务器标识号;监听感知节点的状态,其中,感知节点的状态包括:在感知节点下增加或删除子节点。优选地,计算机程序在被处理器执行检测zookeeper中是否存在感知节点之后,还被处理器执行以下步骤:在不存在感知节点的情况下,创建感知节点,并在感知节点下建立建立子节点。

本实施例通过不同业务的业务流水号对应的模值不同,并根据模值确定出预定业务实际应该归属哪个服务器进行处理,使服务器只需要获取自己应当处理的预定业务,不会出现多个任务在不同服务器上同时处理同一个业务的情况,解决了现有技术中业务在执行时,出现的重复调度或调度冲突等问题。并且,本实施例的提出的业务获取方法原理简单,可以根据使用者的不同需求扩展或优化,扩展性更高。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例记载的方法步骤。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

本发明第四实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现本发明第一实施例中提供的业务获取方法,在此不再详细赘述其实现过程。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

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