发明内容
本发明实施例提供了任务调度的方法及装置、分布式任务执行系统,能够提高工作效率。
第一方面,本发明实施例提供了一种任务调度的方法,包括:
当接收到请求节点发来的任务请求时,执行:
确定每个任务的当前任务规模;
确定执行每个所述任务的节点的当前第一数量;
根据每个所述任务的当前任务规模和每个所述任务对应的所述当前第一数量,确定每个所述任务的当前权重;
按照每个所述任务的当前权重,为所述请求节点分配目标任务。
进一步地,
所述确定每个任务的当前任务规模,包括:
确定每个所述任务中当前等待下载的链接的当前第二数量;
所述根据每个所述任务的当前任务规模和每个所述任务对应的所述当前第一数量,确定每个所述任务的当前权重,包括:
根据所述当前第一数量和所述当前第二数量,利用公式一确定每个所述任务的当前权重,其中,所述公式一为:
其中,Wi为第i个任务的当前权重,Ni为第i个任务的当前第一数量,Li为第i个任务的当前第二数量,a大于1。
进一步地,该方法进一步包括:预先设置已发送队列和任务队列;
在所述按照每个所述任务的当前权重,为所述请求节点分配目标任务之后,进一步包括:
将所述目标任务中当前等待下载的至少一个链接保存到所述任务队列中;
进一步包括:
当所述请求节点从所述任务队列中获取至少一个待处理链接时,将所述至少一个待处理链接转移到所述已发送队列中;
进一步包括:
当接收到所述请求节点发来的处理完成信号时,将所述处理完成信号对应的所述待处理链接从所述已发送队列中删除;
进一步包括:
实时判断所述已发送队列中是否存在存储时间超过第一预设时长的超时待处理链接,如果存在,则将所述超时待处理链接转移到所述任务队列中。
进一步地,该方法进一步包括:
接收各个节点周期性发来的心跳信号;
进一步包括:
针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长,如果是,则确定所述当前节点没有执行任何任务。
进一步地,所述按照每个所述任务的当前权重,为所述请求节点分配目标任务,包括:
按照每个所述任务的当前权重,确定所述目标任务;
将所述目标任务的标识发送给所述请求节点,以使所述请求节点根据所述目标任务的标识获取所述目标任务。
进一步地,所述按照每个所述任务的当前权重,为所述请求节点分配目标任务,包括:
将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点。
进一步地,
所述任务请求中包括:所述请求节点的前一次被分配的任务的信息;
进一步包括:
根据所述任务请求中的所述前一次被分配的任务的信息,确定所述前一次被分配的任务;
在所述针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长之后,进一步包括:
当距离所述当前节点的最近一次的心跳信号的时间长度没有超过所述第二预设时长时,确定所述当前节点为活动的节点;
所述按照每个所述任务的当前权重,为所述请求节点分配目标任务,包括:
根据公式二,确定权重阈值,其中,所述公式二为:
其中,T为所述权重阈值,n为所述活动的节点的数量;
确定各个所述任务的当前权重中的最大值与所述前一次被分配的任务的当前权重的差值;
判断所述差值是否大于等于所述权重阈值,如果是,则将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点,否则,保持所述请求节点执行所述前一次被分配的任务。
第二方面,本发明实施例提供了一种任务调度的装置,包括:
请求接收单元、参数确定单元、权重确定单元和分配单元;
所述请求接收单元,用于接收到请求节点发来的任务请求,触发所述参数确定单元;
所述参数确定单元,用于确定每个任务的当前任务规模,确定执行每个所述任务的节点的当前第一数量;
所述权重确定单元,用于根据所述参数确定单元确定出的每个所述任务的当前任务规模和每个所述任务对应的所述当前第一数量,确定每个所述任务的当前权重;
所述分配单元,用于按照所述权重确定单元确定出的每个所述任务的当前权重,为所述请求节点分配目标任务。
进一步地,
所述参数确定单元,用于确定每个所述任务中当前等待下载的链接的当前第二数量;
所述权重确定单元,用于根据所述参数确定单元确定出的所述当前第一数量和所述当前第二数量,利用公式一确定每个所述任务的当前权重,其中,所述公式一为:
其中,Wi为第i个任务的当前权重,Ni为第i个任务的当前第一数量,Li为第i个任务的当前第二数量,a大于1。
进一步地,
该装置进一步包括:已发送队列和任务队列;
进一步包括:
任务队列单元,用于将所述目标任务中当前等待下载的至少一个链接保存到所述任务队列中;
进一步包括:
转移单元,用于当所述请求节点从所述任务队列中获取至少一个待处理链接时,将所述至少一个待处理链接转移到所述已发送队列中;
进一步包括:
删除单元,用于当接收到所述请求节点发来的处理完成信号时,将所述处理完成信号对应的所述待处理链接从所述已发送队列中删除;
进一步包括:
已发送队列单元,用于实时判断所述已发送队列中是否存在存储时间超过第一预设时长的超时待处理链接,如果存在,则将所述超时待处理链接转移到所述任务队列中。
进一步地,
所述分配单元,用于按照每个所述任务的当前权重,确定所述目标任务,将所述目标任务的标识发送给所述请求节点,以使所述请求节点根据所述目标任务的标识获取所述目标任务。
进一步地,
所述分配单元,用于将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点。
进一步地,
该装置进一步包括:
心跳接收单元,用于接收各个节点周期性发来的心跳信号;
进一步包括:
超时判断单元,用于针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长,如果是,则确定所述当前节点没有执行任何任务,否则,确定所述当前节点为活动的节点;
所述任务请求中包括:所述请求节点的前一次被分配的任务的信息;
进一步包括:
任务确定单元,用于根据所述任务请求中的所述前一次被分配的任务的信息,确定所述前一次被分配的任务;
所述分配单元,用于:
根据公式二,确定权重阈值,其中,所述公式二为:
其中,T为所述权重阈值,n为所述活动的节点的数量;
确定各个所述任务的当前权重中的最大值与所述前一次被分配的任务的当前权重的差值;
判断所述差值是否大于等于所述权重阈值,如果是,则将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点,否则,保持所述请求节点执行所述前一次被分配的任务。
第三方面,本发明实施例提供了一种分布式任务执行系统,包括:
第二方面中任一所述的任务调度的装置和至少一个节点;
所述至少一个节点,用于向所述任务调度的装置发送任务请求,在所述任务调度的装置分配目标任务时,执行所述目标任务。
在本发明实施例中,在为请求节点分配目标任务时,根据各个任务的当前任务规模和执行各个任务的节点的当前第一数量,确定出各个任务的当前权重,按照各个任务的当前权重为请求节点分配目标任务,通过当前权重来确定各个任务之间的优先级,避免了各个任务平等处理的情况,能够提高工作效率。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种任务调度的方法,当接收到请求节点发来的任务请求时,执行:
步骤101:确定每个任务的当前任务规模;
步骤102:确定执行每个所述任务的节点的当前第一数量;
步骤103:根据每个所述任务的当前任务规模和每个所述任务对应的所述当前第一数量,确定每个所述任务的当前权重;
步骤104:按照每个所述任务的当前权重,为所述请求节点分配目标任务。
在本发明实施例中,在为请求节点分配目标任务时,根据各个任务的当前任务规模和执行各个任务的节点的当前第一数量,确定出各个任务的当前权重,按照各个任务的当前权重为请求节点分配目标任务,通过当前权重来确定各个任务之间的优先级,避免了各个任务平等处理的情况,能够提高工作效率。
在本发明一实施例中,所述按照每个所述任务的当前权重,为所述请求节点分配目标任务,包括:
将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点。
在本发明实施例中,以各个任务的当前权重来给各个任务进行排序,当前权重越大的,越优先被处理。而当前权重是根据任务的当前任务规模和执行任务的节点的当前第一数量来确定,使得确定出的权重更加合理,任务调度过程更加合理,能够提高任务的处理效率。
在本发明一实施例中,所述确定每个任务的当前任务规模,包括:
确定每个所述任务中当前等待下载的链接的当前第二数量;
所述根据每个所述任务的当前任务规模和每个所述任务对应的所述当前第一数量,确定每个所述任务的当前权重,包括:
根据所述当前第一数量和所述当前第二数量,利用公式一确定每个所述任务的当前权重,其中,所述公式一为:
其中,Wi为第i个任务的当前权重,Ni为第i个任务的当前第一数量,Li为第i个任务的当前第二数量,a大于1。
在本发明实施例中,将任务中当前等待下载的链接的当前第二数量作为任务的当前任务规模。有些任务可能已经被分配给了某些节点,随着这些节点对任务的处理,任务的等待下载的链接会减少,任务的当前第二数量是动态变化的;随着任务分配过程的进行,执行每个任务的当前第一数量也是在动态变化的。由公式一可知,执行任务的节点的当前第一数量越多,任务的权重越小,也就是说,已经有很多节点在执行该任务了,在进行任务调度时,可以优先处理对应的执行任务的节点较少的任务。由公式一可知,任务中当前等待下载的链接的当前第二数量越多,任务的权重越大,也就是说,完成任务所需要的工作量越大,权重越大,对于这些需要较大工作量的任务,优先处理。
在本发明一实施例中,a的取值范围为[2,10],例如:a可以为2、3、4、5、6、7、8、9、10等。
另外,在本发明实施例中,当Ni为0时,Wi为无穷大。也就是说,如果一个任务还没有被分配过,则该任务的权重是无穷大的,优先进行分配。
在本发明一实施例中,对于Ni为0情况,可以使得Wi为预设权重。具体地,该预设权重可以是用于存储任务中的链接的任务队列的最大容量。例如:任务A中在没有被分配给任何节点时,任务A中有10个链接,这时,存储任务A的任务队列的容量需要大于等于10,那么,预设权重也大于等于10。
在本发明一实施例中,该方法进一步包括:预先设置已发送队列和任务队列;
在所述按照每个所述任务的当前权重,为所述请求节点分配目标任务之后,进一步包括:
将所述目标任务中当前等待下载的至少一个链接保存到所述任务队列中;
进一步包括:
当所述请求节点从所述任务队列中获取至少一个待处理链接时,将所述至少一个待处理链接转移到所述已发送队列中;
进一步包括:
当接收到所述请求节点发来的处理完成信号时,将所述处理完成信号对应的所述待处理链接从所述已发送队列中删除;
进一步包括:
实时判断所述已发送队列中是否存在存储时间超过第一预设时长的超时待处理链接,如果存在,则将所述超时待处理链接转移到所述任务队列中。
在本发明实施例中,通过任务队列来保存已经被分配的目标任务,请求节点从任务队列获取需要下载的待处理链接,这时,被取出的待处理链接会从任务队列中删除,并存储到已发送队列中。请求节点处理完某个待处理链接时,将该待处理链接从已发送队列中删除,如果检测到已发送队列中存在超时待处理链接时,则将超时待处理链接存储到任务队列中,使得超时待处理链接成为待处理链接,能够重新被节点获取。超时待处理链接的存在可能是由于处理该链接的节点发生故障,无法完成该链接的处理,通过将超时待处理链接存储到任务队列中,保证了任务能够被及时完成。
在本发明一实施例中,所述按照每个所述任务的当前权重,为所述请求节点分配目标任务,包括:
按照每个所述任务的当前权重,确定所述目标任务;
将所述目标任务的标识发送给所述请求节点,以使所述请求节点根据所述目标任务的标识获取所述目标任务。
在本发明实施例中,在给请求节点分配目标任务时,只是向请求节点发送了目标任务的标识,减少与请求节点之间的数据交互,从而节省了通信开销,提高了交互效率,提升了采集速度。
在本发明一实施例中,该方法进一步包括:
接收各个节点周期性发来的心跳信号;
进一步包括:
针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长,如果是,则确定所述当前节点没有执行任何任务。
在本发明实施例中,各个节点周期性的发出心跳信号,通过心跳信号来判断各个节点的运行情况,如果某个节点的心跳信号超时了,则可以认为该节点发生了运行故障,无法继续执行任务。以节点A为例,其中,节点A被分配了任务A,如果判断出当前时刻距离节点A的最近一次的心跳信号的时间长度超过了第二预设时长,则确定节点A没有执行任何任务,则在计算任务A对应的当前第一数量,需要将节点A从执行任务A的节点中删除。通过本发明实施例确定出的权重能够更加准确的反映出各个任务的实际情况,进而能够更加合理的分配各个任务,能够提高各个任务的处理效率。
在本发明一实施例中,可以预先设置节点时间戳表,该表中保存各个节点发来的心跳信号的时间戳,例如:节点A在xx年xx月xx日xx时xx分xx秒发来心跳信号。这样,在计算各个节点的心跳信号是否超时时,可以从该节点时间戳表中获取最近一次的心跳信号的时间戳。
另外,心跳信号中可以携带节点前一次被分配的任务的标识,对于没有被分配过任务的节点,前一次被分配的任务的标识为空。在每个任务对应的当前第一数量被清空的情况下,通过心跳信号中的前一次被分配的任务的标识可以更新每个任务对应的当前第一数量。
在本发明一实施例中,所述任务请求中包括:所述请求节点的前一次被分配的任务的信息;
进一步包括:
根据所述任务请求中的所述前一次被分配的任务的信息,确定所述前一次被分配的任务;
在所述针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长之后,进一步包括:
当距离所述当前节点的最近一次的心跳信号的时间长度没有超过所述第二预设时长时,确定所述当前节点为活动的节点;
所述按照每个所述任务的当前权重,为所述请求节点分配目标任务,包括:
根据公式二,确定权重阈值,其中,所述公式二为:
其中,T为所述权重阈值,n为所述活动的节点的数量;
确定各个所述任务的当前权重中的最大值与所述前一次被分配的任务的当前权重的差值;
判断所述差值是否大于等于所述权重阈值,如果是,则将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点,否则,保持所述请求节点执行所述前一次被分配的任务。
在本发明实施例中,前一次被分配的任务的信息可以是前一次被分配的任务的标识。通过该标识可以确定出请求节点的前一次被分配的任务。当上述的差值大于等于权重阈值时,说明请求节点的前一次被分配的任务的权重已经较小了,可能会很快被完成,这种情况下,可以为请求节点分配新的目标任务,以提高处理效率,避免浪费资源。当上述的差值小于等于权重阈值时,说明请求节点的前一次被分配的任务的权重仍然较大,如果为请求节点分配新的目标任务,可能导致请求节点的前一次被分配的任务长时间不能完成,这种情况下,就无需给请求节点分配新的目标任务,以提高处理效率。
通过本发明实施例能够控制任务调度最终保持在一个动态稳定状态。
需要说明书的是:公式一中的底数a与公式二中的底数a是相同的,这样能够使得公式一计算出的当前权重与公式二计算出的权重阈值具有可比性,进而使得任务调度过程更加合理。
在本发明一实施例中,任务请求可以携带在心跳信号中。
在本发明实施例中,当前权重的计算与目标任务的分配均为实时处理,不需要保存状态,不依赖历史记录即可实现。即使之前的关于当前第一数量和当前第二数量的信息被清除,通过本发明实施例,在进行少量的任务请求的处理之后,即可计算出较准确的当前权重,进而能够更加合理的分配目标任务,该任务调度的方案的可靠性较高。
如图2所示,本发明实施例提供了一种任务调度的方法,该方法可以包括以下步骤:
步骤201:预先设置任务队列。
具体地,可以为每个任务设置一个任务队列。
当接收到请求节点发来的任务请求时,
步骤202:确定每个任务中当前等待下载的链接的当前第二数量。
举例来说,有三个任务,任务1、任务2和任务3。任务1的当前第二数量为5,任务2的当前第二数量为2,任务3的当前第二数量为10。
例如:针对任务1来说,任务1中当前还有5个链接需要下载。针对任务2来说,任务2中当前还有2个链接需要下载。针对任务3来说,任务3中当前还有10个链接需要下载。
步骤203:确定执行每个任务的节点的当前第一数量。
举例来说,执行任务1的节点的当前第一数量为1,执行任务2的节点的当前第一数量为2,执行任务3的节点的当前第一数量为4。
步骤204:根据当前第一数量和当前第二数量,利用公式一确定每个任务的当前权重,其中,公式一为:
其中,Wi为第i个任务的当前权重,Ni为第i个任务的当前第一数量,Li为第i个任务的当前第二数量,a大于1。
举例来说,a为10。根据公式一计算出:任务1的当前权重为:lg6,任务2的当前权重为:lg2,任务3的当前权重为:lg3.5。
步骤205:将当前权重最大的任务作为目标任务。
举例来说,任务1的当前权重最大,则将任务1作为目标任务。
步骤206:将目标任务的标识发送给请求节点。
举例来说,将任务1分配给请求节点,具体地,将任务1的标识发送给请求节点。
步骤207:将目标任务中当前等待下载的至少一个链接保存到任务队列中,以使请求节点根据目标任务的标识从任务队列中获取至少一个待处理链接。
举例来说,将任务1的5个链接保存到任务队列中。请求节点根据任务1的标识,从任务队列中获取链接。
在本发明实施例中,每接收到一个任务请求,就进行每个任务的当前权重,进而为发来任务请求的节点分配目标任务。
在本发明实施例中,请求节点发送任务请求时,将请求节点的标识携带在任务请求中,以便于在分配目标任务时,根据请求节点的标识找到请求节点,并给请求节点发送响应,也就是,给请求节点发送目标任务的标识。
另外,在本发明实施例中,可以设置任务分配节点数表,该任务分配节点数表用于存储任务与当前第一数量的对应关系,该对应关系随着任务的执行而更新。可以设置任务与节点的对应表,该任务与节点的对应表用于存储任务与执行任务的节点的对应关系。
在本发明实施例中,可以限制在同一时间内一个节点只能负责一个任务。
在本发明实施例中,在第一次进行任务调度时,可以将每个任务对应的当前第一数量初始化为0。
本发明实施例适用于分布式爬虫的架构,通过本发明实施例对分布式爬虫的架构中的任务进行调度。分布式爬虫的架构可以包括主节点和从节点,本发明实施例提供的方法在主节点上实现,从节点用于执行被分配的任务,主节点为发来任务请求的从节点分配目标任务。从节点获取目标任务的链接后,进行网页下载,网页下载完成后放入解析队列等待后续操作。
在本发明实施例中,请求节点可以周期性地发出任务请求,也可以在目标任务对应的当前第二数量为0时,发出任务请求。
在本发明实施例中,可以通过以下代码实现本发明实施例提供的一种任务调度的方法:
输入:(told,n):心跳信号中包含的任务told和节点n
Tnodes:任务分配节点数表
Tmapping:任务与节点的对应表
输出:t:分配给节点n的目标任务
注释:
1.getTaskSize(t):获取任务t此时的任务队列长度
2.getMostWeightTask():获取此时权重最大的任务,依赖getTaskSize()和Tnodes计算
3.getWeight(t):获取任务t的权重
4.Wthreshold:权重阈值,用来控制任务调度最终保持在一个动态稳定状态。
如图3、图4所示,本发明实施例提供了一种任务调度的装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图3所示,为本发明实施例提供的一种任务调度的装置所在设备的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图4所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的一种任务调度的装置,包括:
请求接收单元401、参数确定单元402、权重确定单元403和分配单元404;
所述请求接收单元401,用于接收到请求节点发来的任务请求,触发所述参数确定单元402;
所述参数确定单元402,用于确定每个任务的当前任务规模,确定执行每个所述任务的节点的当前第一数量;
所述权重确定单元403,用于根据所述参数确定单元402确定出的每个所述任务的当前任务规模和每个所述任务对应的所述当前第一数量,确定每个所述任务的当前权重;
所述分配单元404,用于按照所述权重确定单元确定出的每个所述任务的当前权重,为所述请求节点分配目标任务。
在本发明一实施例中,所述参数确定单元,用于确定每个所述任务中当前等待下载的链接的当前第二数量;
所述权重确定单元,用于根据所述参数确定单元确定出的所述当前第一数量和所述当前第二数量,利用公式一确定每个所述任务的当前权重,其中,所述公式一为:
其中,Wi为第i个任务的当前权重,Ni为第i个任务的当前第一数量,Li为第i个任务的当前第二数量,a大于1。
在本发明一实施例中,该装置进一步包括:已发送队列和任务队列;
进一步包括:
任务队列单元,用于将所述目标任务中当前等待下载的至少一个链接保存到所述任务队列中;
进一步包括:
转移单元,用于当所述请求节点从所述任务队列中获取至少一个待处理链接时,将所述至少一个待处理链接转移到所述已发送队列中;
进一步包括:
删除单元,用于当接收到所述请求节点发来的处理完成信号时,将所述处理完成信号对应的所述待处理链接从所述已发送队列中删除;
进一步包括:
已发送队列单元,用于实时判断所述已发送队列中是否存在存储时间超过第一预设时长的超时待处理链接,如果存在,则将所述超时待处理链接转移到所述任务队列中。
在本发明一实施例中,该装置进一步包括:
心跳接收单元,用于接收各个节点周期性发来的心跳信号;
进一步包括:
超时判断单元,用于针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长,如果是,则确定所述当前节点没有执行任何任务。
在本发明一实施例中,所述分配单元,用于按照每个所述任务的当前权重,确定所述目标任务,将所述目标任务的标识发送给所述请求节点,以使所述请求节点根据所述目标任务的标识获取所述目标任务。
在本发明一实施例中,所述分配单元,用于将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点。
在本发明一实施例中,该装置进一步包括:
心跳接收单元,用于接收各个节点周期性发来的心跳信号;
进一步包括:
超时判断单元,用于针对每个节点,周期性判断距离当前节点的最近一次的心跳信号的时间长度是否超过第二预设时长,如果是,则确定所述当前节点没有执行任何任务,否则,确定所述当前节点为活动的节点;
所述任务请求中包括:所述请求节点的前一次被分配的任务的信息;
进一步包括:
任务确定单元,用于根据所述任务请求中的所述前一次被分配的任务的信息,确定所述前一次被分配的任务;
所述分配单元,用于:
根据公式二,确定权重阈值,其中,所述公式二为:
其中,T为所述权重阈值,n为所述活动的节点的数量;
确定各个所述任务的当前权重中的最大值与所述前一次被分配的任务的当前权重的差值;
判断所述差值是否大于等于所述权重阈值,如果是,则将所述当前权重最大的任务作为所述目标任务,将所述目标任务分配给所述请求节点,否则,保持所述请求节点执行所述前一次被分配的任务。
如图5所示,本发明实施例提供了一种分布式任务执行系统,包括:
本发明实施例中任一所述的任务调度的装置501和至少一个节点502;
所述至少一个节点502,用于向所述任务调度的装置发送任务请求,在所述任务调度的装置分配目标任务时,执行所述目标任务。
图5中示出了3个节点502。
在本发明实施例中,可以为任务调度的装置设置一个备份装置,具体地,一个为任务调度的装置设置在主节点上,并设置一个主节点副本,主节点与主节点副本之间简单使用共用的虚拟IP,默认情况下虚拟IP映射到主节点,当主节点发生宕机时,虚拟IP立即切换到主节点副本上,通过主节点副本进行任务调度,保持了任务调度的高可用。
在本发明实施例中,用于任务调度的装置与用于执行任务的节点分离,灵活性更高。
在本发明实施例中,为不同的任务定义权重,并根据任务规模和执行各个任务的节点的数量实时计算权重,从而实现任务的动态调度,避免了不同规模的任务之间相互影响的问题,极大地提高了资源利用效率和采集速度。
在本发明实施例中,节点支持横向扩展,从而提高各个节点构成的采集集群的可靠性,增加了采集集群的可靠性和稳定性。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本发明实施例提供了一种可读介质,包括执行指令,当存储控制器的处理器执行所述执行指令时,所述存储控制器执行本发明实施例提供的任意一种任务调度的方法。
本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;
所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的执行指令,以使所述存储控制器执行本发明实施例提供的任意一种任务调度的方法。
本发明各个实施例至少具有如下有益效果:
1、在本发明实施例中,在为请求节点分配目标任务时,根据各个任务的当前任务规模和执行各个任务的节点的当前第一数量,确定出各个任务的当前权重,按照各个任务的当前权重为请求节点分配目标任务,通过当前权重来确定各个任务之间的优先级,避免了各个任务平等处理的情况,能够提高工作效率。
2、在本发明实施例中,以各个任务的当前权重来给各个任务进行排序,当前权重越大的,越优先被处理。而当前权重是根据任务的当前任务规模和执行任务的节点的当前第一数量来确定,使得确定出的权重更加合理,任务调度过程更加合理,能够提高任务的处理效率。
3、在本发明实施例中,在给请求节点分配目标任务时,只是向请求节点发送了目标任务的标识,减少与请求节点之间的数据交互,从而节省了通信开销,提高了交互效率,提升了采集速度。
4、在本发明实施例中,通过任务队列来保存已经被分配的目标任务,请求节点从任务队列获取需要下载的待处理链接,这时,被取出的待处理链接会从任务队列中删除,并存储到已发送队列中。请求节点处理完某个待处理链接时,将该待处理链接从已发送队列中删除,如果检测到已发送队列中存在超时待处理链接时,则将超时待处理链接存储到任务队列中,使得超时待处理链接成为待处理链接,能够重新被节点获取。超时待处理链接的存在可能是由于处理该链接的节点发生故障,无法完成该链接的处理,通过将超时待处理链接存储到任务队列中,保证了任务能够被及时完成。
5、在本发明实施例中,当前权重的计算与目标任务的分配均为实时处理,不需要保存状态,不依赖历史记录即可实现。即使之前的关于当前第一数量和当前第二数量的信息被清除,通过本发明实施例,在进行少量的任务请求的处理之后,即可计算出较准确的当前权重,进而能够更加合理的分配目标任务,该任务调度的方案的可靠性较高。
6、在本发明实施例中,为不同的任务定义权重,并根据任务规模和执行各个任务的节点的数量实时计算权重,从而实现任务的动态调度,避免了不同规模的任务之间相互影响的问题,极大地提高了资源利用效率和采集速度。
7、在本发明实施例中,用于任务调度的装置与用于执行任务的节点分离,灵活性更高。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃····〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。