复杂任务的并行处理方法和装置的制作方法

文档序号:6374387阅读:205来源:国知局
专利名称:复杂任务的并行处理方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种复杂任务的并行处理方法和装置。
背景技术
在现有的软件系统中,客户端(Client) /服务器(Server)模式的使用十分广泛。在该模式中,一般都是由Client提交请求,然后Client等待Server返回结果;Server接收到Client的请求后,根据该请求进行相应的处理,然后将处理结果返回给Client。由于一个Server —般可以连接多个Client,因此Server端通常被设计为可同时处理多个并发的请求,所有同时到达的请求可以互相不受干扰的进行并行处理;而在很多关键的重要应用中,客户端对于请求的响应时间也有一定的要求。随着各种实际应用的复杂度的增加、并发用户数量的不断提高以及所需处理的数据类型的逐步扩展,Client/Server模式的设计也出现了很多进化。目前,常用的Client/Server模式有以下的几种模式1、分层模式将原来单一的Server端分为多个中间层,每一层功能定义明确,如接口层、业务逻辑层、数据服务层等。其中,所述的分层可以是逻辑分层或物理分层。2、缓存技术将经常访问的数据缓存储起来以备后续步骤中重复使用。3、分布式技术将处理或计算分布到多个节点进行,以提高可扩展性。4、异步处理模式为了解决请求过于复杂、处理时间长和不可控的问题,Client被设计为提交请求后即返回,而不等待处理结果;而Server端则在处理完毕后将以某种方式通知Client。然而,在现有技术中的Client/Server模式的实现方式中,对于单个请求的处理机制上没有太多的实现方式,通常情况下都是将单个请求进行串行处理,并使用分层模式进行负载均衡,使用缓存技术提高访问速度。而如果同步方式无法满足限定时间内的处理,则将使用复杂的异步处理模式。因此,对于复杂的请求处理时,如果Client/Server模式中采用同步模式,则将造成处理缓慢的问题,导致用户的体验度不佳。而且,如果不能在限定时限内完成相应的处理,则可能会造成请求处理能力的下降。虽然在现有的复杂任务处理方法中使用了缓存技术来提高数据访问的效率,但对于关键任务的作用却并不大。而且,虽然通过使用分布式技术进行线性扩展系统负载以解决高并发、海量数据的问题,但上述分布式技术对于单个请求反而会降低响应速度。此外,如果在Client/Server模式中采用异步处理模式,则会极大地增加整个系统设计的复杂度,从而不利于具体实现及扩展。综上可知,由于现有技术中的复杂任务的处理方法具有如上所述的缺点,因此在对复杂任务进行处理时,如何有效提高单个请求的响应速度、降低响应时间和提高服务器侧的资源使用效率,已经是本领域中亟需解决的问题。

发明内容
根据本发明,提供了一种复杂任务的并行处理方法和装置,从而可有效地提高单个请求的响应速度,降低响应时间,提高服务器侧的资源使用效率。根据本发明的一种复杂任务的并行处理方法,其包括A、请求处理单元将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元进行处理;B、请求处理单元接收各个工作单元返回的成功处理结果或失败处理结果;C、当在预定时间段内接收到所有子任务的成功处理结果时,请求处理单元将所有的成功处理结果进行合并操作后发送给相应的客户端;而当有至少一个子任务未在预定时间段内返回成功处理结果时,请求处理单元中断所有未完成的子任务的处理,并对已完成的需要进行回滚操作的子任务进行回滚操作。其中,所述步骤A包括请求处理单元从接收到的客户端请求中获取所需服务的参数;为所述客户端请求生成一个全局唯一的流水号;根据所述客户端请求涉及的服务调用,按预定义规则将所述客户端请求分解为多个无依赖关系的子任务;在各个子任务之中绑定与各子任务相关的参数。其中,所述在各个子任务之中绑定与各子任务相关的参数包括将与各子任务相关的参数与相应的子任务绑定,形成相应的闭包对象;其中,所述闭包对象中包括调用方法和调用方法所需参数的对象。其中,所述与各子任务相关的参数中还可进一步包括子任务所属的客户端请求的流水号。其中,所述步骤B还进一步包括当工作单元向请求处理单元返回成功处理结果时,所述工作单元将其所处理的子任务标识为已完成。其中,所述步骤B还进一步包括当所述已完成的子任务为质变操作时,工作单元根据所述已完成的子任务所属客户端请求的流水号,在预设的回滚执行条目中记录该已完成的子任务;其中,所述质变操作为更改状态的操作或写入数据的操作。其中,预先设置一个初始值为O的触发变量,则所述步骤B还进一步包括当请求处理单元接收到一个工作单元返回的成功处理结果时,所述请求处理单元将所述触发变量的值增加一。其中,所述步骤C包括Cl、当预设的定时器超时时,执行步骤C5 ;否则,执行步骤C2 ;其中,所述定时器的定时时长等于预先设置的预定时间段的长度;C2、当接收到的处理结果为成功处理结果时,执行步骤C3 ;否则,执行步骤C5 ;C3、当所有子任务均已被成功处理时,执行步骤C4 ;否则,返回执行步骤B ;C4、将所有的处理结果进行合并操作后发送给相应的客户端,结束流程;C5、中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作。其中,该方法还进一步包括当预设的定时器超时时,请求处理单元向客户端返回处理超时的信息。
其中,该方法还进一步包括当接收到的处理结果不是成功处理结果时,请求处理单元向客户端返回处理失败的信息。其中,判断所有子任务均已被成功处理的方法为判断所述触发变量的值是否等于所有子任务的总数目;如果是,则所有子任务均已被成功处理;否则,至少有一个子任务仍未被成功处理。其中,所述步骤C4还进一步包括删除与所述客户端请求的流水号相对应的回滚执行条目。其中,所述删除与所述客户端请求的流水号相对应的回滚执行条目包括请求处理单元可向预先设置的垃圾收集单元发送丢弃指令,所述丢弃指令中携带有客户端请求的流水号;所述垃圾收集单元根据所述丢弃指令删除与所述流水号相对应的回滚执行条目。其中,所述对所有已完成的子任务进行回滚操作包括对与所述客户端请求的流水号相对应的回滚执行条目中存储的所有子任务进行回滚操作。其中,所述对与所述客户端请求的流水号相对应的回滚执行条目中存储的所有子任务进行回滚操作包括请求处理单元向预先设置的垃圾收集单元发送执行指令,所述执行指令中携带有客户端请求的流水号;所述垃圾收集单元根据所述执行指令对与所述流水号相对应的回滚执行条目中存储的所有子任务进行回滚操作。其中,所述中断所有未完成的子任务的处理包括向所有未完成的子任务所对应的工作单元发送中断指令;所述工作单元根据接收到的中断指令中断对未完成的子任务的处理。本发明实施例中还提供了一种复杂任务的并行处理装置,其包括请求处理单元、垃圾收集单元和多个工作单元;所述请求处理单元,用于将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元;还用于接收各个工作单元返回的成功处理结果或失败处理结果,并当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;当有至少一个子任务未在预定时间段内返回成功处理结果时,向所有未完成的子任务所对应的工作单元发送中断指令,并向垃圾收集单元发送执行指令;所述工作单元,用于对接收到的子任务进行处理,并向所述请求处理单元返回成功处理结果或失败处理结果;还用于根据接收到的中断指令中断对未完成的子任务的处理;所述垃圾收集单元,用于根据接收到的执行指令对所有已完成的子任务进行回滚操作。其中,所述工作单元,还用于当向请求处理单元返回成功处理结果时,将其所处理的子任务标识为已完成。
其中,所述工作单元,还用于当所述已完成的子任务为质变操作时,工作单元根据所述已完成的子任务所属客户端请求的流水号,在预设的回滚执行条目中记录该已完成的子任务。其中,所述请求处理单元,还可用于当在预定时间段内接收到所有子任务的成功处理结果时,向垃圾收集单元发送携带有客户端请求的流水号的丢弃指令;还用于当有至少一个子任务未在预定时间段内返回成功处理结果时,向垃圾收集单元发送执行指令;所述垃圾收集单元,还用于根据接收到的丢弃指令删除与流水号相对应的回滚执行条目;还用于根据接收到的执行指令对与流水号相对应的回滚执行条目中存储的所有已完成的子任务进行回滚操作。其中,所述请求处理单元还进一步包括分解模块和结果处理模块;所述分解模块,用于将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元;所述结果处理模块,用于接收各个工作单元返回的成功处理结果或失败处理结果;并用于当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;当有至少一个子任务未在预定时间段内返回成功处理结果时,向所有未完成的子任务所对应的工作单元发送中断指令,并向垃圾收集单元发送执行指令。其中,所述分解模块还进一步包括接收子模块和分解子模块;所述接收子模块,用于从接收到的客户端请求中获取所需服务的参数,并为所述客户端请求生成一个全局唯一的流水号;将所述客户端请求、所需服务的参数和流水号发送给所述分解子模块;所述分解子模块,用于根据所述客户端请求涉及的服务调用,按预定义规则将所述客户端请求分解为多个无依赖关系的子任务,并在各个子任务之中绑定与各子任务相关的参数。其中,所述复杂任务的并行处理装置还进一步包括定时器;所述定时器的定时时长等于预先设置的预定时间段的长度;所述定时器,用于当所述定时器超时时,向所述请求处理单元发送超时信息;所述请求处理单元,用于根据接收到的超时信息,向所有未完成的子任务所对应的工作单元发送中断指令,并向垃圾收集单元发送执行指令。其中,所述请求处理单元,还用于根据接收到的超时信息,向客户端返回处理超时的信息。其中,所述请求处理单元,还用于当接收到的处理结果为失败处理结果时,向所有未完成的子任务所对应的工作单元发送中断指令,并向垃圾收集单元发送执行指令。其中,所述请求处理单元,还用于当接收到的处理结果为失败处理结果时,向客户端返回处理失败的信息。由上述技术方案可见,在本发明中所提供的复杂任务的并行处理方法和装置中,由于可将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元进行处理;并且当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;而当有至少一个子任务未在预定时间段内返回成功处理结果时,则中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作,从而可以对客户端请求进行并行化处理,有效地提高了单个请求的响应速度,降低了响应时间,大大提高了用户的体验度,大大提高了服务器侧的资源使用效率,完善了失败恢复机制,并提高了超时控制的精确度,降低了设计的复杂性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,以下将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,以下描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员而言,还可以根据这些附图所示实施例得到其它的实施例及其附图。图1为本发明实施例中的复杂任务的并行处理方法的流程示意图;图2为本发明实施例中步骤101的一种具体实现方式的流程示意图;图3为本发明实施例中步骤104的一种具体实现方式的流程示意图;图4是本发明实施例中的复杂任务的并行处理装置的结构示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。图1为本发明实施例中的复杂任务的并行处理方法的流程示意图。如图1所示,本实施例中的复杂任务的并行处理方法包括如下所述的步骤步骤101,将接收到的客户端请求分解为多个无依赖关系的子任务。当客户端需要请求服务器的某一项服务时,该客户端将向服务器发送与所需服务相对应的客户端请求。其中,所述客户端请求中可包括所需服务的各种参数。因此,在本发明的技术方案中,可以在所述服务器中设置一个请求处理单元(Accept Unit),用于接收客户端发送的客户端请求,并将接收到的客户端请求分解为多个无依赖关系的子任务。其中,在本发明的具体实施例中,所述无依赖关系是指分解后的任意一个子任务的输出都不是其它子任务的输入,也就是说,分解后的每一个子任务的输入和输出都是彼此独立的,各个子任务之间都不存在明显的依赖关系。由此可知,本发明的技术方案适用于客户端请求可以被分解为多个无依赖关系的子任务的情况。在本发明的具体实施例中,所述将接收到的客户端请求分解为多个无依赖关系的子任务可以使用多种方法来实现。以下将以其中的一种实现方法为例进行详细的介绍。图2为本发明实施例中步骤101的一种具体实现方式的流程示意图。如图2所示,所述步骤101可通过如下所述的步骤来实现步骤201,从接收到的客户端请求中获取所需服务的参数。由于客户端请求中包括了所需服务的各种参数,因此在本步骤中,请求处理单元可以直接从接收到的客户端请求中获取所需服务的参数。步骤202,为所述客户端请求生成一个全局唯一的流水号(ProcessSeq)。其中,所述流水号用于标识各个客户端请求。
步骤203,根据所述客户端请求涉及的服务调用,按预定义规则将所述客户端请求分解为多个无依赖关系的子任务(SubTask )。在本步骤中,请求处理单元可根据所述客户端请求涉及的服务调用以及预定义规则,将所述客户端请求分解为多个无依赖关系的子任务。举例来说,如果客户端请求A所涉及的服务调用可以分为N个可独立执行的操作,则在本步骤中,请求处理单元可按预定义规则将该客户端请求A分解为N个无依赖关系的子任务。步骤204,在各个子任务之中绑定与各子任务相关的参数。在本步骤中,请求处理单元可将与各子任务相关的参数与相应的子任务绑定,形成相应的闭包对象。其中,所述闭包对象中包括调用方法和调用方法所需参数的对象。举例来说,如果子任务a为验证客户合法性,则在本步骤中,可将与客户身份相关的参数(例如,用户名、密码和/或用户ID等)与该子任务a绑定。而如果子任务b为向服务器上传文件,则在本步骤中,可将与文件上传操作相关的参数与该子任务b绑定。依此类推。其中,在本发明的较佳实施例中,所述与各子任务相关的参数中还可进一步包括子任务所属的客户端请求的流水号。通过上述的步骤201 204,请求处理单元即可将接收到的客户端请求分解为多个无依赖关系的子任务。举例来说,当请求处理单元所接收到的客户端请求为云存储中的用户文件上传服务请求,在该请求中,客户端请求将一个文件上传到云存储中的服务器中。此时,请求处理单元可将该客户端请求分解为如下所述的多个无依赖关系的子任务I)子任务a :验证用户合法性。该子任务的目的在于与认证服务器进行通信,并验证用户ID有效性。如果该用户不在认证服务器中存储的黑名单中,则允许该用户进行文件上传的操作;否则,不允许该用户进行文件上传的操作。该子任务属于网络IO操作。2)子任务b :验证任务密钥(Session Key)的有效性。该子任务的目的在于与任务(Session)服务器进行通信,并验证SessionKey是否在有效期内。如果SessionKey在有效期内,则允许该用户进行文件上传的操作;否则,不允许该用户进行文件上传的操作。该子任务也属于网络IO操作。3)子任务c :为上传文件生成通用唯一识别码(UUID)。该子任务的目的在于为所需上传的文件生成唯一对应的UUID。该子任务属于CUP密集型任务。4)子任务d :上传并存储文件。该子任务的目的在于将用户需要上传的文件上传并存储在文件服务器中。该子任务属于本地IO密集型任务。由于传统的对客户端请求的处理流程基本上都是串行操作,即顺序执行各个操作,因此所需的处理时间较长。而使用本发明所提供的方法,则可将上述例子中的客户端请求分解为4个子任务,各个子任务可以同时执行,从而可以极大地缩短处理时间,增强用户体验,并且可以充分地利用服务器的硬件资源。步骤102,将每一个子任务均发送给一个独立的工作单元(Work Unit)进行处理。由于在步骤101中,请求处理单元已将接收到的客户端请求分解为多个无依赖关系的子任务,因此在本步骤中,请求处理单元可将每一个子任务均发送给一个独立的工作单元进行处理。例如,假设客户端请求被分解为N个无依赖关系的子任务,则请求处理单元可将所述N个子任务分别发送给N个彼此独立的工作单元进行处理,从而使得各个子任务可以被并行地执行。较佳的,在本发明的具体实施例中,为了区分各个子任务所对应的工作单元,所述请求处理单元还将记录与各个子任务相对应的工作单元的标识(ID)。步骤103,接收各个工作单元返回的成功处理结果或失败处理结果。在上述的步骤102中,每一个子任务都被发送给了一个独立的工作单元,因此各个工作单元将分别对所接收的子任务进行相应的处理,并向请求处理单元返回处理结果;请求处理单元则将接收各个工作单元返回的处理结果。其中,所述处理结果包括成功处理结果和失败处理结果。如果子任务处理成功,则相对应的工作单元将向请求处理单元返回成功处理结果;而如果子任务处理失败,则相对应的工作单元将向请求处理单元返回失败处理结果。较佳的,在本发明的具体实施例中,当工作单元向请求处理单元返回成功处理结果时,工作单元还可进一步将其所处理的子任务标识为已完成,即表示该子任务已被成功处理。较佳的,在发明的具体实施例中,还可预先设置一个初始值为O的触发变量。此时,该步骤103还可进一步包括当请求处理单元接收到一个工作单元返回的成功处理结果时,请求处理单元将所述触发变量的值增加一。因此,当所述触发变量的值等于所有子任务的总数目时,则表示已在预定时间段内接收到所有子任务的成功处理结果。较佳的,为了便于执行后续步骤中可能存在的回滚操作,在发明的具体实施例中,该步骤103还可进一步包括当所述已完成的子任务为质变操作(M-OP, Manipulating Operation)时,工作单元根据所述已完成的子任务所属客户端请求的流水号,在预设的回滚执行条目(UndoItem)中记录该已完成的子任务。其中,所述M-OP为更改状态的操作或写入数据的操作。较佳的,在发明的具体实施例中,当所述已完成的子任务为非质变操作(NonM-OP, Non Manipulating Operation)时,工作单元不进行在预设的回滚执行条目(UndoItem)中记录该已完成的子任务的操作。其中,所述Non M-OP为除M-OP操作之外的其它操作。例如,数据查询操作、验证操作、数据排序操作等。步骤104,当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;否则,中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作。由于各个子任务的具体内容可能并不相同,因此各个工作单元对所接收的子任务进行处理时所需的处理时长也并不一定相等。所以,在本发明的具体实施例中,将预先设置一个预定时间段。该预定时间段的长度可以根据实际应用情况预先设置。如果请求处理单元在预定时间段内接收到所有子任务的成功处理结果,则表明整个客户端请求已被成功执行,此时,请求处理单元可将各个工作单元返回的所有的成功处理结果进行合并操作,然后将合并后的处理结果作为对上述客户端请求的响应消息发送给相应的客户端。而如果在预定时间段内,有至少一个子任务未被成功处理(即未在预定时间段内返回成功处理结果,或者在预定时间段内返回失败处理结果),则表明该子任务所属的客户端请求无法被成功执行,此时,请求处理单元将中断该客户端请求中所有未完成的子任务的处理,并对该客户端请求中所有已完成的子任务进行回滚操作。另外,在本发明的具体实施例中,如果请求处理单元在预定时间段内未接收到任意一个工作单元返回的处理结果(包括成功处理结果和失败处理结果),则表明该客户端请求的所有子任务在预定时间段内都未被成功执行,该客户端请求自然也无法在预定时间段内被成功执行。此时,由于所有的子任务都未被成功执行,因此无需进行中断操作和回滚操作,而可以直接终止整个流程。另外,在本发明的具体实施例中,所述回滚操作是指将已完成的子任务恢复到被工作单元处理之前的状态。此外,在本发明的具体实施例中,可以使用多种方法实现上述的步骤104,以下将以其中的一种实现方法为例进行详细的介绍。例如,图3为本发明实施例中步骤104的一种具体实现方式的流程示意图。如图3所示,在本发明的具体实施例中,所述步骤104可通过如下所述的步骤实现步骤301,判断预设的定时器是否超时;如果是,则执行步骤305 ;否则,执行步骤
302。由于各个工作单元在对所接收的子任务进行相应的处理之后,将向请求处理单元返回成功处理结果或失败处理结果,请求处理单元则将在预定时间段中等待各个工作单元返回相应的处理结果。但是,由于各个工作单元对所接收的子任务进行处理时所需的处理时长可能小于预定时间段的长度,也可能大于预定时间段的长度。因此各个工作单元可能将在预定时间段内向请求处理单元返回处理结果,也可能将将在预定时间段之后才向请求处理单元返回
处理结果。所以,在本发明的具体实施例中,可以预先设置一个定时器,且该定时器的定时时长等于预先设置的预定时间段的长度,并在执行上述步骤102之后,即开启上述定时器。因此,在本步骤中,当请求处理单元接收到工作单元返回的处理结果(即成功处理结果或失败处理结果)时,可首先判断预设的定时器是否超时;如果是,则执行步骤305 ;否则,执行步骤 302。较佳的,在本发明的具体实施例中,当预设的定时器超时时,请求处理单元还可进一步向客户端返回处理超时的信息。步骤302,判断接收到的处理结果是否为成功处理结果;如果是,则执行步骤303 ;否则,执行步骤305。在本发明的具体实施例中,当请求处理单元在预定时间段内接收到工作单元返回的处理结果时,该处理结果可能是成功处理结果,也可能是失败处理结果。因此,在本步骤中,请求处理单元将判断该处理结果是否为成功处理结果。如果是,则还需继续判断是否所有的子任务均已被成功处理,即执行后续的步骤303 ;如果不是,则表明该子任务未被成功执行,该子任务所属的客户端请求也将无法被成功执行。此时,请求处理单元执行步骤305。较佳的,在本发明的具体实施例中,当接收到的处理结果不是成功处理结果(即失败处理结果)时,请求处理单元还可进一步向客户端返回处理失败的信息。步骤303,判断所有子任务是否均已被成功处理,如果是,则执行步骤304 ;否则,返回执行步骤103。由于任意一个子任务被成功执行时,都将在步骤103中将该子任务标识为已执行,因此,在本步骤中,请求处理单元可以通过判断各个子任务的标识来判断是否所有的子任务均已被成功处理,例如,判断是否所有子任务的标识均为已完成。如果所有子任务都已被成功处理,则可执行步骤304 ;否则,将返回执行步骤103。较佳的,在本发明的具体实施例中,如果预先设置了触发变量,则在该步骤304中,判断所有子任务均已被成功处理的方法可以是判断所述触发变量的值是否等于所有子任务的总数目;如果是,则所有子任务均已被成功处理;否则,则至少有一个子任务仍未被成功处理。步骤304,将所有的成功处理结果进行合并操作后发送给相应的客户端,结束流程。由于此时所有的子任务均已被成功处理,因此在本步骤中,请求处理单元可将所接收到的所有成功处理结果进行合并操作,然后将合并后的处理结果发送给相应的客户端,并结束整个流程。较佳的,如果在步骤103中,工作单元已根据客户端请求的流水号在预设的UndoItem中记录了已完成的子任务,则当该客户端请求所有的子任务均已被成功处理时,UndoItem中所记录的已完成的子任务则不必再执行回滚操作。所以,在本发明的较佳实施例中,在将所有的处理结果进行合并操作后发送给相应的客户端之后,所述步骤304还可进一步包括删除与所述客户端请求的流水号相对应的回滚执行条目。进一步的,在本发明的较佳实施例中,可以在服务器中预先设置一个垃圾收集单兀(GC Worker,Garbage collection Worker),用于存储UndoItem,并根据执行指令对相应的UndoItem中存储的子任务进行回滚操作;还可根据丢弃指令删除相应的Undoltem。因此,在本发明的具体实施例中,所述请求处理单元可向所述垃圾收集单元发送丢弃指令,该丢弃指令中携带有客户端请求的流水号;所述垃圾收集单元则可根据该丢弃指令删除与所述流水号相对应的Undo 11 em。步骤305,中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作。由于此时至少有一个的子任务在预定时间段内未被成功处理,因此该子任务相对应的客户端请求也无法被成功执行。因此在本步骤中,请求处理单元可中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作,然后再结束整个流程。较佳的,在本发明的具体实施例中,所述中断所有未完成的子任务的处理可以包括所述请求处理单元向所有未完成的子任务所对应的工作单元发送中断指令;所述工作单元根据接收到的中断指令中断对未完成的子任务的处理。较佳的,由于与所述客户端请求的流水号相对应的UndoItem中存储了所有已完成的子任务的信息,因此,在本发明的具体实施例中,所述对所有已完成的子任务进行回滚操作可以是对与所述客户端请求的流水号相对应的UndoItem中存储的所有子任务进行回滚操作。具体来说,在本发明的较佳实施例中,所述请求处理单元可向所述垃圾收集单元发送执行指令,该执行指令中携带有客户端请求的流水号;所述垃圾收集单元则可根据该执行指令对与所述流水号相对应的UndoItem中存储的所有子任务进行回滚操作。根据本发明提供的上述方法,本发明还提供了相应的复杂任务的并行处理装置,具体请参见图4。图4是本发明实施例中的复杂任务的并行处理装置的结构示意图。如图4所示,所述复杂任务的并行处理装置400包括请求处理单元401、垃圾收集单元402和多个工作单元403。其中,所述请求处理单元401,用于将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元403 ;还用于接收各个工作单元403返回的成功处理结果或失败处理结果,并当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;当有至少一个子任务未在预定时间段内返回成功处理结果时,向所有未完成的子任务所对应的工作单元403发送中断指令,并向垃圾收集单元402发送执行指令;所述工作单元403,用于对接收到的子任务进行处理,并向所述请求处理单元401返回成功处理结果或失败处理结果;还用于根据接收到的中断指令中断对未完成的子任务的处理;所述垃圾收集单元402,用于根据接收到的执行指令对所有已完成的子任务进行回滚操作。较佳的,在本发明的具体实施例中,所述工作单元403,还用于当向请求处理单元401返回成功处理结果时,将其所处理的子任务标识为已完成。较佳的,在本发明的具体实施例中,所述工作单元403,还用于当所述已完成的子任务为质变操作时,根据所述已完成的子任务所属客户端请求的流水号,向所述垃圾收集单元402发送记录指令;所述垃圾收集单元402,还用于根据记录指令在预存的回滚执行条目中记录该已完成的子任务。较佳的,在本发明的具体实施例中,所述请求处理单元401,还可用于当在预定时间段内接收到所有子任务的成功处理结果时,向垃圾收集单元402发送携带有客户端请求的流水号的丢弃指令;还用于当有至少一个子任务未在预定时间段内返回成功处理结果时,向垃圾收集单元402发送执行指令;所述垃圾收集单元402,还用于根据接收到的丢弃指令删除与流水号相对应的回滚执行条目;还用于根据接收到的执行指令对与流水号相对应的回滚执行条目中存储的所有已完成的子任务进行回滚操作。较佳的,在本发明的具体实施例中,所述请求处理单元401可以进一步包括分解模块结果处理模块(图4中未示出);所述分解模块,用于将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元403 ;所述结果处理模块,用于接收各个工作单元403返回的成功处理结果或失败处理结果;并用于当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;当有至少一个子任务未在预定时间段内返回成功处理结果时,向所有未完成的子任务所对应的工作单元403发送中断指令,并向垃圾收集单元402发送执行指令。较佳的,在本发明的具体实施例中,所述分解模块还可以进一步包括接收子模块和分解子模块。所述接收子模块,用于从接收到的客户端请求中获取所需服务的参数,并为所述客户端请求生成一个全局唯一的流水号;将所述客户端请求、所需服务的参数和流水号发送给所述分解子模块;所述分解子模块,用于根据所述客户端请求涉及的服务调用,按预定义规则将所述客户端请求分解为多个无依赖关系的子任务,并在各个子任务之中绑定与各子任务相关的参数。较佳的,在本发明的具体实施例中,所述复杂任务的并行处理装置还进一步包括定时器404 ;所述定时器404的定时时长等于预先设置的预定时间段的长度。所述定时器404,用于当所述定时器404超时时,向所述请求处理单元401发送超时信息;所述请求处理单元401,用于根据接收到的超时信息,向所有未完成的子任务所对应的工作单元403发送中断指令,并向垃圾收集单元402发送执行指令。较佳的,在本发明的具体实施例中,所述请求处理单元401,还可用于根据接收到的超时信息,向客户端返回处理超时的信息。较佳的,在本发明的具体实施例中,所述请求处理单元401,还用于当接收到的处理结果为失败处理结果时,向所有未完成的子任务所对应的工作单元403发送中断指令,并向垃圾收集单元402发送执行指令。较佳的,在本发明的具体实施例中,所述请求处理单元401,还用于当接收到的处理结果为失败处理结果时,向客户端返回处理失败的信息。综上可知,在本发明中所提供的复杂任务的并行处理方法和装置中,通过将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元进行处理;并且当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;而当有至少一个子任务未在预定时间段内返回成功处理结果时,则中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作,从而可以对客户端请求进行并行化处理,有效地提高了单个请求的响应速度,降低了响应时间,大大提高了用户的体验度;而且由于是并行式的处理方式,因此还还可以无冲突地充分利用服务器侧的资源,从而大大提高了服务器侧的资源使用效率。另外,由于在本发明的技术方案中,使用了单独的垃圾收集单元,只要任意一个质变操作类型的子任务处理失败后,即可通过垃圾收集单元对所有已完成的需要进行回滚操作的子任务均进行相应的回滚操作,从而可以大大减少请求处理单元的工作量,进一步提高处理速度,并且完善了失败恢复机制,从而使得子任务的内容可以不受限制。此外,在本发明的技术方案中,还使用了超时的机制,从而可以简化Clinet/Sever之间的超时控制处理,提高超时控制的精确度,降低设计的复杂性。此外,由于本发明的技术方案可以将原有的复杂的异步处理模式转换为简单的同步处理模式,从而可以大大降低设计的复杂性,而且实现方式也十分简便。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种复杂任务的并行处理方法,所述方法包括A、请求处理单元将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元进行处理;B、请求处理单元接收各个工作单元返回的成功处理结果或失败处理结果;C、当在预定时间段内接收到所有子任务的成功处理结果时,请求处理单元将所有的成功处理结果进行合并操作后发送给相应的客户端;而当有至少一个子任务未在预定时间段内返回成功处理结果时,请求处理单元中断所有未完成的子任务的处理,并对已完成的需要进行回滚操作的子任务进行回滚操作。
2.如权利要求1所述的复杂任务的并行处理方法,其中,所述步骤A包括请求处理单元从接收到的客户端请求中获取所需服务的参数;为所述客户端请求生成一个全局唯一的流水号;根据所述客户端请求涉及的服务调用,按预定义规则将所述客户端请求分解为多个无依赖关系的子任务;在各个子任务之中绑定与各子任务相关的参数;和所述在各个子任务之中绑定与各子任务相关的参数包括将与各子任务相关的参数与相应的子任务绑定,形成相应的闭包对象;其中,所述闭包对象中包括调用方法和调用方法所需参数的对象。
3.如权利要求1所述的复杂任务的并行处理方法,其中,所述步骤B还进一步包括 当工作单元向请求处理单元返回成功处理结果时,所述工作单元将其所处理的子任务标识为已完成;当所述已完成的子任务为质变操作时,工作单元根据所述已完成的子任务所属客户端请求的流水号,在预设的回滚执行条目中记录该已完成的子任务;其中,所述质变操作为更改状态的操作或写入数据的操作。
4.如权利要求3所述的复杂任务的并行处理方法,其中,预先设置一个初始值为O的触发变量,则所述步骤B还进一步包括当请求处理单元接收到一个工作单元返回的成功处理结果时,所述请求处理单元将所述触发变量的值增加一;所述步骤C包括Cl、当预设的定时器超时时,执行步骤C5 ;否则,执行步骤C2 ;其中,所述定时器的定时时长等于预先设置的预定时间段的长度;C2、当接收到的处理结果为成功处理结果时,执行步骤C3 ;否则,执行步骤C5 ;C3、当所有子任务均已被成功处理时,执行步骤C4 ;否则,返回执行步骤B ;C4、将所有的处理结果进行合并操作后发送给相应的客户端,结束流程;C5、中断所有未完成的子任务的处理,并对所有已完成的子任务进行回滚操作。
5.如权利要求4所述的复杂任务的并行处理方法,其中,所述方法还进一步包括当预设的定时器超时时,请求处理单元向客户端返回处理超时的信息;当接收到的处理结果不是成功处理结果时,请求处理单元向客户端返回处理失败的信肩、O
6.如权利要求4所述的复杂任务的并行处理方法,其中,判断所有子任务均已被成功处理的方法为判断所述触发变量的值是否等于所有子任务的总数目;如果是,则所有子任务均已被成功处理;否则,至少有一个子任务仍未被成功处理;所述步骤C4进一步包括删除与所述客户端请求的流水号相对应的回滚执行条目。
7.如权利要求6所述的复杂任务的并行处理方法,其中,所述删除与所述客户端请求的流水号相对应的回滚执行条目包括请求处理单元可向预先设置的垃圾收集单元发送丢弃指令,所述丢弃指令中携带有客户端请求的流水号;所述垃圾收集单元根据所述丢弃指令删除与所述流水号相对应的回滚执行条目。
8.一种复杂任务的并行处理装置,其特征在于,该装置包括请求处理单元、垃圾收集单元和多个工作单元;所述请求处理单元,用于将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元;还用于接收各个工作单元返回的成功处理结果或失败处理结果,并当在预定时间段内接收到所有子任务的成功处理结果时,将所有的成功处理结果进行合并操作后发送给相应的客户端;当有至少一个子任务未在预定时间段内返回成功处理结果时,向所有未完成的子任务所对应的工作单元发送中断指令,并向垃圾收集单元发送执行指令;所述工作单元,用于对接收到的子任务进行处理,并向所述请求处理单元返回成功处理结果或失败处理结果;还用于根据接收到的中断指令中断对未完成的子任务的处理;所述垃圾收集单元,用于根据接收到的执行指令对所有已完成的子任务进行回滚操作。
9.如权利要求8所述的复杂任务的并行处理装置,其特征在于所述工作单元,还用于当向请求处理单元返回成功处理结果时,将其所处理的子任务标识为已完成。
10.如权利要求9所述的复杂任务的并行处理装置,其特征在于所述工作单元,还用于当所述已完成的子任务为质变操作时,工作单元根据所述已完成的子任务所属客户端请求的流水号,向所述垃圾收集单元发送记录指令;所述垃圾收集单元,还用于根据记录指令在预存的回滚执行条目中记录该已完成的子任务;所述请求处理单元,还可用于当在预定时间段内接收到所有子任务的成功处理结果时,向垃圾收集单元发送携带有客户端请求的流水号的丢弃指令;还用于当有至少一个子任务未在预定时间段内返回成功处理结果时,向垃圾收集单元发送执行指令;所述垃圾收集单元,还用于根据接收到的丢弃指令删除与流水号相对应的回滚执行条目;还用于根据接收到的执行指令对与流水号相对应的回滚执行条目中存储的所有已完成的子任务进行回滚操作。
全文摘要
本发明公开了一种复杂任务的并行处理方法和装置。所述方法包括请求处理单元将接收到的客户端请求分解为多个无依赖关系的子任务,并将每一个子任务均发送给一个独立的工作单元进行处理;请求处理单元接收各个工作单元返回的成功处理结果或失败处理结果;当在预定时间段内接收到所有子任务的成功处理结果时,请求处理单元将所有的成功处理结果进行合并操作后发送给相应的客户端;而当有至少一个子任务未在预定时间段内返回成功处理结果时,请求处理单元中断所有未完成的子任务的处理,并对已完成的需要进行回滚操作的子任务进行回滚操作。本发明可以有效地提高单个请求的响应速度,降低响应时间,提高服务器侧的资源使用效率。
文档编号G06F9/40GK103019651SQ20121027407
公开日2013年4月3日 申请日期2012年8月2日 优先权日2012年8月2日
发明者纪震寰 申请人:青岛海信传媒网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1