一种任务执行的方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种任务执行的方法及装置。
背景技术
为了丰富用户的日常需求,网络平台为人们在线上提供了多种能够满足人们实际需求的业务,这些业务通常都较容易上手,操作简单,这样,人们可根据自己的实际情况,来选择合适的业务,从而极大的提高了人们解决日常问题的能力,随着计算机技术和网络技术的不断发展,人们还会将各项业务进一步完善。
一个网络平台的一项业务通常都是由一个包含有多个服务器的服务器集群来统一负责的,而由于业务的需要,用户的数据通常都会被分布在各个服务器中,因此,在现有技术中,当用户登录到某一服务器来进行业务处理时,服务器将根据用户所执行的业务操作,来从其他的服务器中调取所需的数据,并通过将所有的数据进行整合后,来生成一个任务文件,进而通过执行该任务文件,完成对用户所需业务的处理。
然而,在实际应用中,每个服务器都至少对应一个数据库来进行存储数据,即,数据通常都是存储在负责为服务器存储数据的数据库中,而非服务器中,因此,服务器之间的数据调取实际上时一个服务器从负责存储另一个服务器数据的数据库中调取的。若参与数据调取的各服务器不在同一区域,则服务器需要跨区域的去访问该另一个服务器的数据库来进行数据调取,继而可能出现诸如服务器之间连接不上、读写缓慢、占用带宽等一系列问题,从而降低了服务器对任务文件进行执行的效率。而服务器在生成任务文件时,通常都需要进行多次调取操作,才能从负责存储其他服务器数据的各数据库中获取到各数据,例如,假设服务器A需要从存储服务器B数据的数据库B中调取三条数据,因此,该服务器A需要向数据库B发送三次获取数据的请求,而数据库B则根据服务器A发送的这三次请求,将这三次请求对应的各数据依次返回给服务器A,这样就增加了服务器之间的交互次数,降低了服务器对任务文件的处理效率,并且,生成任务文件过程中通常都是由一个服务器来完成的,这样就没有很好的利用到其他的服务器,进而造成了服务器资源浪费的问题。
发明内容
本申请实施例提供一种任务执行的方法及装置,用以解决现有技术中服务器在对任务进行执行时效率较低、浪费服务器资源的问题。
本申请实施例提供的一种任务执行的方法,包括:
第一服务器创建任务;
将所述任务拆分为若干任务分片;
将全部或部分任务分片分发给各第二服务器,使各第二服务器对接收到的任务分片进行处理;
所述第一服务器处理未分发的任务分片;
接收各第二服务器返回的各执行结果;
将所述各执行结果以及所述第一服务器自身处理任务分片所得到的本地结果进行合并,得到最终结果。
本申请实施例提供的一种任务执行的方法,包括:
第二服务器接收第一服务器发送的任务分片;其中,所述任务分片是所述第一服务器创建任务后,将所述任务进行拆分得到的;
执行所述任务分片,得到执行结果;
将所述执行结果返回给所述第一服务器,使得所述第一服务器在获取到所述执行结果后,将所述执行结果、其他第二服务器返回的执行结果以及所述第一服务器执行未分发的任务分片后得到的本地结果进行合并,得到最终结果。
本申请实施例提供的一种任务执行的装置,包括:
创建模块,用于创建任务;
拆分模块,用于将所述任务拆分为若干任务分片;
分发模块,用于将全部或部分任务分片分发给各第二服务器,使各第二服务器对接收到的任务分片进行处理;
处理模块,用于所述装置处理未分发的任务分片;
接收模块,用于接收各第二服务器返回的各执行结果;
合并模块,用于将所述各执行结果以及所述装置自身处理任务分片所得到的本地结果进行合并,得到最终结果。
本申请实施例提供的一种任务执行的装置,包括:
接收模块,用于接收第一服务器发送的任务分片;其中,所述任务分片是所述第一服务器创建任务后,将所述任务进行拆分得到的;
执行模块,用于执行所述任务分片,得到执行结果;
返回模块,用于将所述执行结果返回给所述第一服务器,使得所述第一服务器在获取到所述执行结果后,将所述执行结果、其他第二服务器返回的执行结果以及所述第一服务器执行未分发的任务分片后得到的本地结果进行合并,得到最终结果。
本申请实施例提供一种任务执行的方法及装置,该方法通过第一服务器根据接收到业务请求创建出相应的任务后,将该任务拆分为若干任务分片,并将该任务分片的全部或部分分发给各第二服务器,使得各第二服务器在接收到该任务分片后,执行该任务分片,并将得到的执行结果返回给第一服务器,而后,第一服务器将各第二服务器返回的各执行结果,以及处理针对本地数据的任务分片得到的本地结果进行合并,得出最终结果。上述方法中第一服务器并不是独自来对创建出的任务进行执行的,而是将该任务进行拆分,并将拆分后的任务分片分发给各第二服务器,使得各第二服务器共同来完成对该任务的执行处理,因此有效的提高了服务器资源的利用率,并且,无需向各第二服务器的数据库进行多次访问,同时也无需对存储第二服务器数据的数据库进行跨域访问,从而提高了服务器对任务文件进行执行的效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的任务执行的过程;
图2为本申请实施例提供的第一服务器标记任务分片的执行状态,并根据执行状态来执行任务分片的示意图;
图3为本申请实施例提供的任务执行的过程;
图4为本申请实施例提供的第二服务器标记任务分片的执行状态,并根据执行状态来执行任务分片的示意图;
图5为本申请实施例提供的一种任务执行的装置结构示意图;
图6为本申请实施例提供的另一种任务执行装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的任务执行的过程,具体包括以下步骤:
S101:第一服务器创建任务。
在实际应用中,线上平台为用户提供了多种多样的业务,使得用户可根据自己的实际需求,来选择相应的业务进行处理,极大的提高了用户解决日常问题的能力。而服务器在对用户选择的业务进行处理时,通常都是通过执行该业务的任务来完成的,因此,在本申请实施例中,第一服务器在对用户选择的业务进行处理之前,应首先创建出处理该业务的相应任务,其中,这里提到的第一服务器可以是用户所访问、登录的服务器,即,接收用户业务请求的服务器。
具体的,通常情况下,用户通过诸如手机、电脑等终端在访问第一服务器后,将根据该第一服务器在访问页面上所提供的业务选项,选择出适合自己的业务,而后,终端将根据用户所选择的业务选项,生成对应该业务的一个业务请求,并将该业务请求发送给第一服务器。而第一服务器在接收到用户终端发送的业务请求后,将根据该业务请求中所包含的业务指令,创建出处理该业务请求的相应任务,进而通过后续步骤S102~S106来对该任务进行执行。
需要说明的是,在本申请实施例中,第一服务器需要对创建出的任务的执行状态进行标记,即,当第一服务器在创建出处理业务请求的相应任务后,可将该任务的执行状态标记为初始状态,此举的目的在于,在后续步骤S103中,当第一服务器将拆分的任务分片分发给各第二服务器后,需要保证各服务器在共同完成对执行同一任务时,执行状态应是一致的,因此,第一服务器需要在创建出任务后,即对该任务的执行状态进行标记,而具体的原因将在步骤S103中详细阐述。
S102:将所述任务拆分为若干任务分片。
当第一服务器创建出任务后,将根据执行该任务所需的各数据,以及预先保存的各数据的分布列表,将该任务拆分为若干任务分片,其中,每个任务分片都对应至少一个数据,而后,在将各任务分片的执行状态标记为已拆分状态。
具体的,在实际应用中,第一服务器在接收到用户的业务请求后,也将创建出处理该业务请求的相应任务,但是,通常情况下,第一服务器都是独自来对该任务进行执行的,这样不仅浪费了服务器资源,同时还降低了第一服务器对该任务的执行效率,进而降低了第一服务器进行业务处理时的效率。为了避免这一问题的发生,在本申请实施例中,当第一服务器创建出处理用户业务请求的相应任务后,第一服务器可确定出执行该任务所涉及的各个数据,并根据确定出的各数据,以及预先保存的各数据的在各数据库中的分布列表,来对该任务进行拆分,得到若干任务分片,同时,将各任务分片的执行状态标记为已拆分状态,并将该拆分状态记录在预设的用于记录各任务分片执行状态的列表中。
例如,假设服务器A(即,上述提到的第一服务器)在接收到用户业务请求后,创建出了处理该业务请求的相应任务X,而后,服务器A进一步的确定出了执行该任务X时需要数据a、数据b、数据c这三条数据,而服务器A预先保存的各数据的服务器分布列表中指出,数据a存储在对应服务器A的数据库A中,数据b存储在对应服务器B(即,上述提到的一个第二服务器)的数据库B中,而数据c存储在对应服务器C(即,上述提到的一个第二服务器)的数据库C中,因此,服务器A可将创建出的任务拆分为对应数据a的一个任务分片A、对应数据b的一个任务分片B、对应数据c的一个任务分片C,同时,分别将这三个任务分片的执行状态标记(或更新原标记)为已拆分状态,并将该拆分状态记录在预设的用于记录各任务分片执行状态的列表中。
需要说明的是,第一服务器在对创建出的任务进行拆分时,也可将拆分出的任务分片对应多条数据,例如,四条数据对应一个任务分片。而为了保证各服务器在对同一任务进行执行时的效率,一个任务分片所涉及的各数据应存储于同一数据库中。
S103:将全部或部分任务分片分发给各第二服务器,使各第二服务器对接收到的任务分片进行处理。
第一服务器将创建出的任务拆分为若干个任务分片后,可进一步的确定出在各任务分片中对应的数据未保存在该第一服务器本地的任务分片,并将确定出的这些任务分片发送给各第二服务器,使得各第二服务器在接收到该任务分片后,对其进行处理。
具体的,第一服务器拆分出的若干任务分片并不一定都对应各第二服务器,因此,在这些任务分片中,一部分任务分片所涉及的数据是保存在各第二服务器中的,而一部分任务分片所涉及的数据可能是保存在本地的第一服务器中的,因此,第一服务器在将拆分得到的各任务分片进行分发之前,需要确定出该任务分片的所属服务器,即,哪些任务分片所涉及的数据是存储在该本地第一服务器中的,而哪些任务分片所涉及的数据是存储在各第二服务器中,其中,任务分片所涉及的数据可以是存储在对应服务器的数据库中,也可以是存储在服务器本地中的。当第一服务器在确定出属于各第二服务器的任务分片后,可将这些任务分片分发至相应的各第二服务器中,使得各第二服务器在接收到第一服务器分发的任务分片后,执行该任务分片,其中,这里提到的任务分片可只对应一个服务器,即一个任务分片应属于一个第二服务器或第一服务器。
继续沿用上例,服务器A(即,上述提到的第一服务器)将创建出的任务X拆分为三个任务分片后,可进一步的确定出这三个任务分片的所属服务器,其中,由于任务分片A所涉及的数据a存储在对应服务器A的数据库A中,因此,服务器A可将该任务分片A保留给自身,任务分片B所涉及的数据b存储在对应服务器B(即,上述提到的一个第二服务器)的数据库B中,而在实际应用中,数据库B的数据调取工作通常都是由服务器B来完成的,因此,服务器A可将该任务分片B分发至服务器B中,而任务分片C所涉及的数据c存储在对应服务器C(即,上述提到的一个第二服务器)的数据库C中,而数据库C中的数据调取工作通常是由服务器C来完成的,因此,服务器A可将该任务分片C分发至服务器C中。而后,服务器B以及服务器C在接收到服务器A发送给各自的任务分片后,将对该任务分片进行执行。
需要说明的是,在本申请实施例中,第一服务器在对任务分片执行每一步操作时,可对该任务分片的执行状态进行标记,并且,第一服务器向各第二服务器分发各任务分片后,也需要接收各第二服务器返回的能够表明各任务分片的当前执行状态的执行消息,进而在根据该执行消息,来对第一服务器本地保存的各任务分片的执行状态进行更新。此举的目的在于,第一服务器在将各任务分片分发至各第二服务器来使各第二服务器与其共同完成对同一任务的处理时,需要保证各任务分片的执行状态一致,即,保证各任务分片的执行状态与服务器对各任务分片执行的操作相一致,因为,若不保证各任务分片执行状态的一致,则可能会导致在进行后续过程中出现一定的问题。
例如,假设第二服务器在执行某一任务分片时发送了错误,生成了一个错误的执行结果,则第二服务器可将该任务分片的执行状态标记为未完成状态,但是,由于此时第二服务器出现了一定的问题,导致第二服务器误将该错误的执行结果发送给了第一服务器,若第一服务器不对该执行结果进行判断,就将该执行结果与其他的执行结果进行合并,则第一服务器得出的最终结果将是不准确的。为了保证第一服务器对任务进行执行时的准确性,第二服务器在向第一服务器返回执行结果之前,可先向第一服务器返回一个执行消息(即,表明该任务分片执行状态的一个执行消息),而后再向第一服务器返回执行结果,而当第一服务器在对各执行结果进行合并之前,可先判断给执行结果的执行状态是否都处于已完成状态,其中,当发现第二服务器返回的执行结果对应任务分片的执行状态为未完成时,则不对该执行结果进行合并,从而保证了第一服务器对任务进行执行时的准确性。当然,第一服务器也可在接收到第二服务器返回的执行结果后,向第二服务器发送一个询问消息,即询问该执行结果是否为准确的执行结果,当发现该执行结果所对应的任务分片在第二服务器标记的执行状态为未完成时,则确定出当前接收到该执行结果为无效的执行结果,进而不在后续过程中对该执行结果进行合并。
S104:所述第一服务器处理未分发的任务分片。
在实际应用中,上述提到的各任务分片所对应的数据并不一定都存储在各第二服务器中,有一部分任务分片所对应的数据可能存储在本地中,因此,第一服务器在确定出各任务分片所属的服务器后,除了将属于各第二服务器的任务分片分发至各第二服务器,也可将对应数据存储在本地的任务分片进行执行,其中,这里提到的保存在本地的数据是指存储在本地第一服务器中的数据,或是存储在对应第一服务器的数据库中的数据。
需要说明的是,第一服务器在对涉及本地数据的任务分片进行执行时,也应对该任务分片的执行状态进行标记,以保证任务分片的执行状态与第一服务器对任务分片所执行的操作相一致,如图2所示。
图2为本申请实施例提供的第一服务器标记任务分片的执行状态,并根据执行状态来执行任务分片的示意图。
在图2中,当第一服务器在对涉及本地数据的任务分片进行执行之前,可先将该任务分片的执行状态标记为已拆分状态S,而后,第一服务器可根据该已拆分状态S,来对该任务分片进行执行,其中,当第一服务器完成对该任务分片的执行而得出相应的本地结果时,可将该任务分片的执行状态标记(或更新原标记)为待合并状态M;当第一服务器在对该任务分片进行执行的过程中发生了无法恢复的异常时,则第一服务器可将该任务分片的执行状态标记(或更新原标记)为已终止状态A;而当第一服务器在对该任务分片进行执行的过程中发生了可恢复的异常时,则可将该任务分片的执行状态标记(或更新原标记)为已延后状态D。由于第一服务器在进行对创建任务的最终处理过程中,需要各任务分片对应的各执行结果,因此,对于执行状态为已延后状态D的任务分片来说,第一服务器可定时扫描各任务分片,并当发现在各任务分片中存在执行状态为已延后状态D的任务分片时,将重新执行该任务分片。而对于执行状态为已终止状态A的任务分片来说,为了防止在对各任务分片的后续执行过程中出现一些不可逆的情况,第一服务器通常都会对各任务分片进行备份,因此,当第一服务器扫描到各任务分片中存在执行状态为已终止状态A时,则可调取出先前备份的任务分片,进而重新执行该任务分片。
S105:接收各第二服务器返回的各执行结果。
在本申请实施例中,第一服务器在对根据用户发送的业务请求而创建出的任务进行最终处理时,需要根据处理针对本地数据的任务分片后得出的本地结果,以及各第二服务器所返回的对应各任务分片的执行结果来完成对该任务的最终处理,因此,第一服务器需要接收各第二服务器所返回的各执行结果,同时,为了在后续过程中能够保证各任务分片的执行状态与第一服务器对各任务分片执行的操作相一致,第一服务器可将接收到的各执行结果对应的任务分片进行标记(或更新原标记),即,将该任务分片的执行状态标记(或更新原标记)为待合并状态。
S106:将所述各执行结果以及所述第一服务器自身处理任务分片所得到的本地结果进行合并,得到最终结果。
第一服务器在接收到各第二服务器所返回的各执行结果后,可将执行针对本地数据的任务分片后得到的本地结果以及接收的各执行结果进行读取,并根据预设的合并规则,将该各执行结果与本地结果进行合并,进而得到执行上述任务后的一个最终结果,与此同时,为保证各任务状态与第一服务器对任务分片执行的操作相一致,第一服务器需要将各任务分片的执行状态标记(或更新原标记)为已合并状态。其中,上述提到的合并规则没有明确的限定,只需保证能够将各任务分片对应的执行结果进行准确无误的合并即可。
继续沿用上例,服务器A(即,上述提到的第一服务器)在接收到服务器B(即,上述提到的一个第二服务器)返回的对应任务分片B的执行结果B,以及服务器C(即,上述提到的一个第二服务器)返回的对应任务分片C的执行结果C后,可根据预设的合并规则,将该执行结果B、执行结果C以及执行对应本地数据a的任务分片A后所得到的本地结果A进行合并,进而得到执行任务X的一个最终结果,同时,第一服务器可将任务分片A、任务分片B以及任务分片C的执行状态标记(或更新原标记)为已合并状态,继而完成整个任务X的执行过程。
从上述方法中可以看出,第一服务器在对创建出的任务进行执行时,并不是独自执行该任务的,而是将该任务拆分为若干个任务分片,并将该任务分片分发至各第二服务器中,使得各第二服务器在接收到该任务分片后,来共同帮助第一服务器完成对同一任务的执行工作,因此,该方法极大的提高了服务器资源的利用率,同时降低了服务器之间的交互次数,即,第一服务器只需将任务分片发送给第二服务器,即可由第二服务器来帮助第一服务器进行相应的数据调取及处理工作,因此,提高了服务器在进行任务执行时的效率。
需要说明的是,为了能够有效的保证各任务分片的执行状态与第一服务器对该任务分片执行的操作相一致,在本申请实施例中,当第一服务器将全部或部分任务分片分发给各第二服务器后,以及接收各第二服务器返回的各执行结果之前的这段过程之间,第一服务器需要接收各第二服务器返回的处理针对各自接收到的任务分片后所得到的执行消息,并根据该执行消息,对本地记录的各任务分片的执行状态进行更新(或重新标记)。
在上述步骤S104中,第一服务器在对涉及本地数据的任务分片进行执行时,可引入任务锁技术,即,将该任务分片所涉及的本地数据进行锁定,而防止其他的任务调用或更改该数据,此举的目的在于,在实际应用中,服务器中所执行的多个任务可能都会涉及到同一数据,若服务器在执行一个任务时,未将其所涉及的数据进行锁定,而使得其他的任务在执行时对该数据进行了更改,则服务器执行完该任务后得到的执行结果将是不准确的。因此,为了避免这一情况的发生,在本申请实施例中,第一服务器在对涉及本地数据的任务分片进行执行时,可在本地或存储该数据的数据库中将该数据进行锁定,如,在该数据的前后加标识等,使得第一服务器在执行其他任务的过程中需要调用或更改该数据时,发现该数据已被上锁,从而确定出该数据当前正在被其他的任务所使用,进而不对该数据进行操作,因此,保证了服务器在进行任务执行时的准确性。
在本申请实施例中,当第一服务器将创建的任务拆分为若干任务分片后,可将该任务分片分发至各第二服务器中,而各第二服务器为了能够帮助第一服务器共同完成对同一任务的执行工作,各第二服务器在接收到各自的任务分片后,可将该任务分片所涉及的数据进行调取,进而执行该任务分片。为了更加清楚的解释各第二服务器对接收到任务分片进行执行的过程,下面将对这一过程进行详细说明。
图3为本申请实施例提供的任务执行的过程,具体包括以下步骤:
S301:第二服务器接收第一服务器发送的任务分片;其中,所述任务分片是所述第一服务器创建任务后,将所述任务进行拆分得到的。
由于在现有技术中,服务器在对任务进行执行时通常都是独自完成的,这样一来就极大的浪费了服务器资源,并且,服务器在获取执行该任务所需的数据时,需要与其他的服务器进行多次交互,才能最终获取到执行该任务的全部数据,这就降低了服务器执行该任务时的效率,不仅如此,服务器在从其他的服务器获取数据时,通常会跨区域的访问存储其他服务器数据的数据库,从而可能会出现诸如连接不上、读写缓慢、占用宽度等一系列问题,进而降低服务器对任务进行执行时的效率。为了能够有效的解决上述出现的问题,在本申请实施例中,第二服务器可加入到第一服务器的任务执行过程中来,即,帮助第一服务器共同完成对同一任务的执行工作。而第一服务器为了能够实现第二服务器帮助其完成对同一任务的执行工作,可将根据用户发送的业务请求而创建出的任务进行拆分,并将属于第二服务器的各任务分片分发至相应的第二服务器,而第二服务器为了帮助第一服务器完成该任务的执行工作,可相应的接收第一服务器发送的任务分片,进而通过后续步骤S302~S303,来执行该任务分片,并将得到的执行结果返回给第一服务器。
需要说明的是,上述提到的第二服务器并不唯一,即,第一服务器可将拆分得到的各任务分片分发至各第二服务器中,而各第二服务器执行各自任务分片的过程都大致相同,因此,为了方便、清楚的对本申请实施例进行说明,这里将只以一个第二服务器作为执行主体,来对本申请实施例进行说明。而第二服务器在对接收到的任务分片进行执行时,实质上是根据该任务分片中的任务指令来对该任务分片所涉及的数据进行操作,因此,第二服务器接收的任务分片应至少对应一个数据。
S302:执行所述任务分片,得到执行结果。
当第二服务器接收到第一服务器发送的任务分片后,可根据确定出的执行该任务分片所涉及的数据,从本地或存储该数据的数据库中调取出该数据,进而再根据该任务分片中所包含的任务指令,对调取出的数据进行处理,得到对该任务分片的执行结果。这样一来,第二服务器即加入到了共同处理同一任务的行列中来,从而极大的提高了服务器资源的利用率,同时也使得第一服务器无需向第二服务器发送多次获取数据的请求,即,第一服务器只向第二服务器发送相应的任务分片,第二服务器即可帮助第一服务器来执行该任务分片,不仅如此,通常情况下,存储服务器数据的数据库都是与对应的服务器处在同一区域内的,因此,第二服务器在接收到第一服务器发送的任务分片后,可对该任务分片所涉及的数据进行调取,即,相当于帮助第一服务器完成了数据的调取或处理工作,从而有效的解决了第一服务器跨域访问数据库的问题,进而提高了第一服务器在进行任务执行时的效率。
需要说明的是,为了保证任务分片的执行状态与第二服务器对上述任务分片执行的操作相一致,第二服务器同样需要对该任务分片的执行状态进行标记(或更新原标记),并根据记录的该任务分片的执行状态,来对该任务分片执行相应的操作,如图4所示。
图4为本申请实施例提供的第二服务器标记任务分片的执行状态,并根据执行状态来执行任务分片的示意图。
在图4中,当第二服务器接收到第一服务器发送的任务分片后,可先将该任务分片的执行状态标记为待处理状态p,而后,第二服务器确定出该任务分片所涉及的数据后,可从本地或存储该数据的数据库中调取出该数据,并根据该任务分片中所包含的任务指令来执行该任务分片,此时,第二服务器可将该任务分片的执行状态标记(或更新原标记)为执行状态r。而当第二服务器执行完所述任务分片,可得出相应的执行结果,并将该任务分片的执行状态标记(或更新原标记)为已完成状态f。
需要说明的是,在实际应用中,第二服务器在执行接收到的任务分片时,可能会出现一些异常的问题,进而导致处理过程无法继续进行,因此,在图4中,当第二服务器在执行接收到的任务分片时出现了可恢复的异常情况,第二服务器可先暂时中断该任务分片的执行进程,并将该任务分片的执行状态标记(或更新原标记)为已延后状态d,而后,第二服务器再通过定时的任务扫描来捞取该任务分片,进而重新对该任务分片进行执行。而当第二服务器在对任务分片进行执行的过程中出现了不可恢复的异常情况,则第二服务器可终止该任务分片的执行进程,并将该任务分片的执行状态标记为已终止状态a,而后,第二服务器通过任务扫描发现该任务分片处于已终止状态a时,可通过先前备份的该任务分片,来重新执行该任务分片,继而得到对应该任务分片的一个执行结果,并将该任务分片的执行状态标记(或更新原标记)为已完成状态f。
为了保证第二服务器在对接收到的任务分片执行后所得执行结果的准确性,第二服务器同样需要在执行该任务分片时,对该任务分片所涉及的数据进行锁定,其中,锁定的原因以及具体过程与上述图1的步骤S104中大致相同,在此就不进行详细赘述。
S303:将所述执行结果返回给所述第一服务器,使得所述第一服务器在获取到所述执行结果后,将所述执行结果、其他第二服务器返回的执行结果以及所述第一服务器执行未分发的任务分片后得到的本地结果进行合并,得到最终结果。
在实际应用中,处理用户业务请求对应任务的工作最终是由第一服务器来完成的,因此,第二服务器需要将执行任务分片后得到的执行结果返回给第一服务器,使得第一服务器在接收到该执行结果后,将该执行结果、其他第二服务器返回的执行结果以及第一服务器执行未分发的任务分片后得到的本地结果进行合并,得到最终结果,其中,该最终结果即为执行第一服务器创建出的任务后得到的最终结果。
从上述方法中可以看出,第二服务器在接收到第一服务器发送的任务分片后,可执行该任务分片,即,相当于帮助第一服务器来对该任务分片对应的任务进行处理,从而提高了服务器资源的利用率,并且,相对于现有技术来说,第二服务器执行第一服务器发送的任务分片也减少了第一服务器与第二服务器之间的交互次数,从而提高了第一服务器在进行任务处理时的效率。不仅如此,第二服务器在执行任务分片时,可直接对从本地或数据库中调取出该任务分片所涉及的数据,从而避免了第一服务器对存储第二服务器数据的数据库进行跨域访问时可能出现的不利情况,进而提高了第一服务器在进行任务处理时的效率。
需要说明的是,上述图2中,第一服务器在执行上述任务分片时,对任务分片所标记的各执行状态并不仅限于第一服务器中,也可用于第二服务器执行任务分片的过程中。而上述图4中,第二服务器在执行任务分片时,对任务分片所标记的各执行状态也同样不仅限于第二服务器中,也可用于第一服务器执行任务分片的过程中。
以上为本申请实施例提供的任务执行的方法,基于同样的思路,本申请实施例还提供两种任务执行的装置,如图5所示。
图5为本申请实施例提供的一种任务执行的装置结构示意图,具体包括:
创建模块501,用于创建任务;
拆分模块502,用于将所述任务拆分为若干任务分片;
分发模块503,用于将全部或部分任务分片分发给各第二服务器,使各第二服务器对接收到的任务分片进行处理;
处理模块504,用于所述装置处理未分发的任务分片;
接收模块505,用于接收各第二服务器返回的各执行结果;
合并模块506,用于将所述各执行结果以及所述装置自身处理任务分片所得到的本地结果进行合并,得到最终结果。
所述创建模块501具体用于,所述装置接收用户发送的业务请求;根据所述业务请求,创建相应的任务,并将所述任务的执行状态标记为初始状态。
所述拆分模块502具体用于,根据执行所述任务所需的各数据,将所述任务拆分为若干任务分片,并将各任务分片的执行状态标记为已拆分状态;其中,每个任务分片对应至少一个数据;
所述分发模块503具体用于,将对应的数据未保存在所述装置本地的任务分片分发给各第二服务器;
所述处理模块504具体用于,所述装置处理对应的数据保存在所述装置本地的任务分片。
所述接收模块505具体用于,接收各执行结果,并将接收到的各执行结果对应的任务分片的执行状态标记为待合并状态。
所述合并模块506具体用于,读取所述各执行结果与本地结果;根据预设的合并规则,将所述各执行结果与所述本地结果进行合并,并将所述各任务分片的执行状态标记为已合并状态。
所述接收模块505还用于,在所述分发模块506用于将全部或部分任务分片分发给各第二服务器之后,及所述接收模块505用于接收各第二服务器返回的各执行结果之前,接收各第二服务器返回的针对各自接收到的任务分片的执行消息;根据所述执行消息,对各任务分片的执行状态进行更新。
图6为本申请实施例提供的另一种任务执行装置的结构示意图,具体包括:
接收模块601,用于接收第一服务器发送的任务分片;其中,所述任务分片是所述第一服务器创建任务后,将所述任务进行拆分得到的;
执行模块602,用于执行所述任务分片,得到执行结果;
返回模块603,用于将所述执行结果返回给所述第一服务器,使得所述第一服务器在获取到所述执行结果后,将所述执行结果、其他第二服务器返回的执行结果以及所述第一服务器执行未分发的任务分片后得到的本地结果进行合并,得到最终结果。
所述装置还包括:
发送模块604,用于所述执行模块602执行所述任务分片之后,将执行所述任务分片对应的执行消息发送给所述第一服务器,使得所述第一服务器根据接收到的所述执行消息,将记录的所述任务分片的执行状态进行更新。
本申请实施例提供一种任务执行的方法及装置,该方法通过第一服务器根据接收到业务请求创建出相应的任务后,将该任务拆分为若干任务分片,并将该任务分片的全部或部分分发给各第二服务器,使得各第二服务器在接收到该任务分片后,执行该任务分片,并将得到的执行结果返回给第一服务器,而后,第一服务器将各第二服务器返回的各执行结果,以及处理针对本地数据的任务分片得到的本地结果进行合并,得出最终结果。上述方法中第一服务器并不是独自来对创建出的任务进行执行的,而是将该任务进行拆分,并将拆分后的任务分片分发给各第二服务器,使得各第二服务器共同来完成对该任务的执行处理,因此有效的提高了服务器资源的利用率,并且,无需向各第二服务器的数据库进行多次访问,同时也无需对存储第二服务器数据的数据库进行跨域访问,从而提高了服务器对任务文件进行执行的效率。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。