一种任务调度方法及装置与流程



1.本发明涉及任务调度领域,尤其涉及一种任务调度方法及装置。


背景技术:



2.应用程序每天需处理大量任务,任务调度系统用于帮助应用程序调度以及处理任务。对任务的处理即为服务。合理调度任务是任务调度的关键。
3.现有任务调度系统可分为两种。一种任务调度系统指在指定的服务内按照任务优先级和其他相关属性对任务进行调度,这种任务调度系统扩展性差,无法充分利用集化的资源,当任务量达到负载量的上限时,任务调度系统只能将所有的任务进行排队,从而失去了调度的意义。另一种任务调度系统是基于机器的任务调度系统,这种基于机器的任务调度系统需要大量人工的监控和干预,无法快速响应变化的任务状态,此外,这种任务调度系统不能满足精细的任务调度需求。
4.综上可知,现有的两种任务调度系统均无法实现对任务的自动智能调度。


技术实现要素:



5.本发明实施例提供了一种任务调度方法及装置,用于实现对任务进行动态化调度以及智能化调度。
6.第一方面,本发明实施例提供一种任务调度方法,应用于服务器,所述服务器部署有n个服务模块,所述n为正整数,所述方法包括:接收待处理任务;确定所述待处理任务的任务信息、以及所述n个服务模块中各个服务模块的服务信息,所述服务信息包括所述服务模块的负载率;根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。
7.上述方案中,根据待处理任务的任务信息以及各个服务模块的服务信息,确定处理该待处理任务的服务模块,该服务模块可以是n个服务模块中的一个服务模块,也可以是创建的新的服务模块。然后将待处理任务分发至该确定的服务模块。该方法可以实现对任务的自动智能调度,将待处理任务分发至合适的服务模块。相较于现有技术,当任务量达到负载量的上限时,任务调度系统只能将所有的任务进行排队,从而失去了调度的意义,而本发明通过创建新的服务模块并将待处理任务分发至新的服务模块从而实现对任务的自动智能调度。
8.可选的,所述任务信息包括任务类型;所述服务模块的服务信息还包括所述服务模块的服务类型;所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,包括:确定所述待处理任务的任务类型;将与所述任务类型匹配的服务类型、且负载率小于第一阈值的服务模块确定为所述第一服务模块;将所述待处理任务分发至所述第一服务模块。
9.通过使用上述方法,可以选出与任务类型匹配的服务类型、且负载率小于第一阈
值的服务模块并作为第一服务模块。由于该第一服务模块的负载率小于第一阈值,表明该第一服务模块没有处于高负载运行状态,因此可以在较短时间内处理分发的待处理任务。
10.可选的,所述任务信息包括任务类型;所述服务模块的服务信息还包括所述服务模块的服务类型;所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块,包括:确定所述待处理任务的任务类型;确定与所述任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为所述待处理任务创建所述新的服务模块;将所述待处理任务分发至所述新的服务模块。
11.基于上述方案,可以在没有符合合适的与任务类型匹配的服务类型、且负载率小于第一阈值的服务模块的情况下,为待处理任务创建新的服务模块,并将待处理任务分发至新的服务模块去处理。在此方案中,n个服务模块中与待处理任务的任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,表明与任务类型匹配的服务类型的服务模块均处于高负载运行状态,无法在较短时间内处理待处理任务。因此,创建新的服务模块并将待处理任务分发至新的服务模块去处理有利于在较短时间内处理分发的待处理任务。
12.可选的,所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块之后,还包括:确定所述第一服务模块或所述新的服务模块处理所述待处理任务的第一进度;在预设时长内,若所述第一进度小于进度阈值,将所述待处理任务中未处理的任务迁移至第二服务模块,所述第二服务模块是所述n个服务模块中除所述第一服务模块以及所述新的服务模块外的服务模块,所述第二服务模块的服务类型与所述待处理任务的任务类型匹配、且所述第二服务模块的负载率小于第一阈值。
13.通过使用上述方法,可以实现将待处理任务进行动态智能调度。当待处理任务的第一进度小于进度阈值时,表明服务模块处理该待处理任务的处理进度较慢,通过将该待处理任务重新调度至其他服务模块实现对任务的动态智能调度。
14.可选的,所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块之后,还包括:确定所述第一服务模块或所述新的服务模块处理所述待处理任务的第一进度;在预设时长内,若所述第一进度小于进度阈值,且与所述任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为所述待处理任务创建第三服务模块;将所述待处理任务中未处理的任务迁移至第三服务模块。
15.通过使用上述方法,可以实现将待处理任务进行动态智能调度。当待处理任务的第一进度小于进度阈值时,表明服务模块处理该待处理任务的处理进度较慢,通过将该待处理任务重新调度至创建的新的服务模块实现对任务的动态智能调度。
16.可选的,方法还包括:若所述n个服务模块的负载率之和大于第二阈值,卸载第四服务模块,所述第四服务模块是所述n个服务模块中负载率最小的服务模块,所述n个服务模块是n个服务模块中属于同一个运算模块的n个;或者,若所述n个服务模块与所述新的服务模块的负载率之和大于第二阈值,卸载第五服务模块,所述第五服务模块是所述n个服务模块与所述新的服务模块中负载率最小的服务模块;或者,若所述n个服务模块能够处理的
任务量大于所述待处理任务的任务量,卸载所述n个服务模块中的空载服务模块;或者,若所述n个服务模块与所述新的服务模块能够处理的任务量大于所述待处理任务的任务量,卸载所述n个服务模块与所述新的服务模块中的空载服务模块。
17.通过使用上述方法,实现将高负载运行的运算模块的服务模块卸载,通过后续在低负载运行的运算模块加载相同的服务模块作为替代,实现对服务器资源的充分利用。此外,卸载空载服务模块有利于降低服务器的负荷。
18.可选的,所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块之前,还包括:若确定所述待处理任务有前置任务,或者所述n个服务模块中的等待任务量大于或等于等待任务量阈值,将所述待处理任务置于等待分发列表;若确定所述待处理任务无前置任务,且所述n个服务模块中的等待任务量小于等待任务量阈值,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。
19.通过使用上述方法,可将有前置任务的待处理任务先置于等待分发列表,当该待处理任务没有前置任务后,再将该待处理任务进行分发。
20.第二方面,本发明实施例提供了一种任务调度装置,该任务调度装置包括:获取单元,用于接收待处理任务;处理单元,用于确定所述待处理任务的任务信息、以及所述n个服务模块中各个服务模块的服务信息,所述服务信息包括所述服务模块的负载率;根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。
21.可选的,所述任务信息包括任务类型;所述服务模块的服务信息还包括所述服务模块的服务类型;所述处理单元,具体用于确定所述待处理任务的任务类型;将与所述任务类型匹配的服务类型、且负载率小于第一阈值的服务模块确定为所述第一服务模块;将所述待处理任务分发至所述第一服务模块。
22.可选的,所述任务信息包括任务类型;所述服务模块的服务信息还包括所述服务模块的服务类型;所述处理单元,具体用于确定所述待处理任务的任务类型;确定与所述任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为所述待处理任务创建所述新的服务模块;将所述待处理任务分发至所述新的服务模块。
23.可选的,所述处理单元,具体用于确定所述第一服务模块或所述新的服务模块处理所述待处理任务的第一进度;在预设时长内,若所述第一进度小于进度阈值,将所述待处理任务中未处理的任务迁移至第二服务模块,所述第二服务模块是所述n个服务模块中除所述第一服务模块以及所述新的服务模块外的服务模块,所述第二服务模块的服务类型与所述待处理任务的任务类型匹配、且所述第二服务模块的负载率小于第一阈值。
24.可选的,所述处理单元,具体用于确定所述第一服务模块或所述新的服务模块处理所述待处理任务的第一进度;在预设时长内,若所述第一进度小于进度阈值,且与所述任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为所述待处理任务创建第三服务模块;将所述待处理任务中未处理的任务迁移至第三服务模块。
25.可选的,所述处理单元,具体用于若所述n个服务模块的负载率之和大于第二阈
值,卸载第四服务模块,所述第四服务模块是所述n个服务模块中负载率最小的服务模块,所述n个服务模块是n个服务模块中属于同一个运算模块的n个;或者,若所述n个服务模块与所述新的服务模块的负载率之和大于第二阈值,卸载第五服务模块,所述第五服务模块是所述n个服务模块与所述新的服务模块中负载率最小的服务模块;或者,若所述n个服务模块能够处理的任务量大于所述待处理任务的任务量,卸载所述n个服务模块中的空载服务模块;或者,若所述n个服务模块与所述新的服务模块能够处理的任务量大于所述待处理任务的任务量,卸载所述n个服务模块与所述新的服务模块中的空载服务模块。
26.可选的,所述处理单元,具体用于若确定所述待处理任务有前置任务,或者所述n个服务模块中的等待任务量大于或等于等待任务量阈值,将所述待处理任务置于等待分发列表;若确定所述待处理任务无前置任务,且所述n个服务模块中的等待任务量小于等待任务量阈值,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。
27.第三方面,本发明实施例提供了一种计算设备,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述第一方面任一所述的任务调度方法。
28.第四方面,本发明实施例还提供了一种计算机可读存储介质,所述存储介质存储有程序,当所述程序在计算机上运行时,使得计算机实现执行上述第一方面任意所述的任务调度方法。
附图说明
29.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
30.图1为本发明实施例提供的一种任务调度系统的架构示意图;
31.图2为本发明实施例提供的一种任务调度方法的方法流程示意图;
32.图3为本发明实施例提供的一种可能的任务链的结构示意图;
33.图4为本发明实施例提供的一种分发待处理任务的方法流程示意图;
34.图5为本发明实施例提供的另一种分发待处理任务的方法流程示意图;
35.图6为本发明实施例提供的一种创建服务模块的方法流程示意图;
36.图7为本发明实施例提供的一种卸载服务模块的方法流程示意图;
37.图8为本发明实施例提供的一种控制模块的架构示意图;
38.图9为本发明实施例提供的一种运算模块的架构示意图;
39.图10为本发明实施例提供的一种任务调度装置的结构示意图;
40.图11为本发明实施例提供的一种计算设备的结构示意图。
具体实施方式
41.为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施
例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
42.如图1所示,为本发明实施例提供的一种任务调度系统的架构示意图。任务调度系统包括控制模块101、至少一个运算模块102以及通讯模块103。其中,通讯模块103用于控制模块101与至少一个运算模块102进行通信,例如控制模块101与至少一个运算模块102通过通信模块连接。控制模块101通过接口接收任务调度系统外的应用等的待处理任务,并将任务通过通讯模块103分发至运算模块102。运算模块102包括至少一个服务模块。服务模块用于处理任务,一个服务模块可以同时处理一个或多个任务。
43.在本发明实施例中,服务模块用于存储服务信息、服务信息、以及等待列表等。服务模块的服务信息包括服务模块的服务类型以及服务模块的负载值等。在一种可能的实施方式中,服务模块的负载值根据服务器的内存消耗占比、中央处理器(central processing unit,cpu)消耗占比以及网络消耗占比得出。将服务模块可负载的上限的负载值称为服务模块的上限负载值。服务模块的负载值与服务模块的上限负载值的比值为服务模块的负载率。当服务模块在满负载运行时,该服务模块的负载率为100%;当服务模块空载时,该服务模块的负载率为0%。在本发明实施例中,可以给服务模块设置负载率上限以避免服务模块在高负载运行时还要接收待处理任务,将设置的负载率上限称为第一阈值。例如,第一阈值设定为80%。
44.服务模块的服务信息还包括服务名、模块加载源、端口、检测接口以及启动方式。其中,服务名指服务模块的名字,模块加载源指用于加载服务模块的代码,启动方式指启动该服务模块的方式。在一种可能的实施方式中,服务信息置于任务调度系统的数据库中,通过调用数据库即可获取服务信息。值得注意的是,至少部分服务信息由技术人员人工管理与维护,可能存在服务信息中部分信息没有记录的情况,也即服务信息中的信息存在缺漏。此外,服务信息中的信息也存在格式不正确的情况。可能存在运算模块102的版本无法成功启动服务模块的情况。例如,当服务模块更新了启动方式但是服务信息中记录的启动方式没有及时更新,会导致无法成功启动服务模块。再例如,技术人员将服务信息记录错误,也会导致无法成功启动服务模块。
45.服务模块的等待列表用于记录等待被该服务模块处理的任务。可以理解的是,一个服务模块可同时处理有限个任务,将服务模块可同时处理任务量的上限称为该服务模块任务量阈值。若服务模块同时处理的任务量已达到该服务模块任务量阈值时又接收到了新的待处理的任务,则服务模块会将接收到的新的待处理的任务置于该服务模块的等待列表中。将服务模块的等待列表中的任务量称为等待任务量。值得注意的是,服务模块的等待列表可以接收有限个任务。在本发明实施例中,将服务模块的等待列表可接收的任务量的上限称为等待任务量阈值。
46.此外,按照功能,可将服务模块划分为不同的类型,例如用于计算的服务模块称为计算服务模块,用于流转的服务模块称为流转服务模块。流转服务模块可以实现数据迁移。
47.可选的,控制模块101可以部署于一台服务器,每个运算模块102分别单独部署于一台服务器。或者,控制模块101也可以与至少一个运算模块102部署于同一台服务器。
48.基于上述内容,如图2所示,为本发明实施例提供的一种任务调度方法的方法流程示意图。该方法适用于上述图1所示的任务调度系统。该方法包括以下步骤:
49.步骤201,接收待处理任务。
50.结合上述图1,控制模块101通过接口接收该待处理任务。任务可按照其任务类型被分类划分,常见的任务类型包括计算任务、流转任务。举例来说,待处理任务为将数据从数据库a迁移到数据库b,此待处理任务的任务类型为流转任务。在本发明实施例中,任务可以是一个单独的任务,也可以是一个任务链。若待处理任务是任务链,则将此待处理任务拆解为多个具体的任务。需要注意的是,任务可能有前置任务。前置任务指任务被处理前必须先完成的任务。在本发明实施例中,只有当任务没有前置任务时才可以被分发以及处理。
51.图3为本发明实施例提供的一种可能的任务链的结构示意图。任务链可被拆解为任务a、任务b、任务c与任务d。其中,任务a为任务b与任务c的前置任务,任务b为任务d的前置任务。举例来说,当任务a被处理完成后,任务b与任务c即没有前置任务,因此任务b与任务c可以开始被处理。基于同样的原理,当任务b被处理完成后任务d即没有前置任务,因此任务d可以开始被处理。于是,在本发明实施例中,对待处理任务进行分发时,会先将任务a进行分发并将任务b、任务c与任务d置于等待分发列表,关于等待分发列表的详细介绍可参见下述介绍,此处不再赘述;当任务a被处理完成后,再将任务b与任务c进行分发;当任务b被处理完成后,再将任务d进行分发。
52.步骤202,确定待处理任务的任务信息、以及所述n个服务模块中各个服务模块的服务信息。
53.具体地,待处理任务的任务信息包括任务类型以及待处理任务的任务量。关于任务类型和任务量可参见前述相关介绍,此处不再赘述。
54.结合上述图1,任务调度系统中包括的运算模块一共包括n个服务模块,其中n为正整数。关于服务模块的服务信息可参见前述相关介绍,此处不再赘述。
55.步骤203,根据任务信息以及n个服务模块中各个服务模块的服务信息,将待处理任务分发至第一服务模块,或者为待处理任务创建新的服务模块,并将待处理任务分发至新的服务模块。
56.在本发明实施例中,对待处理任务进行分发前,需要根据任务调度策略,判断对待处理任务进行分发还是将待处理任务置于等待分发列表。任务调度策略包括以下四种:
57.任务调度策略一:若待处理任务有前置任务,则将待处理任务置于等待分发列表。
58.关于前置任务的介绍可参见上述图3相关介绍,此处不再赘述。关于等待分发列表的详细介绍可参见下述介绍,此处不再赘述。
59.任务调度策略二:若n个服务模块中的等待任务量大于或等于等待任务量阈值,将待处理任务置于等待分发列表。关于服务模块中的等待任务量以及等待任务量阈值的详细介绍可参见前述相关介绍,此处不再赘述。
60.在本发明实施例中,当n个服务模块的等待任务量大于或等于等待任务量阈值,表明n个服务模块在满负载运行且有多个任务在等待n个服务模块运行处理。此时,若将待处理任务分发至服务模块,该待处理任务将需等待较长时间才可被运行。因此,在本发明实施例中,若n个服务模块中的等待任务量大于或等于等待任务量阈值,将所述待处理任务置于等待分发列表暂不分发至服务模块。
61.举例来说,假设有4个服务模块,每个服务模块的等待任务量阈值为5个,故4个服务模块的等待任务量阈值为20个。若4个服务模块的等待任务量已达到20个,则将待处理任
务置于等待分发列表暂不分发至服务模块;若4个服务模块的等待任务量未达到20个,则将待处理任务分发至服务模块。
62.任务调度策略三:若待处理任务无前置任务,且n个服务模块中的等待任务量小于等待任务量阈值,将待处理任务分发至第一服务模块。
63.具体地,若待处理任务无前置任务,且n个服务模块中的等待任务量小于等待任务量阈值,则分发待处理任务。关于分发待处理任务的方法流程可参见下述图4,此处不再赘述。
64.如图4所示,为本发明实施例提供的一种分发待处理任务的方法流程示意图。该方法包括以下步骤:
65.步骤401,确定待处理任务的任务类型。
66.具体地,确定待处理任务的任务类型。关于任务类型的详细介绍可参见前述相关介绍,此处不再赘述。
67.步骤402,将与任务类型匹配的服务类型、且负载率小于第一阈值的服务模块确定为第一服务模块。
68.具体地,在n个服务模块中,将与任务类型匹配的服务类型、且负载率小于第一阈值的服务模块确定为第一服务模块。关于第一阈值的设定可参见前述步骤202中的详细介绍,此处不再赘述。第一服务模块可以是一个服务模块,也可以是多个服务模块。当待处理任务为一个任务时,将待处理任务分发至一个第一服务模块;当待处理任务为多个任务时,可以将多个任务分发至同一个第一服务模块,也可以将多个任务分发至多个第一服务模块中。值得注意的是,若n个服务模块中有多个服务模块满足要求,则从满足要求的多个服务模块中随机选取其中的一个服务模块或多个服务模块作为第一服务模块。
69.在一种可能的实施方式中,可以先确认与任务类型匹配的服务类型的服务模块,再将上述满足条件的服务模块中负载率小于第一阈值的服务模块确定为第一服务模块。
70.举例来说,假设一共有5个服务模块,包括服务模块1(服务类型:计算;负载率:80%),服务模块2(服务类型:流转;负载率:50%),服务模块3(服务类型:流转;负载率:20%),服务模块4(服务类型:计算;负载率:80%),以及服务模块5(服务类型:计算;负载率:20%)。服务模块的第一阈值设定为80%。假设待处理任务为单个任务,且待处理任务的任务类型为计算任务。首先,5个服务模块中与任务类型匹配的服务类型的服务模块包括服务模块1、服务模块4与服务模块5,上述3个满足条件的服务模块中负载率小于第一阈值的服务模块仅有服务模块5,故将服务模块5作为待处理任务的第一服务模块。
71.在一种可能的实施方式中,也可以先确认负载率小于第一阈值的服务模块,再将上述满足条件的服务模块中与任务类型匹配的服务类型的服务模块确定为第一服务模块。
72.举例来说,假设一共有5个服务模块,包括服务模块1(服务类型:计算;负载率:80%),服务模块2(服务类型:流转;负载率:50%),服务模块3(服务类型:流转;负载率:20%),服务模块4(服务类型:计算;负载率:80%),以及服务模块5(服务类型:计算;负载率:20%)。服务模块的第一阈值设定为80%。假设待处理任务包括任务1与任务2,其中任务1的任务类型为计算任务,任务2的任务类型为流转任务。首先,确认负载率小于第一阈值的服务模块,可以得到服务模块2、服务模块3与服务模块5满足条件。接着,在上述满足条件的3个服务模块中,服务模块5为计算服务模块与任务1的任务类型匹配,因此将任务1分发至
服务模块5;服务模块2与服务模块3均为流转服务模块故均可以处理任务2,随机将任务2分发至服务模块2。因此,在本举例说明中,服务模块2与服务模块5为待处理任务的第一服务模块。
73.需要说明的是,也可以同时确认服务模块的负载率与第一阈值的关系、以及匹配服务类型与任务类型。
74.步骤403,将待处理任务分发至第一服务模块。
75.具体地,通过任务分发指令将待处理任务分发至第一服务模块。任务分发指令包括待处理任务以及上述步骤402所确认的第一服务模块。结合上述图1,控制模块101确定将待处理任务分发至第一服务模块并生成相应的任务分发指令,通过通讯模块103将任务分发指令传递到运算模块102,运算模块102根据任务分发指令将待处理任务分发至第一服务模块。
76.通过上述步骤401至步骤403,可以确定第一服务模块并将待处理任务分发至第一模块。
77.任务调度策略四:若确定所述待处理任务无前置任务,且所述n个服务模块中的等待任务量小于等待任务量阈值,且服务模块负载率均高于第一阈值,为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。关于分发待处理任务的方法流程可参见下述图5,此处不再赘述。
78.如图5所示,为本发明实施例提供的另一种分发待处理任务的方法流程示意图。该方法包括以下步骤:
79.步骤501,确定待处理任务的任务类型。
80.具体地,确定待处理任务的任务类型。关于任务类型的详细介绍可参见前述相关介绍,此处不再赘述。
81.步骤502,确定与任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为待处理任务创建新的服务模块。
82.具体地,若n个服务模块中,与任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,则为待处理任务创建新的服务模块。关于第一阈值的设定可参见前述步骤202中的详细介绍,此处不再赘述。
83.举例来说,假设一共有5个服务模块,包括服务模块1(服务类型:计算;负载率:85%),服务模块2(服务类型:流转;负载率:50%),服务模块3(服务类型:流转;负载率:20%),服务模块4(服务类型:计算;负载率:85%),以及服务模块5(服务类型:计算;负载率:90%)。服务模块的第一阈值设定为80%。假设待处理任务为单个任务,且待处理任务的任务类型为计算任务。5个服务模块中与任务类型匹配的服务类型的服务模块包括服务模块1、服务模块4与服务模块5,但将上述3个服务模块的负载率与第一阈值比较可知,上述3个服务模块的负载率均大于第一阈值。因此,为待处理任务创建新的服务模块,新的服务模块的服务类型为计算服务。结合上述图1,控制模块101确定创建新的服务模块并生成服务模块加载指令,通过通讯模块103将服务模块加载指令传递到运算模块102,运算模块102根据服务加载指令创建新的服务模块。
84.关于创建新的服务模块的详细过程可参见下述图6,此处不再赘述。
85.步骤503,将待处理任务分发至新的服务模块。
86.具体地,通过任务分发指令将待处理任务分发至新的服务模块。任务分发指令包括待处理任务以及上述步骤503所创建的新的服务模块。结合上述图1,控制模块101确定将待处理任务分发至新的服务模块并生成相应的任务分发指令,通过通讯模块103将任务分发指令传递到运算模块102,运算模块102根据任务分发指令将待处理任务分发至新的服务模块。
87.通过上述步骤501至步骤503,可以为待处理任务创建新的服务模块,并将待处理任务分发至所述新的服务模块。
88.如图6所示,为本发明实施例提供的一种创建服务模块的方法流程示意图。该方法包括以下步骤:
89.步骤601,获取服务模块加载指令。
90.具体地,获取上述步骤502中用于创建新的服务模块的服务模块加载指令。
91.步骤602,根据服务模块加载指令,获取模块加载源。
92.具体地,根据服务模块加载指令,确定要创建的新的服务模块并获取要创建的新的服务模块的服务信息。关于服务模块的服务信息可参见上述介绍,此处不再赘述。根据服务信息,获取该服务模块的模块加载源。
93.步骤603,根据服务模块加载指令以及模块加载源,创建新的服务模块。
94.具体地,结合图1,根据服务模块加载指令以及模块加载源,在运算模块102中创建新的服务模块。
95.步骤604,对新的服务模块进行模块校验,判断是否可以启动该模块。若判断不可以启动该模块则执行步骤605,若判断可以启动该模块则执行步骤606。
96.具体地,对新的服务模块进行模块校验,判断新的服务模块的服务信息是否存在信息缺漏或者信息格式不正确的情况,以及,结合图1,判断运算模块102的版本是否可以启动此新的服务模块。若新的服务模块的服务信息存在信息缺漏或者信息格式不正确的情况,或者,运算模块102的版本无法启动该服务模块,则执行步骤605。否则,执行步骤606。
97.步骤605,不启动该模块,并对错误进行告警。
98.步骤606,启动该服务模块。
99.具体地,按照该服务模块的服务信息中的启动方式启动该服务模块。
100.步骤607,判断该服务模块是否启动成功。
101.具体地,判断该服务模块是否启动成功,若该服务模块没有启动成功,则执行步骤608;若该服务模块启动成功,则执行步骤611。
102.步骤608,间隔一段时间重新启动该服务模块。
103.具体地,间隔一段时间再次按照该服务模块的服务信息中的启动方式重新启动该服务模块。可选的,间隔的一段时间可自定义配置,例如一分钟。
104.步骤609,判断该服务模块是否启动成功。
105.具体地,判断该服务模块是否启动成功,若该服务模块没有启动成功,则执行步骤610;若该服务模块启动成功,则执行步骤611。
106.步骤610,对错误进行告警。
107.具体地,对无法启动服务模块的错误进行告警。
108.步骤611,对该服务模块进行健康校验。
109.具体地,根据该服务模块的服务信息,确定该服务模块的检测接口。根据检测接口判断该服务模块是否可以被调用。判断服务模块是否可以被调用的过程即为健康检验。
110.步骤612,判断是否通过健康检验。
111.具体地,若根据检测接口无法调用服务模块,即为不通过健康检验,表明该服务模块没有被成功创建,执行步骤613;若根据检测接口可以调用服务模块,即为通过健康检验,表明该服务模块被成功创建,执行步骤614。
112.步骤613,对错误进行告警。
113.具体地,对该服务模块不通过健康检验的错误进行告警。
114.步骤614,将该服务模块注册到运算模块,并将消息汇报给控制模块。
115.结合图1,将创建的新的服务模块运算模块102,并将此消息汇报给控制模块101。
116.通过步骤601至步骤614,可以创建出新的服务模块。
117.将待处理的任务分发至第一服务模块或者新的服务模块后,还要跟踪维护待处理任务的处理进度。可选的,处理进度可以是任务完成百分比。设置一个预设时长,在预设时长内,可接受的服务模块处理任务的最小进度称为进度阈值。当服务模块在预设时长内处理任务的进度高于进度阈值,表明该任务正在被服务模块正常处理。当服务模块在预设时长内处理任务的进度低于进度阈值,表明该服务模块可能处于高负载运行状态,该任务无法被服务模块正常处理,则需要对带任务进行任务调度。将预设时长内服务模块处理待处理任务的处理进度称为第一进度。
118.在预设时长内,若所述第一进度低于进度阈值,将所述待处理任务中未处理的任务迁移至第二服务模块,或为该待处理任务中未处理的任务创建新的服务模块,并将待处理任务中未处理的任务迁移至所述新的服务模块。关于将待处理任务中未处理的任务迁移至第二服务模块的过程可参见上述图4将待处理任务分发至第一服务模块的过程,具体可用“第二服务模块”代替“第一服务模块”。关于为待处理任务中未处理的任务创建新的服务模块过程可参见上述图5创建新的服务模块的过程。
119.举例说明,假设预设时长为1分钟,可接受的服务模块处理任务的最小进度即进度阈值为2%。若第一进度为5%,则表明该待处理任务正在被服务模块正常处理;若第一进度为1%,则表明该待处理任务无法被服务模块正常处理,此时需要将该待处理任务中未处理的任务迁移至第二服务模块或为该待处理任务中未处理的任务创建新的服务模块,并将待处理任务中未处理的任务迁移至所述新的服务模块。
120.在任务调度中,还需实时对运算模块以及运算模块中的服务模块进行维护。若运算模块出现下述卸载条件,则需卸载服务模块。卸载条件包括以下两种情况:
121.卸载条件一:若运算模块的负载率大于第二阈值,则卸载第四服务模块。其中,运算模块的负载率指该运算模块中的n个服务模块的负载率之和。第二阈值指运算模块的可接受的负载率上限。当运算模块的负载率大于第二阈值时,说明该运算模块处于高负载运行模式,需要卸载运算模块中的服务模块以使该运算模块的负载率低于第二阈值。将需要卸载运算模块中的服务模块称为第四服务模块。可选地,第四服务模块可以是该运算模块中负载率最小的服务模块,第四服务模块也可以是该运算模块中执行任务时间超过预设执行任务时间阈值最多的服务模块。具体地,执行任务时间指服务模块处理一个任务所用时间。预设执行任务时间阈值指可接受的服务模块处理一个任务所用的最长时间。
122.值得注意的是,若负载率大于第二阈值的运算模块不仅包括n个服务模块中的n个服务模块,还包括新加载的服务模块,则运算模块的负载率指该运算模块中的n个服务模块以及新加载的服务模块的负载率之和。当运算模块的负载率大于第二阈值时,说明该运算模块处于高负载运行模式,需要卸载运算模块中的服务模块以使该运算模块的负载率低于第二阈值。将需要卸载运算模块中的服务模块称为第五服务模块。第五服务模块的选择标准可参见前述第四服务模块的选择标准,此处不再赘述。
123.卸载条件二:若所有服务模块能够处理的任务量大于待处理任务的任务量,则卸载所有服务模块与中的空载服务模块。
124.详细地,若无创建新的服务模块,且n个服务模块能够处理的任务量大于所述待处理任务的任务量,则卸载所述n个服务模块中的空载服务模块。
125.或者,若有创建新的服务模块,且n个服务模块与新的服务模块能够处理的任务量大于所述待处理任务的任务量,卸载所述n个服务模块与所述新的服务模块中的空载服务模块。
126.如图7所示,为本发明实施例提供的一种卸载服务模块的方法流程示意图。该方法包括以下步骤:
127.步骤701,获取服务模块卸载指令。
128.具体地,获取用于卸载服务模块的服务模块卸载指令,确定要卸载的服务模块。服务模块卸载指令中包括要卸载的服务模块。
129.步骤702,调用该服务模块的终止命令。
130.具体地,通过数据库,调用上述要卸载的服务模块的终止命令使该服务模块终止运行。
131.步骤703,返回该服务模块中所有任务的最新的运行进度。
132.具体地,在终止服务模块的运行时,该服务模块可能正在处理任务。终止服务模块的运行后,返回该服务模块中所有任务的最新的运行进度。
133.结合图1,运算模块102向控制模块101返回上述要卸载的服务模块中所有任务的最新的运行进度。通过这个步骤,可以使得运算模块102获得该服务模块中所有任务的最新的运行进度。因此,当运算模块102将上述所有任务进行重新调度至其他服务模块时,可以实现将任务中未处理的任务迁移至第二服务模块或新的服务模块。关于任务的重新调度可参见上述介绍,此处不再赘述。
134.步骤704,对该服务模块进行健康校验。
135.对服务模块进行健康校验的详细介绍可参见上述步骤611,此处不再赘述。
136.步骤705,判断是否通过健康检验。若通过健康检验则执行步骤706,若不通过健康检验则执行步骤707。
137.具体地,若根据检测接口可以调用服务模块,即为通过健康检验,表明该服务模块没有被成功卸载,执行步骤706。若根据检测接口无法调用服务模块,即为不通过健康检验,表明该服务模块被成功卸载,执行步骤707;
138.步骤706,对错误进行告警。
139.具体地,对没有成功卸载服务模块的错误进行告警。
140.步骤707,将该服务模块从运算模块中移除,并将消息汇报给控制模块。
141.结合图1,将该服务模块从运算模块102中移除,并将成功卸载该服务模块的消息汇报给控制模块101。
142.通过步骤701至707,可以卸载服务模块。
143.如图8所示,为本发明实施例提供的一种控制模块的架构示意图。
144.控制模块800包括运算模块管理器801、任务管理器802、智能分派器803以及负载平衡器804。其中,运算模块管理器801用于管理所有运算模块的信息、管理运算模块中所有服务模块的服务信息。任务管理器802用于接收待处理任务,若待处理任务为任务链,则进一步将待处理任务拆解为多个具体任务;任务管理器802还可用于对任务的跟踪维护,任务管理器802包括等待分发列表和运行列表,任务管理器802会将未被处理的任务置于等待分发列表,将正在被处理的任务置于运行列表。智能分派器803用于根据所述运算模块的信息以及运算模块中服务模块的信息将任务分配给运算模块中的服务模块。负载平衡器804用于对任务进行重新调度。
145.如图9所示,为本发明实施例提供的一种运算模块的架构示意图。运算模块900包括任务管理器901、运算管理器902、服务模块池903、服务模块管理器904、应用编程接口(application programming interface,api)905。任务管理器901用于在接收到控制模块的任务后,向对应的服务模块分派任务。值得注意的是,如果该任务已经有运行进度,则添加上运行进度一起提交。此外,任务管理器901也用于维护任务的处理进度。运算管理器902用于维护运算模块的信息以及服务模块的信息以及任务的信息。关于运算模块的信息以及服务模块的信息可参见上述介绍,此处不再赘述。任务的信息包括任务的当前运行状态和处理进度。此外,运算管理器902还用于定时向控制模块同步消息,所述消息包括运算模块的信息以及服务模块的信息以及任务的信息。服务模块池903包括该运算模块中所有的服务模块。服务模块管理器904用于管理服务模块的创建、卸载、恢复以及健康检测。其中,关于服务模块的创建、卸载以及健康检测的过程相关介绍可参见前述相关介绍,此处不再赘述。服务模块的恢复指对服务模块进行重新启动。服务模块管理器对该无法调用的服务模块进行卸载并重新加载,使该服务模块可正常运行以及被调用,这个过程称为对服务模块的恢复。api接口905用于提供管理端访问运算模块的接口,当出现意外情况,例如机房停电,可以通过api接口可以使管理员访问运算模块。
146.基于上述同样的发明构思,本发明实施例还提供一种任务调度装置,该装置可执行上述发明实施例中的方法。本发明实施例提供的一种任务调度装置的结构可参见图10。任务调度装置1000包括获取单元1001和处理单元1002。其中,获取单元1001用于接收待处理任务;处理单元1002用于确定所述待处理任务的任务信息、以及所述n个服务模块中各个服务模块的服务信息,所述服务信息包括所述服务模块的负载率;根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。
147.有关上述获取单元1001和处理单元1002更详细的描述可以参考图2所示的方法实施例中相关描述直接得到,此处不再一一赘述。
148.基于相同的技术构思,本发明实施例还提供了一种计算设备,如图11所示,计算设备1100包括至少一个处理器1101,以及与至少一个处理器连接的存储器1102,本发明实施例中不限定处理器1101与存储器1102之间的具体连接介质,图11中处理器1101和存储器
1102之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
149.在本发明实施例中,存储器1102存储有可被至少一个处理器1101执行的指令,至少一个处理器1101通过执行存储器1102存储的指令,可以执行前述的任务调度方法中所包括的步骤。
150.其中,处理器1101是计算设备的控制中心,可以利用各种接口和线路连接计算设备的各个部分,通过运行或执行存储在存储器1102内的指令以及调用存储在存储器1102内的数据,从而实现任务调度。可选的,处理器1101可包括一个或多个处理单元,处理器1101可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理下发指令。可以理解的是,上述调制解调处理器也可以不集成到处理器1101中。在一些实施例中,处理器1101和存储器1102可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
151.处理器1101可以是通用处理器,例如中央处理器(central processing unit,cpu)、数字信号处理器、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合任务调度方法实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
152.存储器1102作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器1102可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(random access memory,ram)、静态随机访问存储器(static random access memory,sram)、可编程只读存储器(programmable read only memory,prom)、只读存储器(read only memory,rom)、带电可擦除可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、磁性存储器、磁盘、光盘等等。存储器1102是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器1102还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
153.基于相同的技术构思,本发明实施例还提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述任务调度方法的步骤。
154.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的保护范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
155.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
156.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程
图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
157.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
158.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
159.尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
160.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

技术特征:


1.一种任务调度方法,其特征在于,应用于服务器,所述服务器部署有n个服务模块,所述n为正整数,所述方法包括:接收待处理任务;确定所述待处理任务的任务信息、以及所述n个服务模块中各个服务模块的服务信息,所述服务信息包括所述服务模块的负载率;根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。2.根据权利要求1所述的方法,其特征在于,所述任务信息包括任务类型;所述服务模块的服务信息还包括所述服务模块的服务类型;所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,包括:确定所述待处理任务的任务类型;将与所述任务类型匹配的服务类型、且负载率小于第一阈值的服务模块确定为所述第一服务模块;将所述待处理任务分发至所述第一服务模块。3.根据权利要求1所述的方法,其特征在于,所述任务信息包括任务类型;所述服务模块的服务信息还包括所述服务模块的服务类型;所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块,包括:确定所述待处理任务的任务类型;确定与所述任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为所述待处理任务创建所述新的服务模块;将所述待处理任务分发至所述新的服务模块。4.根据权利要求1所述的方法,其特征在于,所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块之后,还包括:确定所述第一服务模块或所述新的服务模块处理所述待处理任务的第一进度;在预设时长内,若所述第一进度小于进度阈值,将所述待处理任务中未处理的任务迁移至第二服务模块,所述第二服务模块是所述n个服务模块中除所述第一服务模块以及所述新的服务模块外的服务模块,所述第二服务模块的服务类型与所述待处理任务的任务类型匹配、且所述第二服务模块的负载率小于第一阈值。5.根据权利要求1所述的方法,其特征在于,所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块之后,还包括:确定所述第一服务模块或所述新的服务模块处理所述待处理任务的第一进度;在预设时长内,若所述第一进度小于进度阈值,且与所述任务类型匹配的服务类型的服务模块的负载率均大于第一阈值,为所述待处理任务创建第三服务模块;将所述待处理任务中未处理的任务迁移至第三服务模块。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:若所述n个服务模块的负载率之和大于第二阈值,卸载第四服务模块,所述第四服务模块是所述n个服务模块中负载率最小的服务模块,所述n个服务模块是n个服务模块中属于同一个运算模块的n个;或者,若所述n个服务模块与所述新的服务模块的负载率之和大于第二阈值,卸载第五服务模块,所述第五服务模块是所述n个服务模块与所述新的服务模块中负载率最小的服务模块;或者,若所述n个服务模块能够处理的任务量大于所述待处理任务的任务量,卸载所述n个服务模块中的空载服务模块;或者,若所述n个服务模块与所述新的服务模块能够处理的任务量大于所述待处理任务的任务量,卸载所述n个服务模块与所述新的服务模块中的空载服务模块。7.根据权利要求1~6任一项所述的方法,其特征在于,所述根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块之前,还包括:若确定所述待处理任务有前置任务,或者所述n个服务模块中的等待任务量大于或等于等待任务量阈值,将所述待处理任务置于等待分发列表;若确定所述待处理任务无前置任务,且所述n个服务模块中的等待任务量小于等待任务量阈值,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。8.一种任务调度装置,其特征在于,包括:获取单元,用于接收待处理任务;处理单元,用于确定所述待处理任务的任务信息、以及所述n个服务模块中各个服务模块的服务信息,所述服务信息包括所述服务模块的负载率;根据所述任务信息以及所述n个服务模块中各个服务模块的服务信息,将所述待处理任务分发至第一服务模块,或者为所述待处理任务创建新的服务模块,并将所述待处理任务分发至所述新的服务模块。9.一种计算设备,其特征在于,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1至7任一权利要求所述的方法。10.一种计算机可读存储介质,其特征在于,所述存储介质存储有程序,当所述程序在计算机上运行时,使得计算机实现执行权利要求1至7任一项所述的方法。

技术总结


本发明实施例公开一种任务调度方法及装置,可以应用于任务调度领域,用于解决现有技术中无法实现对任务进行动态智能调度的问题。方法包括:接收待处理任务;确定待处理任务的任务信息、以N个服务模块中各个服务模块的服务信息,服务信息包括服务模块的负载率;根据任务信息以及N个服务模块中各个服务模块的服务信息,将待处理任务分发至第一服务模块,或者为待处理任务创建新的服务模块,并将待处理任务分发至新的服务模块。本方法根据待处理任务的任务信息以及各个服务模块的服务信息,确定处理该待处理任务的服务模块,然后将待处理任务分发至该确定的服务模块,从而可以实现对任务的自动智能调度。任务的自动智能调度。任务的自动智能调度。


技术研发人员:

沙永祥 汤红平 林佩 刘懿霆 程铭 李松波 裴华 赵萌

受保护的技术使用者:

银联智策顾问(上海)有限公司

技术研发日:

2022.09.13

技术公布日:

2023/3/24

本文发布于:2024-09-22 18:29:15,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/78333.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模块   所述   阈值   负载
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议