分布式系统中的任务处理方法和装置的制造方法_2

文档序号:9672974阅读:来源:国知局

[0049]图8为本申请另一个实施例提供的另一种分布式系统中的任务处理装置的结构框图;
[0050]图9为本申请另一个实施例提供的另一种分布式系统中的任务处理装置的结构框图;
[0051]图10为本申请实施例四提供的第一判断模块的一种结构框图。
【具体实施方式】
[0052]本申请实施例提供了分布式系统中的任务处理方法和装置。本申请实施例所涉及的技术方案的核心在于,利用存活状态(存活状态包括存活和死亡)向任务处理器(或任务进程)指示某任务是否正在被其它任务处理器(或任务进程)处理。基于存活状态,当分布式系统中的一个任务处理器(或任务进程)正在处理某任务时,该任务的存活状态就会标记为存活,此时,如果有其它的任务处理器(或任务进程)也想要处理该任务,根据存活状态就可以确定该任务为存活,进而就不会再去处理该任务。当该任务处理器(或任务进程)处理完该任务时,该任务的存活状态就会标识为死亡,此时,如果有其它的任务处理器(或任务进程)也想要处理该任务,根据存活状态就可以确定该任务为死亡,就可以处理该任务。
[0053]首先参考图1,图1示意性地示出了本申请的实施方式可以在其中实施的示例性应用场景。其中,当业务A被迫中断时,管理服务器10会将业务A对应的任务21存储到一个任务队列30中,并将业务A在中断前的业务数据22保存到存储服务器41上,以及将任务21的当前存活状态211保存到存储服务器42上(此时,由于任务21没有被任何一个任务处理器处理,因此,任务21的当前存活状态211被标记为死亡)。在此之后,当任务服务器51在触发下从任务队列30中的提取任务21并启动了任务21时,任务处理器51从存储服务器42中读取任务21的当前存活状态211,当确定当前存活状态211为死亡时,先将任务21的当前存活状态211从死亡标记为存活,再从存储服务器41中读取业务A在中断前的业务数据22,并基于业务数据22处理任务21。在任务处理器51处理任务21的过程中,如果任务处理器52也在触发下启动从任务队列30中提取任务21并启动了任务21,任务处理器52先从存储服务器42读取任务21的当前存活状态211,此时,由于确定出当前存活状态211为存活,因此,任务处理器52不会对任务21进行处理。当任务处理器51对任务21处理完毕后,任务处理器51再将任务21的当前存活状态211从存活重新标记为死亡。
[0054]管理服务器10可以是Web服务器,也可以是其他类型的服务器,例如APP服务器。任务处理器51和52还可以是任务进程。本领域技术人员可以理解,图1所示的示意图仅是本申请的实施方式可以在其中得以实现的一个示例。本申请实施方式的应用范围不受到该框架任何方面的限制。
[0055]为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例进行详细描述。
[0056]方法实施例
[0057]请参阅图2,其为本申请一个实施例提供的一种分布式系统中的任务处理方法的流程图,所述分布式系统包括多个任务处理器,该方法包括以下步骤:
[0058]步骤201:所述多个任务处理器中的任一任务处理器在启动任务之后且处理所述任务之前,判断所述任务的当前存活状态是否为存活,如果是,进入步骤202,否则,进入步骤 203。
[0059]在本申请的一个优选实施方式中,读取保存在存储服务器中的用于指示所述任务的当前存活状态的标识,所述存活状态包括存活和死亡;根据所述标识确定所述任务的当前存活状态是否为存活。
[0060]具体地,可以将该任务的任务名以及当前存活状态的标识以映射关系保存在存储服务器上,以便先根据任务名找到对应的当前存活状态的标识,然后再从存储服务器中读取该标识。
[0061]步骤202:不处理所述任务,结束流程。
[0062]步骤203:先将所述任务的当前存活状态从死亡标记为存活,再处理所述任务,并在处理完所述任务后,将所述任务的当前存活状态从存活标记为死亡,结束流程。
[0063]需要说明的是,上述“任务”可以是一个任务,也可以是同一个业务类型下的多个任务。
[0064]在申请的另一个优选实施方式中,每种类型下的任务在所述存储服务器上保存唯个所述标识。
[0065]另外,如果是由工作人员触发重新处理中断“业务”对应的任务,考虑到工作人员往往并不能及时进行触发,就会影响到“业务”处理的实时性。特别是某些对于实时性要求比较高的“业务”,对于延迟几乎是无法容忍的。
[0066]因此,在本申请的一个优选实施方式中,如图3所示,在启动任务之前,判断预设的工作周期是否到达,如果到达,自动启动所述任务,如果没有到达,不启动所述任务(并继续判断预设的工作周期是否到达)。
[0067]可以理解的,作为一种替换方案,各任务处理器(或任务进程)并不是在工作人员的触发下启动并处理各中断“业务”对应的任务,而是每隔一定的时间段就自动启动中断“业务”对应的任务,从而保证“业务”处理的实时性。
[0068]需要说明的是,在本申请的技术方案中,并不限定工作周期的具体长度。工作周期的长度可以由业务类型决定,即,对于实时性处理要求越高的业务,工作周期的长度越短,反之,对于实时性处理要求越低的业务,工作周期的长度越长。另外,各个任务处理器(或任务进程)之间的工作周期可以是同步的,但是,为了避免竞争,更优选的方式是不同步。
[0069]由上述实施例可以看出,与现有技术相比,本申请技术方案的优点在于:
[0070]当分布式系统中的一个任务处理器(或任务进程)正在处理某任务时,该任务的存活状态就会标记为存活,此时,如果有其它的任务处理器(或任务进程)也想要处理该任务,根据存活状态就可以确定该任务为存活,进而就不会再去处理该任务。当该任务处理器(或任务进程)处理完该任务时,该任务的存活状态就会标识为死亡,此时,如果有其它的任务处理器(或任务进程)也想要处理该任务,根据存活状态就可以确定该任务为死亡,就可以处理该任务。保证多个任务服务器(或任务进程)不会重复处理同一个任务,进而也保证了业务数据的幂等性。
[0071]如果任务处理器(或任务进程)在处理任务的过程中突然发生故障,如,任务处理器突然断电,或者任务进程突然崩溃,就无法及时更新任务的当前存活状态,即,任务将一直处于存活状态。在这种情况下,其它任务处理器(或处理进程)将无法继续处理该任务。为了解决这个问题,在实施例一的步骤203中,在将任务的当前存活状态从死亡标记为存活后,所述多个任务处理器中的任一任务处理器还需要被设置为定时更新所述任务的当前存活时间。
[0072]其中,在存储服务器中,不仅保存有任务的任务名以及当前存活状态的标识,还保存有任务的当前存活时间,并且任务的当前存活时间是实时更新的。
[0073]当存储服务器中保存有任务的当前存活时间时,分布式系统中的任意一个或任意多个任务服务器(任务进程)就可以根据任务的当前存活时间对该任务进行定时的检测,一旦发现该任务持续存活的时间长度是否大于或等于预设的时间长度阈值,就将该任务的当前存活状态更改为死亡。
[0074]请参阅图4,其为本申请另一个实施例提供的一种分布式系统中的任务检测方法的流程图,在任务处理器(或任务进程)执行实施例一中的任务处理方法的同时,执行该任务检测方法,其可以包括以下步骤:
[0075]步骤401:所述多个任务处理器中的任一任务处理器被设置为定时判断所述任务的当前存活状态是否为存活,如果是,进入步骤402,否则,返回步骤401。
[0076
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1