一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种分布式作业调度方法、装置及分布式系统与流程

2022-02-22 02:30:30 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,具体涉及一种分布式作业调度方法、装置及分布式系统。


背景技术:

2.随着当前用户量、业务量以及数据量的快速增长,软件服务功能以及数量也需要为满足各种业务需求进行扩展。传统的集中式系统是一个主机带多个终端,终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。其最大的特点就是部署结构非常简单,底层一般采用从ibm、hp等厂商购买到的昂贵的大型主机。因此无需考虑如何对服务进行多节点的部署,也就不用考虑各节点之间的分布式协作问题。但是,由于采用单机部署,很可能带来系统大而复杂、难于维护、发生单点故障(单个点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪)、扩展性差等问题。
3.随着对系统稳定性、可用性等多方面的高性能需求,分布式系统应运而生。分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样,分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,cpu、内存、存储资源等也就越多,能够处理的并发访问量也就越大。
4.分布式系统虽然相对于传统的集中式部署有较大的优势,性价比更高、处理能力更强、可靠性更高、也有很好的扩展性。但是,分布式在解决了网站的高并发问题的同时也带来了一些其他问题。例如,由于服务器在集群中分布式部署,用户的请求只会落到其中一台机器上,所以,一旦处理不好就很容易产生数据一致性问题。


技术实现要素:

5.有鉴于此,本发明实施例提供了一种分布式作业调度方法、装置及分布式系统,以解决分布式调度场景下的数据一致性问题。
6.根据第一方面,本发明实施例提供了一种分布式作业调度方法,应用于作业调度服务器,包括:当接收到下发的作业后,判断是否存在所述作业的下发锁;当不存在所述作业的下发锁时,设置所述作业的下发锁;缓存所述作业的调度信息;根据所述调度信息生成首次作业实例;当所述首次作业实例触发时设置与所述首次作业实例相对应的第一作业调度锁,并在所述第一作业调度锁设置成功后释放所述下发锁;其中,所述第一作业调度锁的第一超时时间根据所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间来确定或者所述第一作业调度锁的第一超时时间根据所述首次作业实例的完成时间来确定;获取第一服务器注册信息;根据所述第一服务器注册信息利用预设的第一负载均衡算法确定用以执行所述首次作业实例的第一执行服务器,并将所述首次作业实例下发至所述第一执行服务器。
7.本发明实施例提供的应用于作业调度服务器中的分布式作业调度方法,当分布式系统的作业调度服务器接收到下发的作业后,如果作业调度服务器中不存在作业的下发锁时,设置作业的下发锁,缓存作业的调度信息,根据调度信息生成首次作业实例,当首次作业实例触发时设置与首次作业实例相对应的第一作业调度锁,并在所述第一作业调度锁设置成功后释放所述下发锁,其中,第一作业调度锁的第一超时时间根据作业的下个作业实例的触发时间与作业的首次作业实例的触发时间来确定或者第一作业调度锁的第一超时时间根据首次作业实例的完成时间来确定。由此在首次作业实例没有被触发之前,可以利用下发锁保证该作业调度服务器中的作业调度不会被分布式系统中的其他服务器执行;在首次作业实例触发之后,可以利用第一作业调度锁保证作业调度服务器中的作业调度不会被分布式系统中的其他服务器执行,并且通过负载均衡算法确定首次作业实例的执行服务器,由此不仅可以确保分布式系统中作业调度过程中的数据一致性,还可以将作业调度和实例调度相分离,由此可以降低作业调度和作业实例调度执行的耦合性,能够更好地实现调度器资源的负载均衡。
8.结合第一方面,在第一方面第一实施方式中,应用于作业调度服务器的分布式作业调度方法还包括:根据所述调度信息生成非首次作业实例;在所述非首次作业实例触发时设置与所述非首次作业实例相对应的第二作业调度锁,其中所述第二作业调度锁的第二超时时间根据所述作业的下个作业实例的触发时间与所述作业的当前作业实例的触发时间来确定;获取第二服务器注册信息,根据所述第二服务器注册信息利用预设的第二负载均衡算法确定用以执行所述非首次作业实例的第二执行服务器,并将所述非首次作业实例下发至所述第二执行服务器。由此可以使得应用于作业调度服务器的分布式作业调度方法不仅适用于作业包含一个作业实例的情况,还适用于作业包含多个作业实例的情况。
9.结合第一方面第一实施方式,在第一方面第二实施方式中,所述第一超时时间为所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间的第一时间差加上预设的第一误差时间段;和/或,所述第一超时时间为所述首次作业实例的完成时间加上预设的第三误差时间段;和/ 或,所述第二超时时间为所述作业的下个作业实例的触发时间与所述作业的当前作业实例的触发时间的第二时间差加上预设的第二误差时间段。其中,第一误差时间段、第二误差时间段和第三误差时间段是为了防止由于时间计算误差导致的作业调度锁提前释放,由此可以保证作业调度锁在该作业的每个作业实例的执行过程中是不消失的,从而可以保证该服务器中的作业调度不会被分布式系统中的其他服务器并行执行,出现数据不一致的问题。
10.结合第一方面第一实施方式,在第一方面第三实施方式中,根据所述第一服务器注册信息利用预设的第一负载均衡算法确定用以执行所述首次作业实例的第一执行服务器包括:利用所述第一服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用所述首次作业实例的id 和当前时间戳作为关键字进行一致性hash值计算,得到第一hash值;根据所述第一hash值和所述每个服务器的hash值区间确定用以执行所述首次作业实例的第一执行服务器;和/或,根据所述第二服务器注册信息利用预设的第二负载均衡算法确定用以执行所述非首次作业实例的第二执行服务器包括:利用所述第二服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用所述非首次作业实例的id和当前时间戳作为关键字进行一致性hash值计算,得到第二hash值;根据所述第二hash值
和所述每个服务器的hash值区间确定用以执行所述非首次作业实例的第二执行服务器。
11.结合第一方面,在第一方面第四实施方式中,分布式作业调度方法还包括:获取作业的调度信息;根据所述调度信息确定所述作业的作业调度锁,其中所述作业调度锁包括第一作业调度锁和/或第二作业调度锁;根据所述作业调度锁判断所述作业的调度是否异常;当所述作业的调度异常时,获取第四服务器注册信息,根据所述第四服务器注册信息利用预设的第四负载均衡算法确定恢复该作业调度的调度恢复服务器,并将该作业下发至所述调度恢复服务器。也就是说,利用作业调度锁可以实现作业调度是否异常的判断,并在作业调度异常时实现作业调度的自动恢复。
12.结合第一方面第四实施方式,在第一方面第五实施方式中,根据所述作业调度锁判断所述作业的调度是否异常包括:判断所述作业调度锁是否存在;当所述作业调度锁不存在时,判断所述作业的调度周期是否已经完成;当所述作业的调度周期未完成时,判定所述作业的调度异常。
13.结合第一方面第四实施方式,在第一方面第六实施方式中,在将该作业下发至确定的调度恢复服务器之后,还包括:设置作业调度恢复锁;对所述作业的调度进行恢复;当所述作业的调度恢复完成或恢复失败时,释放所述作业调度恢复锁。
14.根据第二方面,本发明实施例还提供了一种分布式作业调度方法,应用于实例执行服务器,包括:当接收到下发的首次作业实例后,判断是否存在所述首次作业实例的第一实例调度锁;当不存在所述第一实例调度锁时,设置所述首次作业实例的第一实例调度锁;按照预设的第一扫描规则扫描所述首次作业实例并更新所述第一实例调度锁。
15.在本发明实施例提供的应用于实例执行服务器的分布式作业调度方法中,当第一执行服务器中不存在第一实例调度锁时,说明首次作业实例还未被分布式系统的其他服务器执行,可以在第一执行服务器中执行;此时第一执行服务器在执行所述首次作业实例时,需要设置第一实例调度锁,防止分布式系统的其他服务器执行所述首次作业实例,由此可以确保分布式系统中首次作业实例执行过程中的数据一致性。
16.结合第二方面,在第二方面第一实施方式中,应用于实例执行服务器的分布式作业调度方法还包括:当接收到下发的非首次作业实例后,判断是否存在所述非首次作业实例的第二实例调度锁;当不存在所述第二实例调度锁时,设置所述非首次作业实例的第二实例调度锁;按照预设的第二扫描规则扫描所述非首次作业实例并更新所述第二实例调度锁。也就是说,当第二执行服务器中不存在第二实例调度锁时,说明非首次作业实例还未被分布式系统的其他服务器执行,可以在第二执行服务器中执行;此时第二执行服务器在执行所述非首次作业实例时,需要设置第二实例调度锁,防止分布式系统的其他服务器执行所述非首次作业实例。由此可以确保分布式系统中非首次作业实例执行过程中的数据一致性。
17.结合第二方面,在第二方面第二实施方式中,应用于实例执行服务器的分布式作业调度方法还包括:获取所述作业的最新实例,并确定所述最新实例的实例调度锁;根据所述实例调度锁确定所述最新实例的调度是否异常;当所述最新实例的调度异常时,获取第五服务器注册信息,根据所述第五服务器注册信息利用预设的第五负载均衡算法确定恢复所述最新实例的实例恢复服务器,并将所述最新实例下发至所述实例恢复服务器。也就是说,利用实例调度锁可以实现作业实例调度是否异常的判断,并在作业实例调度异常时实
现作业实例调度的自动恢复。
18.结合第二方面第二实施方式,在第二方面第三实施方式中,所述根据所述实例调度锁确定所述最新实例的调度是否异常包括:判断所述实例调度锁是否存在;当所述实例调度锁不存在时,获取所述最新实例的当前状态;当所述最新实例的当前状态不为成功、失败和停止中之一时,判定所述最新实例的调度异常。
19.结合第二方面第二实施方式,在第二方面第四实施方式中,在将所述最新实例下发至所述实例恢复服务器之后,还包括:设置实例调度恢复锁;对所述作业实例的调度进行恢复;当所述作业实例的调度恢复完成或恢复失败时,释放所述实例调度恢复锁。
20.根据第三方面,本发明实施例还提供了一种分布式作业调度装置,应用于作业调度服务器,包括第一接收模块、下发锁模块、缓存模块、作业调度模块、作业调度锁模块、第一获取模块和实例执行服务器选择模块;第一接收模块,用于接收下发的作业;下发锁模块,在接收到下发的作业后,用于判断是否存在所述作业的下发锁;当不存在所述作业的下发锁时,设置所述作业的下发锁;缓存模块,用于缓存所述作业的调度信息;作业调度模块,用于根据所述调度信息生成首次作业实例;作业调度锁模块,当所述首次作业实例触发时,用于设置与所述首次作业实例相对应的第一作业调度锁;其中,所述第一作业调度锁的第一超时时间根据所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间来确定或者所述第一作业调度锁的第一超时时间根据所述首次作业实例的完成时间来确定;所述下发锁模块,还用于在所述第一作业调度锁设置成功后释放所述下发锁;第一获取模块,用于获取第一服务器注册信息;实例执行服务器选择模块,用于根据所述第一服务器注册信息利用预设的第一负载均衡算法确定用以执行所述首次作业实例的第一执行服务器,并将所述首次作业实例下发至所述第一执行服务器。
21.根据第四方面,本发明实施例还提供了一种分布式作业调度装置,应用于实例执行服务器,包括第二获取模块和实例调度锁模块;第二获取模块,用于接收下发的首次作业实例;实例调度锁模块,在接收到所述首次作业实例后,用于判断是否存在所述首次作业实例的第一实例调度锁,当不存在所述首次作业实例的第一实例调度锁时,设置所述首次作业实例的第一实例调度锁;按照预设的扫描规则扫描所述首次作业实例并更新所述第一实例调度锁。
22.根据第五方面,本发明实施例还提供了一种分布式系统,包括存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或第一方面任一实施方式所述的应用于作业调度服务器中的分布式作业调度方法或第二方面或第二方面任一实施方式所述的应用于实例执行服务器中的分布式作业调度方法。
23.根据第六方面,本发明实施例还提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使计算机执行第一方面或第一方面任一实施方式所述的应用于作业调度服务器中的分布式作业调度方法或第二方面或第二方面任一实施方式所述的应用于实例执行服务器中的分布式作业调度方法。
附图说明
24.通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理
解为对本发明进行任何限制,在附图中:
25.图1为本发明实施例1的作业调度服务器中分布式作业调度方法的流程示意图;
26.图2为本发明实施例1的实例执行服务器中分布式作业调度方法的流程示意图;
27.图3为本发明实施例1中客户端中分布式作业调度方法的流程示意图;
28.图4为本发明实施例1中一个具体示例的分布式作业实例下发流程示意图;
29.图5为本发明实施例2的作业调度服务器中分布式作业调度方法的流程示意图;
30.图6为本发明实施例2中一个具体示例的作业调度异常流程示意图;
31.图7为本发明实施例2中一个具体示例的作业恢复流程示意图;
32.图8为本发明实施例2的实例执行服务器中分布式作业调度方法的流程示意图;
33.图9为本发明实施例2中一个具体示例的作业实例调度异常流程示意图;
34.图10为本发明实施例2中一个具体示例的作业实例恢复流程示意图;
35.图11为本发明实施例2中一个具体示例的作业恢复和作业实例恢复的流程示意图;
36.图12为本发明实施例3的作业调度服务器中作业调度装置的结构示意图;
37.图13为本发明实施例3的实例执行服务器中作业调度装置的结构示意图。
具体实施方式
38.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.实施例1
40.本发明实施例1提供了一种分布式作业调度方法,应用于分布式系统中,本发明实施例1中所提到的分布式系统为分布式的软件系统,场景化为同一个软件服务程序分别安装部署在多台计算机中,所有安装的软件程序在功能上是完全一致的。例如,在分布式系统的多台计算机中安装部署有quartz和redis。其中,quartz为一种使用java语言开发的开源调度框架,可实现周期性和cron表达式等多种调度功能;redis为一种基于内存的key-value数据库,读写速度快,多用于做数据缓存。可以理解的,在分布式系统的多台计算机中安装部署的软件服务程序并不局限于上述的quartz 和redis。例如,redis可以使用zookeeper等其他可以实现分布式锁及信息缓存的中间件代替。
41.本发明实施例1针对分布式调度系统提出一种解决分布式调度场景下,如何实现多个作业均衡分配到分布式调度系统中各个服务器的同时,实现分布式调度过程中的数据一致性;其中,在该分布式调度系统中,采用redis 实现数据共享和分布式协调。具体的,使用redis实现分布式锁,能够实现去中心化的调度器服务间的数据同步,防止数据不一致情况。其中,分布式锁为分布式环境下,实现在多个独立进程内的多线程并发时,线程安全的一种机制或工具。
42.需要说明的是,下文的作业调度服务器和实例执行服务器均属于分布式系统中的服务器,一个服务器既可以实现作业调度服务器的功能也可以实现实例执行服务器的功能。
43.图1为本发明实施例1的作业调度服务器中分布式作业调度方法的流程示意图。如图1所示,本发明实施例1的作业调度服务器中分布式作业调度方法包括以下步骤:
44.s101:当接收到下发的作业后,判断是否存在作业的下发锁。
45.通常情况下,在web端或客户端执行作业的下发,分布式系统的任意一台服务器接收到下发的作业后,为避免作业重复下发,例如为防止由于多用户的并发操作导致的作业重复下发,首先需要判断该服务器的数据缓存例如redis中是否存在该作业的下发锁,如果该作业的下发锁存在,说明该作业的此次下发属于重复下发,流程结束;否则,设置该作业的下发锁,防止其他用户对该作业进行下发,同时可以继续该作业的后续调度操作。
46.s102:当不存在作业的下发锁时,设置作业的下发锁。
47.也就是说,当接收到下发作业的服务器中不存在下发锁时,说明该作业的调度还未被分布式系统的其他服务器执行,可以在该服务器中执行;该服务器在执行所述作业的调度时,需要设置下发锁,防止分布式系统的其他服务器执行所述作业的调度。同时,当接收到下发作业的服务器中存在下发锁时,说明该作业的调度已经被分布式系统的其他服务器执行,该服务器中的作业调度流程结束。
48.s103:缓存作业的调度信息。
49.作为进一步的实施方式,在步骤s103缓存所述作业的调度信息之前,还包括:判断该服务器中是否存在所述作业的调度信息;当不存在所述作业的调度信息时,将所述调度信息进行缓存。也就是说,如果该服务器中不存在该作业的调度信息时,可以二次确认该作业还未被分布式系统的其他服务器执行,可以在该服务器中缓存所述作业的调度信息并根据调度信息进行调度。示例的,作业的调度信息可以缓存在redis中。同时,当该服务器中存在该作业的调度信息时,可以认为该作业已经被分布式系统的其他服务器执行,该服务器中的作业调度流程结束。
50.s1041:根据所述调度信息生成首次作业实例。
51.在设置该作业的下发锁之后,可以根据设置的作业调度策略将作业添加到quartz中进行作业的调度,主要包括根据调度信息生成作业实例。
52.需要说明的是,所述作业可以包含一个作业实例也可以包含多个作业实例。当作业仅包括一个作业实例时,当将作业添加到quartz中进行作业的调度时生成一个作业实例,即首次作业实例;当作业包括至少两个作业实例时,当将作业添加到quartz中进行作业的调度时生成至少两个作业实例,即首次作业实例和非首次作业实例。其中每个作业实例可以按照预设的调度规则在不同时刻分别生成,例如在所述作业的首次调度触发后生成首次作业实例,在所述作业的第二次调度触发后生成第二作业实例,在所述作业的第三次调度触发后生成第三作业实例
……
在所述作业的第n次调度触发后生成第n作业实例,其中所述第二作业实例、所述第三作业实例和所述第n作业实例均可称为非首次作业实例。
53.s1051:当首次作业实例触发时设置与首次作业实例相对应的第一作业调度锁,并在第一作业调度锁设置成功后释放下发锁;其中,所述第一作业调度锁的第一超时时间根据所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间来确定或者所述第一作业调度锁的第一超时时间根据所述首次作业实例的完成时间来确定。
54.具体的,当所述作业仅包含一个作业实例时,所述第一作业调度锁的第一超时时间根据所述首次作业实例的完成时间来确定,例如所述第一超时时间为所述首次作业实例
的完成时间加上预设的第三误差时间段。
55.当所述作业包括多个作业实例时,所述第一作业调度锁的第一超时时间根据所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间来确定,例如所述第一超时时间为所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间的第一时间差加上预设的第一误差时间段。
56.其中,第一误差时间段和第三误差时间段是为了防止由于时间计算误差导致的第一作业调度锁提前释放,由此可以保证第一作业调度锁在该作业的首次作业实例的执行过程中是不消失的,从而可以保证该服务器中的作业调度不会被分布式系统中的其他服务器执行。第三误差时间段与第一误差时间段可以相同也可以不同。
57.通过上述步骤s101、s102、s103、s1041和s1051可以利用下发锁保证该作业调度服务器中的作业调度不会被分布式系统中的其他服务器执行;在首次作业实例触发之后,可以利用第一作业调度锁保证作业调度服务器中的作业调度不会被分布式系统中的其他服务器执行,确保分布式系统中作业调度过程中的数据一致性。
58.s1061:获取第一服务器注册信息。
59.s1071:根据所述第一服务器注册信息利用预设的第一负载均衡算法确定用以执行所述首次作业实例的第一执行服务器,并将所述首次作业实例下发至第一执行服务器。
60.进一步的,通过上述步骤s1061和s1071可以将作业调度和实例调度相分离,由此可以降低作业调度和作业实例调度执行的耦合性,能够更好地实现调度器资源的负载均衡。
61.具体的,根据所述第一服务器注册信息利用预设的第一负载均衡算法确定用以执行所述首次作业实例的第一执行服务器可以采用如下技术方案:利用所述第一服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用所述首次作业实例的id和当前时间戳作为关键字进行一致性hash值计算,得到第一hash值;根据所述第一hash值和所述每个服务器的hash值区间确定用以执行所述首次作业实例的第一执行服务器。当然,第一负载均衡算法并不局限于上述的一致性hash算法,还可以是其它的能够实现负载均衡的算法,比如普通的轮询算法、权重算法、lru算法等。需要说明的是,此处需要将首次作业实例的id和当前时间戳作为关键字进行一致性hash值计算,也就是说,关键字中包括首次作业实例的时间。由于作业中各个作业实例的触发时间并不相同,关键字中采用首次作业实例的时间可以更好的实现作业实际的均衡分布。
62.需要说明的是,在本发明实施例1中,该作业可以包含一个作业实例,也可以包含多个作业实例,当该作业包含多个作业实例时,应用于作业调度服务器分布式作业调度方法还包括以下步骤:
63.s1042:根据所述调度信息生成非首次作业实例。
64.如上所述,在所述作业的第二次调度触发后生成第二次作业实例,在所述作业的第三次调度触发后生成第三作业实例
……
在所述作业的第n次调度触发后生成第n作业实例,其中所述第二作业实例、所述第三作业实例和所述第n作业实例均可称为非首次作业实例。
65.s1052:在所述非首次作业实例触发时设置与所述非首次作业实例相对应的第二作业调度锁,其中所述第二作业调度锁的第二超时时间根据所述作业的下个作业实例的触
发时间与所述作业的当前作业实例的触发时间来确定。
66.具体的,所述第二超时时间为所述作业的下个作业实例的触发时间与所述作业的当前作业实例的触发时间的第二时间差加上预设的第二误差时间段。第二误差时间段是为了防止由于时间计算误差导致的第二作业调度锁提前释放,由此可以保证第二作业调度锁在该作业的非首次作业实例的执行过程中是不消失的,从而可以保证该服务器中的作业调度不会被分布式系统中的其他服务器执行。第二误差时间段、第三误差时间段与第一误差时间段可以相同也可以不同。
67.例如,当非首次作业实例为第二作业实例时,第二作业调度锁的第二超时时间为该作业的第二个作业实例的触发时间与该作业的第三个作业实例的触发时间的时间差加上预设的第二误差时间段。
68.在非首次作业实例触发之后,利用第二作业调度锁可以保证该服务器中的作业调度不会被分布式系统中的其他服务器执行,确保分布式系统中作业调度过程中的数据一致性。
69.通过上述步骤s101、s102、s103、s1042和s1052可以利用下发锁保证该作业调度服务器中的作业调度不会被分布式系统中的其他服务器执行;在非首次作业实例触发之后,可以利用第二作业调度锁保证作业调度服务器中的作业调度不会被分布式系统中的其他服务器执行,确保分布式系统中作业调度过程中的数据一致性。
70.s1062:获取第二服务器注册信息。
71.s1072:根据所述第二服务器注册信息利用预设的第二负载均衡算法确定用以执行所述非首次作业实例的第二执行服务器,并将所述非首次作业实例下发至第二执行服务器。
72.进一步的,通过上述步骤s1062和s1072可以将作业调度和实例调度相分离,由此可以降低作业调度和作业实例调度执行的耦合性,能够更好地实现调度器资源的负载均衡。
73.具体的,根据所述第二服务器注册信息利用预设的第二负载均衡算法确定用以执行所述非首次作业实例的第二执行服务器可以采用如下技术方案:利用所述第二服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用所述非首次作业实例的id和当前时间戳作为关键字进行一致性hash值计算,得到第二hash值;根据所述第二hash值和所述每个服务器的hash值区间确定用以执行所述非首次作业实例的第二执行服务器。当然,第二负载均衡算法并不局限于上述的一致性hash算法,还可以是其它的能够实现负载均衡的算法,比如普通的轮询算法、权重算法、lru 算法等。也就是说,关键字中包括非首次作业实例的时间。由于作业中各个作业实例的触发时间并不相同,关键字中采用非首次作业实例的时间可以更好的实现作业实际的均衡分布。
74.图2为本发明实施例1的实例执行服务器中分布式作业调度方法的流程示意图。如图2所示,本发明实施例2的实例执行服务器中的分布式作业调度方法包括以下步骤:
75.s2011:当接收到下发的首次作业实例后,判断是否存在首次作业实例的第一实例调度锁。
76.s2021:当不存在第一实例调度锁时,设置首次作业实例的第一实例调度锁。
77.s2031:按照预设的第一扫描规则扫描首次作业实例并更新第一实例调度锁。
78.在本发明实施例1中执行首次作业实例的实例执行服务器为第一执行服务器,当第一执行服务器中不存在第一实例调度锁时,说明首次作业实例还未被分布式系统的其他服务器执行,可以在第一执行服务器中执行;此时第一执行服务器在执行所述首次作业实例时,需要设置第一实例调度锁,防止分布式系统的其他服务器执行所述首次作业实例,由此可以确保分布式系统中首次作业实例执行过程中的数据一致性。
79.也就是说,第一执行服务器当接收到下发的首次作业实例后,需要判断是否存在所述首次作业实例的第一实例调度锁;当不存在所述首次作业实例的第一实例调度锁时,设置所述首次作业实例的第一实例调度锁;按照预设的扫描规则扫描所述首次作业实例并更新所述第一实例调度锁,与上述下发锁的设置过程类似,当第一执行服务器中不存在第一实例调度锁时,说明首次作业实例还未被分布式系统的其他服务器执行,可以在该服务器中执行,即在第一执行服务器中执行;此时第一执行服务器在执行所述首次作业实例时,需要设置第一实例调度锁,防止分布式系统的其他服务器执行所述首次作业实例。同时,当接收到首次作业实例的服务器中存在第一实例调度锁时,说明该首次作业实例已经被分布式系统的其他服务器执行,该服务器中的作业实例调度流程结束。
80.进一步的,应用于实例执行服务器的分布式作业调度方法包括以下步骤:
81.s2012:当接收到下发的非首次作业实例后,判断是否存在所述非首次作业实例的第二实例调度锁;
82.s2022:当不存在所述第二实例调度锁时,设置所述非首次作业实例的第二实例调度锁;
83.s2032:按照预设的第二扫描规则扫描所述非首次作业实例并更新所述第二实例调度锁。
84.在本发明实施例1中执行非首次作业实例的实例执行服务器为第二执行服务器,当第二执行服务器中不存在第二实例调度锁时,说明非首次作业实例还未被分布式系统的其他服务器执行,可以在第二执行服务器中执行;此时第二执行服务器在执行非首次作业实例时,需要设置第二实例调度锁,防止分布式系统的其他服务器执行非首次作业实例,由此可以确保分布式系统中非首次作业实例执行过程中的数据一致性。
85.也就是说,接收到非首次作业实例的执行服务器,当接收到下发的非首次作业实例后,需要判断是否存在所述非首次作业实例的第二实例调度锁;当不存在所述非首次作业实例的第二实例调度锁时,设置所述非首次作业实例的第二实例调度锁;按照预设的扫描规则扫描所述非首次作业实例并更新所述第二实例调度锁,例如,1s更新一次第二实例调度锁。与上述下发锁的设置过程类似,当第二执行服务器中不存在第二实例调度锁时,说明该非首次作业实例还未被分布式系统的其他服务器执行,可以在该服务器中执行;此时该服务器在执行所述非首次作业实例时,需要设置第二实例调度锁,防止分布式系统的其他服务器执行所述非首次作业实例。同时,当接收到非首次作业实例的服务器中存在第二实例调度锁时,说明该非首次作业实例已经被分布式系统的其他服务器执行,该服务器中的作业实例调度流程结束。
86.为了与上述在分布式系统的服务器中执行的流程相配合,在步骤s101 之前,在客户端还需要执行以下流程,图3为本发明实施例1中客户端中分布式作业调度方法的流程示意图。如图3所示,本发明实施例1客户端中的分布式作业调度方法包括以下步骤:
87.s301:当接收到作业的下发指令后,获取作业的调度信息。
88.s302:当未获取到调度信息时,获取第三服务器注册信息。
89.s303:根据第三服务器注册信息利用预设的第三负载均衡算法确定调度服务器,并将作业下发至确定的调度服务器。
90.也就是说,客户段首先从分布式系统服务器的redis中获取该作业的调度信息,如果获取到了该作业调度信息,则说明该作业已经下发过并且在调度中,此次下发属于重复下发,不需要处理并结束流程;否则,对客户端返回“作业下发中”信息并选择合适的调度服务器进行作业调度。
91.具体的,所述根据所述第三服务器注册信息利用预设的第三负载均衡算法确定调度服务器可以采用如下技术方案:利用所述第三服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用所述作业的 id和当前时间戳作为关键字进行一致性hash计算,得到第三hash值;根据所述第三hash值和所述每个服务器的hash值区间确定所述调度服务器。当然,第三负载均衡算法并不局限于上述的一致性hash算法,还可以是其它的能够实现负载均衡的算法,比如普通的轮询算法、权重算法、lru算法等。
92.为了更加清晰的说明本发明实施例1的分布式作业调度方法,给出一个包含大部分作业流程的具体示例。图4为本发明实施例1中一个具体示例的分布式作业实例下发流程示意图。
93.如图4所示,作业以及作业实例下发、调度的整体流程如下:
94.1、web端/客户端执行下发作业指令,服务端(可以理解为客户端的后台)在接收到下发指令后,首先从redis中获取该作业的调度信息,如果获取到了该作业调度信息,则说明该作业已经下发过并且在调度中,此次下发属于重复下发,不需要处理并结束流程;否则,对客户端返回“作业下发中”信息并选择合适的调度器进行作业调度。
95.2、对于步骤1中调度器的选择,采用一致性hash算法进行调度器选择分配;从redis中获取所有的调度器注册信息(主要是ip和端口),并计算每个调度器的“ip 端口”的一致性hash值;然后,将要下发调度的作业 id和当前时间戳拼接后进行一致性hash值计算,并根据上述计算的所有调度器的一致性hash值选择对应的调度器通过服务接口进行作业下发和调度。
96.3、调度器接收到下发的作业后,不会立刻去进行quartz调度;为了防止多用户操作时的并发操作导致的作业重复下发,首先判断redis中是否存在该作业的下发锁,如果该作业的下发锁存在,说明该作业此次下发属于重复下发,流程结束;否则,设置该作业的下发锁,防止其他用户对该作业进行下发,同时可以继续该作业的后续调度操作。
97.4、在设置该作业的下发锁后,再次从redis中获取该作业的调度信息,如果调度信息不存在,即可以二次确认并保证该作业可以执行正常的调度流程;将该作业调度信息缓存到redis中,并根据设置的作业调度策略将作业添加到quartz中进行作业的调度触发,当首次作业实例触发时设置与首次作业实例相对应的第一作业调度锁,并在第一作业调度锁设置成功后释放该作业在redis上的下发锁。无论下发锁是否正常释放,均能保证后续作业下发调度能够正常执行,失败时释放下发锁可以保证该作业的其它下发操作正常,正常时释放下发锁可以保证当前调度结束后,后续作业下发调度能够正常执行。
98.5、作业添加到quartz中进行调度后,保证作业能够按照设置定时规则进行作业的
调度触发;作业每次调度触发时,会生成新的调度实例(主要是新的作业实例id),同时在redis中设置该作业调度锁(锁超时时间为作业的下个作业实例的触发时间与作业的首次作业实例的触发时间的时间差 10s,其中,10s是为了防止时间计算误差导致的锁提前释放);当作业 quartz调度每次触发新实例后,会同时在redis中设置该作业实例的实例锁 (锁超时时间为30s),调度模块定时(周期为50ms)扫描作业实例并更新作业实例锁(更新锁时会重新设置超时时间为30s),由此可以保证当作业实例锁不存在时,可以判断该作业实例调度异常,从而进行作业实例的调度恢复。
99.6、作业添加到quartz中进行调度后,保证作业能够按照设置定时规则进行作业的调度触发,而每次的调度触发会生成当前作业的新实例进行实际的调度执行。由于作业下发时,一致性hash是针对作业下发时刻的hash 值计算,是为了将作业quartz调度均衡分布到不同调度器;而每个作业的调度周期和任务量不同,当触发调度新的作业实例时,如果直接将作业实例在相同的调度器上调度执行可能会造成调度资源的不均衡;因此,需要在quartz触发调度每个作业实例时,针对作业实例进行的一致性hash值计算,可以更好地实现作业实例调度均衡分布到不同调度器。
100.由此可见,本发明实施例1提供的分布式作业调度方法具有以下有益效果:
101.1、可以实现分布式环境下的调度器服务去中心化,避免调度系统单点故障
102.2、可以实现分布式调度系统的作业调度负载均衡,避免调度资源的浪费
103.3、实现作业调度和作业实例调度的分离,防止作业调度策略(分为立刻执行、简单调度、高级调度三种策略,产生的实例个数和频率不同) 影响调度资源的负载均衡。
104.实施例2
105.本发明实施例2提供了一种分布式作业调度方法,应用于分布式系统中,具体为分布式作业调度中的作业恢复过程,本发明实施例2中所提到的分布式系统为分布式的软件系统,场景化为同一个软件服务程序分别安装部署在多台计算机中,所有安装的软件程序在功能上是完全一致的。例如,在分布式系统的多台计算机安装部署有quartz和redis。其中,quartz 为一种使用java语言开发的开源调度框架,可实现周期性和cron表达式等多种调度功能;redis为一种基于内存的key-value数据库,读写速度快,多用于做数据缓存。可以理解的,在分布式系统的多台计算机中安装部署的软件服务程序并不局限于上述的quartz和redis。例如,redis可以使用 zookeeper等其他可以实现分布式锁及信息缓存的中间件代替。
106.图5为本发明实施例2的作业调度服务器中分布式作业调度方法的流程示意图。如图5所示,本发明实施例2的作业调度服务器中的分布式作业调度方法包括以下步骤:
107.s401:获取作业的调度信息。
108.s402:根据调度信息确定作业的作业调度锁,其中所述作业调度锁包括第一作业调度锁和/或第二作业调度锁。
109.s403:根据作业调度锁判断作业的调度是否异常。
110.根据所述作业调度锁判断所述作业的调度是否异常可以采用如下技术方案:判断所述作业调度锁是否存在;当所述作业调度锁不存在时,判断所述作业的调度周期是否已经完成;当所述作业的调度周期未完成时,判定所述作业的调度异常。进一步的,当所述作业调度锁存在时,判定所述作业的调度正常;或当所述作业的调度周期完成时,判定所述作
业的调度正常。
111.图6为本发明实施例2中一个具体示例的作业调度异常流程示意图,如图6所示,当作业下发到的调度服务器(也可称为调度器)之后,将调度添加到quartz按照设置的调度周期每次生成一个作业实例实际执行; quartz调度作业在每次触发作业实例时,均更新quartz作业调度锁,当作业调度锁存在时,说明作业调度正常;当作业调度锁不存在时可能存在两种情况,一种是作业quartz调度周期已完成,无下次quartz调度需要触发,另一种是作业quartz调度异常,调度锁达到超时时间自动释放。示例的,当作业调度锁的超时时间为所述作业的下个作业实例的触发时间与所述作业的非首次作业实例的触发时间的时间差加上预设的误差时间段(包括上文中的所述第一超时时间为所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间的第一时间差加上预设的第一误差时间段;和所述第二超时时间为所述作业的下个作业实例的触发时间与所述作业的非首次作业实例的触发时间的第二时间差加上预设的第二误差时间段)时,在作业调度锁不存在的情况下,需要判断redis的作业调度信息中,下次 quartz触发时间是否为空且作业调度状态为“执行中”;如果是,则说明该作业quartz调度正常,且是调度周期内最后一次quartz调度,则无需进行作业quartz调度恢复;否则,说明作业调度锁没有按照预期进行更新,也就是quartz调度异常,则需要对该作业quartz调度进行恢复。
112.s404:当作业的调度异常时,获取第四服务器注册信息,根据第四服务器注册信息利用预设的第四负载均衡算法确定恢复该作业调度的调度恢复服务器,并将该作业下发至确定的调度恢复服务器。
113.作为具体的实施方式,所述根据所述第四服务器注册信息利用预设的第四负载均衡算法确定恢复该作业调度的调度恢复服务器可以采用如下技术方案:利用所述第四服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用该作业的id和当前时间戳作为关键字进行一致性 hash计算,得到第四hash值;根据所述第四hash值和所述每个服务器的 hash值区间确定恢复该作业调度的调度恢复服务器。同样,第四负载均衡算法并不局限于上述的一致性hash算法,还可以是其它的能够实现负载均衡的算法,比如普通的轮询算法、权重算法、lru算法等。
114.进一步的,在步骤s304的将该作业下发至确定的调度恢复服务器之后,还包括:设置作业调度恢复锁;对所述作业的调度进行恢复;当所述作业的调度恢复完成或恢复失败时,释放所述作业调度恢复锁。对于作业调度恢复锁可以不设置超时时间。
115.图7为本发明实施例2中一个具体示例的作业恢复流程示意图,如图7 所示,作业quartz调度异常恢复时,负责恢复流程的服务器会首先抢占并设置作业quartz调度恢复锁,调度器持作业quartz调度恢复锁期间,对作业quartz调度进行恢复,并在恢复正常或失败时释放作业quartz调度恢复锁,以保证其他调度器可以参与作业quartz调度异常的恢复。
116.图8为本发明实施例2的实例执行服务器中分布式作业调度方法的流程示意图,如图8所示,本发明实施例2的实例执行服务器中的分布式作业调度方法包括以下步骤:
117.s501:获取作业的最新实例。
118.s502:确定最新实例的实例调度锁。
119.s503:根据实例调度锁确定最新实例的调度是否异常。
120.具体的,根据所述实例调度锁确定所述最新实例的调度是否异常可以采用如下技术方案:判断所述实例调度锁是否存在;当所述实例调度锁不存在时,获取所述最新实例的当前状态;当所述最新实例的当前状态不为成功、失败和停止中之一时,判定所述最新实例的调度异常。进一步的,当所述实例调度锁存在时,判定所述最新实例的调度正常;或,当所述最新实例的当前状态为成功、失败或停止中之一时,判定所述最新实例的调度正常。
121.图9为本发明实施例2中一个具体示例的作业实例调度异常流程示意图,如图9所示,作业quartz调度在触发点触发作业实例调度并执行,并设置实例调度锁超时时间为30s;作业实例调度执行时,启动定时任务定时轮询该作业实例的运行;当实例调度锁异常时,需要进行故障迁移。
122.s504:当最新实例的调度异常时,获取第五服务器注册信息,根据第五服务器注册信息利用预设的第五负载均衡算法确定恢复该最新实例的实例恢复服务器,并将最新实例下发至实例恢复服务器。
123.具体的,所述根据所述第五服务器注册信息利用预设的第五负载均衡算法确定恢复该最新实例的实例恢复服务器可以采用如下技术方案:利用所述第五服务器注册信息进行一致性hash计算,得到每个服务器的hash值区间;利用所述最新实例的id和当前时间戳作为关键字进行一致性hash 值计算,得到第五hash值;根据所述第五hash值和所述每个服务器的hash 值区间确定恢复该最新实例的实例恢复服务器。也就是说,关键字中包括最新作业实例的时间。由于作业中各个作业实例的触发时间并不相同,关键字中采用最新作业实例的时间可以更好的实现作业实际的均衡分布。
124.图10为本发明实施例2中一个具体示例的作业实例恢复流程示意图,如图10所示,作业实例调度异常恢复时,负责恢复流程的服务器会首先抢占并设置作业实例调度恢复锁,调度器持作业实例调度恢复锁期间,对作业实例调度进行恢复,并在恢复正常或失败时释放作业实例调度恢复锁,以保证其他调度器可以参与作业实例调度异常的恢复。
125.为了更加清晰的说明本发明实施例2的作业恢复方法,给出一个包含作业恢复和作业实例恢复的具体示例。图11为本发明实施例2中一个具体示例的作业恢复和作业实例恢复的流程示意图,如图11所示,作业恢复和作业实例恢复包括以下步骤:
126.作业(实例)故障转移及恢复流程中,主要通过判断redis中的作业调度锁和实例锁是否存在进行作业(实例)故障判断。当判断作业异常时,则对作业及其实例进行故障转移和恢复。
127.1、调度器服务启动后,同时启动定时任务用于遍历redis中缓存的所有调度信息,并根据作业信息获取对应的调度锁;如果作业调度锁存在,则表明该作业quartz调度正常,无需做任何quartz调度恢复操作;否则,可能存在两种情况,一种是作业quartz调度周期已完成,无下次quartz调度需要触发,另一种是作业quartz调度异常,调度锁达到超时时间自动释放。
128.2、对于上述调度锁不存在的情况,判断redis中作业调度信息中,下次quartz触发时间是否为空且作业调度状态为“执行中”;如果是,则说明该作业quartz调度正常,且是调度周期内最后一次quartz调度,则无需进行作业quartz调度恢复;否则,说明作业调度锁没有按照预期进行更新,也就是quartz调度异常,则需要对该作业quartz调度进行恢复。分布式环境下,多个调度器定时任务逻辑相同,是平等的,可能同时对一个作业进行quartz异常
判定,此时需要对恢复锁(作业恢复时的该作业的独占锁) 进行抢占,先抢占者根据“作业id 当前时间”进行一致性hash值计算,将作业quartz调度下发到一致性hash值对应的调度器上。
129.3、当作业调度锁正常时,需要判断作业实例调度是否正常;首先,从redis中获取该作业的最新作业实例id,并根据作业实例id判断对应的作业实例锁是否存在;当作业实例锁存在时,说明该作业实例调度锁正常更新,没出现过期调度及调度失效的情况,无需处理;否则,说明作业实例调度出现异常,无法在定时实例调度任务中定时更新作业实例锁,因此,需要对作业实例调度进行故障转移及恢复;与作业quartz调度异常恢复过程类似,只需要对“作业实例id 当前时间”进行一致性hash值计算,选择对应的调度器将作业实例下发并进行作业实例调度恢复。
130.实施例3
131.与本发明实施例1和本发明实施例2相对应,本发明实施例3提供了一种分布式作业调度装置。图12为本发明实施例3的作业调度服务器中作业调度装置的结构示意图。如图12所示,本发明实施例3作业调度服务器的作业调度装置包括第一接收模块10、下发锁模块11、缓存模块12、作业调度模块13、作业调度锁模块14、第一获取模块15和实例执行服务器选择模块16。
132.具体的,第一接收模块10,用于接收下发的作业;
133.下发锁模块11,在接收到下发的作业后,用于判断是否存在所述作业的下发锁;当不存在所述作业的下发锁时,设置所述作业的下发锁;
134.缓存模块12,用于缓存所述作业的调度信息;
135.作业调度模块13,用于根据所述调度信息生成首次作业实例;
136.作业调度锁模块14,当所述首次作业实例触发时,用于设置与所述首次作业实例相对应的第一作业调度锁;其中,所述第一作业调度锁的第一超时时间根据所述作业的下个作业实例的触发时间与所述作业的首次作业实例的触发时间来确定或者所述第一作业调度锁的第一超时时间根据所述首次作业实例的完成时间来确定;
137.所述下发锁模块11,还用于在所述第一作业调度锁设置成功后释放所述下发锁;
138.所述第一获取模块15,用于获取第一服务器注册信息;
139.所述实例执行服务器选择模块16,用于根据所述第一服务器注册信息利用预设的第一负载均衡算法确定用以执行所述首次作业实例的第一执行服务器,并将所述首次作业实例下发至所述第一执行服务器。
140.进一步的,所述作业调度模块13,还用于根据所述调度信息生成非首次作业实例;在所述非首次作业实例触发时,所述作业调度锁模块14还用于设置与所述非首次作业实例相对应的第二作业调度锁,其中所述第二作业调度锁的第二超时时间根据所述作业的下个作业实例的触发时间与所述作业的当前作业实例的触发时间来确定;所述第一获取模块15,还用于获取第二服务器注册信息;所述实例执行服务器选择模块16,还用于根据所述第二服务器注册信息利用预设的第二负载均衡算法确定用以执行所述非首次作业实例的第二执行服务器,并将所述首次作业实例下发至所述第二执行服务器。
141.图13为本发明实施例3的实例执行服务器中作业调度装置的结构示意图,如图13所示,本发明实施例3实例执行服务器中的作业调度装置包括第二获取模块20和实例调度
锁模块21。
142.具体的,第二获取模块20,用于接收下发的首次作业实例;实例调度锁模块21,在接收到所述首次作业实例后,用于判断是否存在所述首次作业实例的第一实例调度锁,当不存在所述首次作业实例的第一实例调度锁时,设置所述首次作业实例的第一实例调度锁;按照预设的扫描规则扫描所述首次作业实例并更新所述第一实例调度锁。
143.进一步的,第二获取模块20,还用于接收下发的非首次作业实例;实例调度锁模块21,在接收到所述非首次作业实例后,还用于判断是否存在所述非首次作业实例的第二实例调度锁,当不存在所述非首次作业实例的第二实例调度锁时,设置所述非首次作业实例的第二实例调度锁;按照预设的扫描规则扫描所述非首次作业实例并更新所述第二实例调度锁。
144.上述作业调度装置的具体细节可以对应参阅图1至图11所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
145.实施例4
146.本发明实施例还提供了一种分布式系统,该分布式系统可以包括处理器和存储器,其中处理器和存储器可以通过总线或者其他方式连接。
147.处理器可以为中央处理器(central processing unit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
148.存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的作业调度服务器中分布式作业调度方法对应的程序指令/模块(例如,图12所示的第一接收模块10、下发锁模块11、缓存模块12、作业调度模块13、作业调度锁模块14、第一获取模块15和实例执行服务器选择模块16)。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的分布式作业调度方法。又例如,如本发明实施例中的实例执行服务器中分布式作业调度方法对应的程序指令/模块(例如,图13所示的第二获取模块20和实例调度锁模块21)。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的作业恢复方法。
149.存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
150.所述一个或者多个模块存储在所述存储器中,当被所述处理器执行时,执行如图1~图4所示作业调度服务器中分布式作业调度方法,和/或图5~图11所示实例执行服务器中分布式作业调度方法。
151.上述分布式系统具体细节可以对应参阅图1至图13所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。
152.本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
153.虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献