发明内容
本说明书提出一种异步任务的调度方法,应用于服务器集群中的任一服务器,其中,所述服务器集群部署了分布式缓存;所述服务器预先绑定了异步任务表;所述方法包括:
扫描绑定的所述异步任务表获取待执行的异步任务ID;
将所述异步任务ID写入分布式缓存,并基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存;
如果所述异步任务ID未写入所述分布式缓存,则执行与所述异步任务ID对应的异步任务。
可选的,还包括:
确定所述服务器在所述服务器集群中的服务器编号;
针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表与所述服务器绑定。
可选的,还包括:
监听所述服务器集群中的服务器数量;
当监听到所述服务器集群中的服务器数量发生变化时,删除为所述服务器绑定的异步任务表,并重新确定所述服务器在所述服务器集群中的服务器编号;以及,
针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表重新与所述服务器绑定。
可选的,所述针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,包括:
针对异步任务表的总表数与所述服务器的编号进行取模运算;
将所述取模运算结果对应的取值确定为与所述服务器绑定的异步任务表ID。
可选的,所述写缓存结果为所述异步任务ID在所述分布式缓存中的写入次数;
所述基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存,包括:
获取所述分布式缓存返回的所述异步任务ID在所述分布式缓存中的写入次数;
确定所述写入次数是否大于1;
如果所述写入次数大于1,确定所述异步任务ID已写入所述分布式缓存;
如果所述写入次数小于或者等于1,确定所述异步任务ID未写入所述分布式缓存。
可选的,写入所述分布式缓存的异步任务ID被配置了缓存有效时长;其中,当写入所述分布式缓存的任一异步任务ID的缓存有效时长超时时,则从所述分布式缓存中删除所述异步任务ID。
可选的,还包括:
如果所述异步任务ID已写入所述分布式缓存,则丢弃与所述异步任务ID对应的异步任务。
本说明书还提出一种异步任务的调度装置,应用于服务器集群中的任一服务器,其中,所述服务器集群部署了分布式缓存;所述服务器预先绑定了异步任务表;所述装置包括:
获取模块,扫描绑定的所述异步任务表获取待执行的异步任务ID;
写入模块,将所述异步任务ID写入分布式缓存,并基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存;
执行模块,如果所述异步任务ID未写入所述分布式缓存,则执行与所述异步任务ID对应的异步任务。
可选的,还包括:
绑定模块,确定所述服务器在所述服务器集群中的服务器编号;针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表与所述服务器绑定。
可选的,所述绑定模块进一步:
监听所述服务器集群中的服务器数量;当监听到所述服务器集群中的服务器数量发生变化时,删除为所述服务器绑定的异步任务表,并重新确定所述服务器在所述服务器集群中的服务器编号;以及,针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表重新与所述服务器绑定。
可选的,所述绑定模块进一步:
针对异步任务表的总表数与所述服务器的编号进行取模运算;
将所述取模运算结果对应的取值确定为与所述服务器绑定的异步任务表ID。
可选的,所述写缓存结果为所述异步任务ID在所述分布式缓存中的写入次数;
所述写入模块:
获取所述分布式缓存返回的所述异步任务ID在所述分布式缓存中的写入次数;确定所述写入次数是否大于1;如果所述写入次数大于1,确定所述异步任务ID已写入所述分布式缓存;如果所述写入次数小于或者等于1,确定所述异步任务ID未写入所述分布式缓存。
可选的,写入所述分布式缓存的异步任务ID被配置了缓存有效时长;其中,当写入所述分布式缓存的任一异步任务ID的缓存有效时长超时时,则从所述分布式缓存中删除所述异步任务ID。
可选的,还包括:
丢弃模块,如果所述异步任务ID已写入所述分布式缓存,则丢弃与所述异步任务ID对应的异步任务。
本说明书还提出一种电子设备,包括:
处理器;
用于存储机器可执行指令的存储器;
其中,通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器被促使:
扫描绑定的所述异步任务表获取待执行的异步任务ID;
将所述异步任务ID写入分布式缓存,并基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存;
如果所述异步任务ID未写入所述分布式缓存,则执行与所述异步任务ID对应的异步任务。
通过以上技术方案,可以有效的防止在服务器集群中并发执行相同的异步任务。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在实际应用中,通常可以在分布式系统中引入异步处理机制,通过在系统中增加异步任务来对系统进行解耦。所谓异步任务,是指在存在多个任务的情况下,一个任务A正在执行,同时可以执行另一个任务B,任务B不用等待任务A结束才执行。
通过引入异步任务,虽然可以实现系统之间的解耦,但伴随而来的问题是,异步任务在处理过程中,如果异步任务被并发执行,可能会导致非常严重的后果;例如,以分布式的支付系统为例,如果异步处理的支付任务被并发执行,则可能出现同一用户订单被执行多次,而对用户造成资金损失。
因此,通过在分布式系统中引入异步任务来对系统进行解耦的场景下,控制异步任务的并发,也是必不可少的一环。
本说明书则旨在提出一种在分布式系统中引入异步任务来对系统进行解耦的场景下,控制异步任务的并发的技术方案。
在实现时,可以为分布式系统的服务器集群中的服务器,分别绑定一个异步任务表;
例如,当一台服务器加入分布式系统的服务器集群时,可以为确定服务器在所述服务器集群中的服务器编号,针对该服务器编号进行映射计算得到待绑定的异步任务表ID,然后将与该异步任务表ID对应的异步任务表与该服务器绑定。
在上述服务器集群中可以预先部署分布式缓存;而对于服务器集群的服务器而言,可以通过扫描绑定的异步任务表来获取待执行的异步任务ID,然后将该异步任务写入上述分布式缓存,然后基于该分布式缓存返回的写缓存结果,来确定该异步任务ID是否与已经写入了上述分布式缓存。
如果上述异步任务ID未写入分布式缓存,则可以继续执行与上述异步任务ID对应的异步任务。如果上述异步任务ID已经写入分布式缓存,则可以直接丢弃该异步任务ID对应的异步任务。
通过以上技术方案,一方面,通过为服务器集群中的服务器分别绑定异步任务表,可以隔离每台服务器所执行的异步任务,从而在源头确保服务器集群中的各服务器无法执行相同的异步任务,有效防止不同的服务器之间并发执行相同的异步任务;
另一方面,通过在服务器集群中部署分布式缓存,并通过将服务器集群中的服务器从绑定的异步任务表中读取到的异步任务ID写入分布式缓存的写缓存结果,来判定该异步任务ID是否已写入上述分布式缓存,并在该异步任务ID未写入上述分布式缓存的情况下,再执行与该异步任务ID对应的异步任务,不仅可以提升服务器的异步任务处理性能,还可以有效的防止单台服务器并发执行相同的异步任务。
下面通过具体实施例并结合具体的应用场景对本说明书进行描述。
请参考图1,图1是本说明书一实施例提供的一种异步任务的调度方法,应用于服务器集群中的任一服务器,其中,所述服务器集群部署了分布式缓存;所述服务器预先绑定了异步任务表;执行以下步骤:
步骤102,扫描绑定的所述异步任务表获取待执行的异步任务ID;
步骤104,将所述异步任务ID写入分布式缓存,并基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存;
步骤106,如果所述异步任务ID未写入所述分布式缓存,则执行与所述异步任务ID对应的异步任务。
在本说明书中,上述服务器集群泛指用于搭建分布式系统,面向分布式系统提供底层的服务支撑的多台服务器构成的服务器集群。在实际应用中,可以通过在上述服务器集群上述搭载分布式系统的服务框架,来搭建分布式系统。
其中,上述分布式系统所采用的服务框架,在本说明书中不进行特别限定,本领域技术人员可以基于实际的业务需求灵活的进行选择。
以下将以上述分布式系统为基于ZooKeeper服务框架的分布式系统为例进行说明。
需要强调的是,在本说明书中以基于ZooKeeper服务框架的分布式系统为例,仅为示例性的;显然,在实际应用中,也可以采用其它形式的服务器框架,来等同实施本说明书中记载的技术方案。
请参见图2,图2为本说明书示出的一种基于ZooKeeper服务框架的分布式系统的架构图。
如图2所示,在基于ZooKeeper服务框架的分布式系统中,组成该分布式系统的服务器集群中,可以包括一内部选举出的作为leader节点的服务器(以下简称leader服务器),以及若干作为follow节点的服务器(以下简称follow服务器)。
其中,leader服务器的选举过程,在本说明书中不再进行详述,本领域技术人员在将本说明书的技术方案付诸实现时,可以参考相关技术中的记载。
follow服务器,负责接收来自用户客户端的事务请求,将来自用户客户端的事务请求统一提交至leader服务器。
leader服务器,负责响应follow服务器提交的事务请求,对follow服务器提交的事务请求进行事务处理。
其中,在ZooKeeper服务框架下,leader服务器响应follow服务器提交的事务请求的具体过程,本说明书中不再进行详述,本领域技术人员在将本说明书的技术方案付诸实现时,可以参考相关技术中的记载;
例如,在ZooKeeper服务框架下,leader服务器可以对各个follow服务器提交的事务请求进行排序、编号、执行,然后基于执行结果更新系统状态。各个follow服务器可以从leader服务器同步系统状态,以保证各个follow服务器具有与leader服务器相同的事务状态。
请参见图3,图3为本说明书中示出的一种在ZooKeeper服务框架下的异步任务的并发控制的流程图。
如图3所示,对于想要加入服务器集群的服务器而言,可以预先安装ZooKeeper系统。当ZooKeeper系统启动后,可以向leader服务器提交一个注册请求发起节点注册,请求注册为ZooKeeper服务框架下的follow节点。而leader服务器可以响应收到的注册请求,完成针对该服务器的注册流程。当注册完成后,该服务器将作为follow服务器加入到服务器集群。
在本说明书中,leader服务器还可以周期性的对当前服务器集群中的服务器数量进行监听。当服务器作为follow服务器成功加入到服务器集群后,leader服务器还可以基于监听到的当前服务器集群中的服务器数量,为该新加入的该服务器设置服务器编号;
其中,leader服务器为新加入的服务器进行编号的方式,在本说明书中不进行特别限定;
例如,在一种实施方式中,leader服务器可以将当前集群中的服务器,按照IP地址进行排序,然后基于排序后的顺序,为新加入的服务器生成服务器编号。
其中,需要补充说明的是,当上述服务器集群中某一服务器下线,或者服务器集群中加入了新的服务器导致服务器集群中的服务器节点数量发生变化,此时leader服务器为部分服务器设置的服务器编号可能也会适应性的发生变化;
例如,仍以leader服务器按照各服务器的IP地址进行排序,然后基于排序后的顺序,为服务器生成服务器编号为例,当服务器集群中的某一服务器下线,或者服务器集群中加入了新的服务器,导致以上排序发生了变化,那么在以上排序中的位置发生变化的服务器的服务器编号,也会适应性的发生变化。
请继续参见图3,当为新加入的服务器生成服务器编号之后,后续leader服务器可以进一步为该新加入的服务器绑定一个异步任务表。
其中,上述异步任务表用于维护加入服务器集群的服务器可执行的异步任务。leader服务器为服务器集群中的各服务器分别绑定异步任务表中,所包含的异步任务可以不互相冲突;即对于服务器集群中的服务器而言,各自绑定的异步任务表中的异步任务,可以彼此没有重复。
通过这种方式,可以有效防止不同的服务器之间并发执行相同的异步任务。
在示出的一种实施方式中,为新加入的服务器绑定异步任务表时,leader服务器具体可以针对该新加入的服务器的服务器编号进行映射计算,来得到需要与该服务器对应的待绑定的异步任务表ID。
其中,新加入的服务器的服务器编号进行映射计算的具体算法,在本说明书中也不进行特别限定;
在示出的一种实施方式中,当leader服务器为新加入的服务器生成了服务器编号后,可以针对服务器集群中当前可以执行的异步任务表的总表数与该新加入的服务器的编号进行取模运算(mod运算),然后将取模运算的结果对应的取值,确定为与该新加入的服务器绑定的异步任务表ID。
其中,服务器集群中当前可以执行的异步任务表的总表数,在本说明书中不进行特别限定,在实际应用中,具体可以基于需要在上述服务器集群中执行的异步任务的总数来进行确定;
例如,在一种实现方式中,可以将需要在上述服务器集群中执行的异步任务汇总为一张异步任务总表,然后按照当前服务器集群中的服务器数量,对该异步任务总表进行分表处理,将该异步任务总表划分成,与服务器集群中的服务器数量相同的多张异步任务表。,
请继续参见图3,当leader服务器通过以上的映射计算过程,为新加入的服务器计算出了待绑定的异步任务表ID后,leader服务器可以将与该异步任务表ID对应的异步任务表与该服务器进行绑定,并在本地维护该绑定关系;
例如,以leader服务器按照服务器集群中的服务器数量,将需要在上述服务器集群中执行的异步任务划分成若干张异步任务表为例,一方面,leader服务器可以对划分出的各异步任务表分配异步任务表ID。另一方面,当为新加入的服务器计算出了待绑定的异步任务表ID后,可以从已经划分出的各异步任务表中查找出与该异步任务表ID对应的异步任务表,然后将该异步任务表与上述服务器进行绑定。
请继续参见图3,当为follow服务器绑定了异步任务表后,该follow服务器可以扫描该异步任务表,来获取待执行的异步任务ID,进而来执行与该异步任务ID对应的异步任务。
在实际应用中,对于follow服务器而言,通常会启动多个线程来并行的执行任务;例如,follow服务器可以启用一个线程池,可以将待执行的任务组织成队列,然后利用在线程池中创建的线程来执行队列中的任务。
为了避免follow服务器在多线程的执行环境下,并发的执行绑定的异步任务表中的异步任务,上述服务器集群中可以预先部署分布式缓存,follow服务器可以采用将从绑定的异步任务表中扫描到的异步任务ID写入分布式缓存,并基于该异步任务ID是否已经写入分布式缓存的写缓存结果,来决策是否需要执行该异步任务ID对应的异步任务。
在示出的一种实施方式中,当follow服务器通过扫描异步任务表,获取到待执行的异步任务ID后,可以发起将该异步任务ID写入上述分布式缓存的操作,然后基于分布式缓存返回的写缓存结果,来确定该异步任务ID是否已经写入了分布式缓存,进而来决策是否要执行该异步任务。
其中,服务器向分布式缓存发起写缓存操作后,分布式缓存返回的写缓存结果,通常为写入的内容在分布式缓存中的写入次数。
例如,分布式缓存在收到要写入的内容后,可以确定缓存中是否已写入了该内容;如果没有,分布式缓存可以将该内容写入分布式缓存,并将该内容的写入次数更新为1,然后向写入发起方返回一个写入次数为1的写缓存结果,表示该内容已成功写入分布式缓存;如果该内容在此之前已经写入了分布式缓存,该内容的写入次数为1,此时分布式缓存可以将该写入次数更新为2,然后向写入发起方返回一个写入次数为2的写缓存结果,表示该内容已经第二次写入分布式缓存。
在这种情况下,当follow服务器发起将该异步任务ID写入上述分布式缓存的操作后,分布式缓存可以向该follow服务器返回该异步任务ID在分布式缓存中的写入次数。
而该follow服务器收到该异步任务ID在分布式缓存中的写入次数后,可以确定该写入次数是否大于1;如果写入次数小于或者等于1,可以确定该异步任务ID未被写入分布式缓存;其中,该异步任务ID未被写入分布式缓存,表明该异步任务当前并没有正在被该follow服务器的其它线程所占用和执行,此时该follow服务器可以立即在线程池中创建一个线程,利用该线程来执行该异步任务。
相反,如果写入次数大于1,可以确定该异步任务ID已经被写入分布式缓存;在这种情况下,表明该异步任务当前可能正在被该follow服务器的其它线程所占用和执行,此时该follow服务器可以直接对该异步任务ID对应的异步任务进行丢弃处理。
通过这种方式,由于一旦分布式缓存中已写入了follow服务器从绑定的异步任务表中扫描到的待执行的异步任务ID,follow服务器会直接对该异步任务ID对应的异步任务采取丢弃处理;因此,可以有效避免当该待执行的异步任务ID对应的异步任务,正在被其它线程占用和执行时,follow服务器在线程池中创建新的线程,来并发执行与该待执行的异步任务ID对应的异步任务。
在示出的一种实施方式中,对于写入上述分布式缓存的异步任务ID,还可以配置缓存有效时长。一旦已经写入分布式缓存中的任一异步任务ID的缓存有效时长超时后,可以立即从分布式缓存中将该异步任务ID删除。
通过这种方式,一方面,由于在写入分布式缓存的异步任务ID的缓存有效时长超时后,可以立即将该异步任务ID作为过期任务,从分布式缓存中移除,因而可以充分利用分布式缓存的缓存空间;另一方面,由于分布式缓存中写入的异步任务ID设置了缓存有效时长,因而对于正在执行异步任务的follow服务器而言,如果该follow服务器突然下线,导致该异步任务未处理完成,该异步任务在缓存有效时长超时后,会自动失效从分布式缓存移除,从而对于该异步任务来说,可以正常的回流至异步任务表,由其它的follow服务器重新进行执行,不会造成由于该异步任务ID一直处于“已写入状态”导致该异步任务无法被其它follow服务器执行的问题。
其中,需要说明的是,上述缓存有效时长的具体取值,在本说明书中不进行特别限定,在实际应用中,可以基于实际需求进行设定;
例如,在一种方式中,上述缓存有效时长的具体取值,可以基于集群的性能来确定。在实现时,可以基于上述服务器集群平均处理完一个异步任务所需的最大时长,来设置缓存的有效时长;比如,将上述缓存有效时长设置为一个大于这个最大时长的取值。
在本说明书中,leader服务器在周期性监听当前服务器集群中的服务器数量变化的过程中,如果确定当前服务器集群中的服务器数量发生了变化,比如当前服务器集群中的follow服务器因为故障或者其它原因下线,或者当前服务集群中又新加入了服务器,此时leader服务器首先可以删除为各follow服务器绑定的异步任务表。
进一步的,leader服务器还可以为节点数量发生变化后的服务器集群中的各个follow服务器,重新设置服务器编号,然后针对重新设置的服务器编号进行映射计算,得到待绑定的异步任务表ID,并将重新计算出的异步任务表ID对应的异步任务表,与各follow服务器重新井进行绑定,对各follow服务器原有的与异步任务表之间的绑定关系进行更新。
例如,如果leader服务器确定当前服务器集群中的服务器数量发生了变化,leader服务器可以节点数量发生变化后的服务器集群中的各follow服务器,按照IP地址重新进行排序,然后基于重新排序后的顺序,为各follow服务器生成服务器编号。进一步的,可以基于重新生成的服务器编号,重新进行映射计算,为各follow服务器计算出待绑定的异步任务表ID,然后将与该异步任务表ID对应的异步任务表与各follow服务器重新进行绑定,具体的实施过程可以参考以上实施例中的描述,不再赘述。
通过这种方式,可以在服务器集群中的服务器数量发生变化时,立即删除原来绑定的异步任务表,并触发为各服务器重新绑定异步任务表,进而可以避免由于没有及时清楚原来绑定的异步任务表,导致的将同一异步任务表绑定至多个follow服务器,而造成的多个follow服务器仍然可能并发执行一个相同的异步任务的概率。
其中,需要强调的是,由于leader服务器在监听到服务器集群中的服务器数量发生了变化,会触发为各服务器重新绑定异步任务表,而对于部分原有的follow服务器而言(即除了新加入的以及下线的服务器以外的服务器节点),当前可能在线程池中正在执行一些从原来绑定的异步任务表中扫描到的异步任务ID对应的异步任务;因此,针对这种情况,follow服务器可以立即将线程池中正在执行的异步任务全部丢弃,然后将这些未执行完毕的异步任务回流至异步任务表。通过这种方式,可以避免由于原来绑定的异步任务表中的部分异步任务,仍然在线程池中正在执行没有及时清除,而造成的异步任务并发执行的问题。
通过以上技术方案可见,一方面,通过为服务器集群中的服务器分别绑定异步任务表,可以隔离每台服务器所执行的异步任务,从而在源头确保服务器集群中的各服务器无法执行相同的异步任务,有效防止不同的服务器之间并发执行相同的异步任务;
另一方面,通过在服务器集群中部署分布式缓存,并通过将服务器集群中的服务器从绑定的异步任务表中读取到的异步任务ID写入分布式缓存的写缓存结果,来判定该异步任务ID是否已写入上述分布式缓存,并在该异步任务ID未写入上述分布式缓存的情况下,再执行与该异步任务ID对应的异步任务,不仅可以提升服务器的异步任务处理性能,还可以有效的防止单台服务器并发执行相同的异步任务。
与上述方法实施例相对应,本说明书还提供了一种异步任务的调度装置的实施例。本说明书的异步任务的调度装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。
从硬件层面而言,如图4所示,为本说明书的异步任务的调度装置所在电子设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
图5是本说明书一示例性实施例示出的一种异步任务的调度装置的框图。
请参考图5,所述异步任务的调度装置50可以应用在前述图4所示的电子设备中,包括有:获取模块501、写入模块502、和执行模块503;
获取模块501,扫描绑定的所述异步任务表获取待执行的异步任务ID;
写入模块502,将所述异步任务ID写入分布式缓存,并基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存;
执行模块503,如果所述异步任务ID未写入所述分布式缓存,则执行与所述异步任务ID对应的异步任务。
在本实施例中,还包括:
绑定模块504(图5中未示出),确定所述服务器在所述服务器集群中的服务器编号;针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表与所述服务器绑定。
在本实施例中,所述绑定模块504进一步:
监听所述服务器集群中的服务器数量;当监听到所述服务器集群中的服务器数量发生变化时,删除为所述服务器绑定的异步任务表,并重新确定所述服务器在所述服务器集群中的服务器编号;以及,针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表重新与所述服务器绑定。
在本实施例中,所述绑定模块504进一步:
针对异步任务表的总表数与所述服务器的编号进行取模运算;
将所述取模运算结果对应的取值确定为与所述服务器绑定的异步任务表ID。
在本实施例中,所述写缓存结果为所述异步任务ID在所述分布式缓存中的写入次数;
所述写入模块502:
获取所述分布式缓存返回的所述异步任务ID在所述分布式缓存中的写入次数;确定所述写入次数是否大于1;如果所述写入次数大于1,确定所述异步任务ID已写入所述分布式缓存;如果所述写入次数小于或者等于1,确定所述异步任务ID未写入所述分布式缓存。
在本实施例中,写入所述分布式缓存的异步任务ID被配置了缓存有效时长;其中,当写入所述分布式缓存的任一异步任务ID的缓存有效时长超时时,则从所述分布式缓存中删除所述异步任务ID。
在本实施例中,还包括:
丢弃模块505(图5中未示出),如果所述异步任务ID已写入所述分布式缓存,则丢弃与所述异步任务ID对应的异步任务。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
与上述方法实施例相对应,本说明书还提供了一种服务器的实施例。该服务器包括:处理器以及用于存储机器可执行指令的存储器;其中,处理器和存储器通常通过内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。
在本实施例中,该服务器所在的服务器集群部署了分布式缓存;该服务器预先绑定了异步任务表;
通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器被促使:
扫描绑定的所述异步任务表获取待执行的异步任务ID;
将所述异步任务ID写入分布式缓存,并基于所述分布式缓存返回的写缓存结果确定所述异步任务ID是否已写入所述分布式缓存;
如果所述异步任务ID未写入所述分布式缓存,则执行与所述异步任务ID对应的异步任务。
在本实施例中,通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器还被促使:
确定所述服务器在所述服务器集群中的服务器编号;
针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表与所述服务器绑定。
在本实施例中,通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器还被促使:
监听所述服务器集群中的服务器数量;
当监听到所述服务器集群中的服务器数量发生变化时,删除为所述服务器绑定的异步任务表,并重新确定所述服务器在所述服务器集群中的服务器编号;以及,
针对所述服务器编号进行映射计算得到待绑定的异步任务表ID,并将与所述异步任务表ID对应的异步任务表重新与所述服务器绑定。
在本实施例中,通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器还被促使:
针对异步任务表的总表数与所述服务器的编号进行取模运算;
将所述取模运算结果对应的取值确定为与所述服务器绑定的异步任务表ID。
在本实施例中,所述写缓存结果为所述异步任务ID在所述分布式缓存中的写入次数;
通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器还被促使:
获取所述分布式缓存返回的所述异步任务ID在所述分布式缓存中的写入次数;
确定所述写入次数是否大于1;
如果所述写入次数大于1,确定所述异步任务ID已写入所述分布式缓存;
如果所述写入次数小于或者等于1,确定所述异步任务ID未写入所述分布式缓存。
在本实施例中,通过读取并执行所述存储器存储的与异步任务的调度的控制逻辑对应的机器可执行指令,所述处理器还被促使:
如果所述异步任务ID已写入所述分布式缓存,则丢弃与所述异步任务ID对应的异步任务。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。