CN107329820B - 一种用于集群系统的任务处理方法及装置 - Google Patents

一种用于集群系统的任务处理方法及装置 Download PDF

Info

Publication number
CN107329820B
CN107329820B CN201610274108.9A CN201610274108A CN107329820B CN 107329820 B CN107329820 B CN 107329820B CN 201610274108 A CN201610274108 A CN 201610274108A CN 107329820 B CN107329820 B CN 107329820B
Authority
CN
China
Prior art keywords
task
node
identification information
state
cluster
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610274108.9A
Other languages
English (en)
Other versions
CN107329820A (zh
Inventor
薛成刚
陈广
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN201610274108.9A priority Critical patent/CN107329820B/zh
Publication of CN107329820A publication Critical patent/CN107329820A/zh
Application granted granted Critical
Publication of CN107329820B publication Critical patent/CN107329820B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/503Resource availability

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明实施例提供了一种用于集群系统的任务处理方法及装置,所述方法包括:根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;如果是,根据在集群系统中预先构建的集群子系统的地址信息,查询集群子系统中存储的任务表;识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息;如果否,根据所述集群子系统的地址信息,查询所述任务表,并识别所述任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。本发明实施例能够提高集群系统任务处理的成功率。

Description

一种用于集群系统的任务处理方法及装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种用于集群系统的任务处理方法及装置。
背景技术
集群系统是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。集群系统中的各个计算机可以称为各个节点,各个节点是相互独立的,任一个节点都可以对集群系统接收到的任务进行处理。
一个用户与集群系统通信时,集群系统像是一个独立的计算机。具体地,集群系统可以提供一个与外部通信的接口,用于接收任务,并且,该接口可以将接收到的任务转发给集群内部的节点进行处理。任务处理是集群系统中的核心技术,要保证一个集群系统正常工作,就要既保证其接收到的各任务被节点成功地处理,又要保证各任务只被一个节点处理,不能被重复处理。
现有的用于集群系统的任务处理方法,可以在集群系统中确定一个节点为管理节点,进一步地,由集群系统的管理节点将接收到的任务分配给任一节点来处理。具体地,在该管理节点上构建有任务池、资源调度模块等,当接口接收到任务时,将任务添加到管理节点的任务池中,进一步地,资源调度模块可以将任务池中的任务调度到指定的节点处理。
但是,上述方法中,将任务池和资源调度模块部署在管理节点上,容易产生单点故障。即当管理节点出现故障时,将导致集群系统的任务分配出错,进一步地,将导致集群系统不能成功地处理其接收到的任务。
发明内容
本发明实施例的目的在于提供一种用于集群系统的任务处理方法及装置,以提高集群系统任务处理的成功率。具体技术方案如下:
第一方面,本发明实施例提供了一种用于集群系统的任务处理方法,应用于所述集群系统中的任一节点,所述集群系统包括预先选取的一个管理节点,所述方法包括:
根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;
如果是,根据在所述集群系统中预先构建的集群子系统的地址信息,查询所述集群子系统中存储的任务表,其中,所述集群子系统包括至少两个节点,各节点中均保存有所述任务表;根据所述任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息;
如果否,根据所述集群子系统的地址信息,查询所述任务表,并识别所述任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。
进一步地,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到所述任务表中的。
进一步地,当自身为所述集群子系统中的节点,且当前自身处于激活状态时,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到自身存储的任务表中的;
所述集群子系统中其他节点中保存的任务表是将自身存储的任务表中的内容同步到所述其他节点中的。
进一步地,所述在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息包括:
当自身为所述集群子系统中的节点,且当前自身处于激活状态时,在自身存储的任务表的每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息,并将自身的所述任务表中的内容同步到所述集群子系统中的其他节点。
进一步地,各任务表中还包括各标识信息的任务对应的失败次数;所述对所述目标任务进行处理之后,所述方法还包括:
当所述目标任务的处理结果为处理成功时,将该任务对应的状态信息修改为成功状态;
当所述目标任务的处理结果为处理失败时,将该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值;如果是,将该任务对应的状态信息修改为失败状态,如果否,将该任务对应的状态信息修改为待处理状态中的重做状态。
进一步地,当自身是管理节点时,所述方法还包括:
识别所述任务表中是否存在状态信息为失败状态的任务;
如果是,通知该任务失败处理。
进一步地,所述方法还包括:
检测所述集群系统中是否存在故障节点;
如果是,根据所述任务表中各任务对应的执行节点标识信息,识别是否存在执行节点标识信息为所述故障节点的标识信息的任务,如果是,将该任务对应的执行状态修改为待处理状态中的重做状态,并将该任务对应的执行节点标识信息置空。
进一步地,所述在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息包括:
确定各节点的当前负载量;
针对每个待分配任务,识别当前负载量最小的节点,并在该待分配任务对应的执行节点标识信息中添加所述负载量最小的节点的标识信息。
进一步地,所述管理节点是所述集群系统中的任一节点接收并保存其他各节点发送的其自身的服务序号后,根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点的。
进一步地,当自身不是管理节点时,所述方法还包括:
检测所述管理节点是否发生故障;
如果是,根据自身的服务序号,以及本地保存的除该发生故障的节点之外的其他节点的服务序号,确定服务序号最小的节点为新的管理节点。
第二方面,本发明实施例提供了一种用于集群系统的任务处理装置,应用于所述集群系统中的任一节点,所述集群系统包括预先选取的一个管理节点,所述装置包括:
判断模块,用于根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;
分配模块,用于当所述判断模块判断结果为是时,根据在所述集群系统中预先构建的集群子系统的地址信息,查询所述集群子系统中存储的任务表,其中,所述集群子系统包括至少两个节点,各节点中均保存有所述任务表;根据所述任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息;
第一处理模块,用于当所述判断模块判断结果为否时,根据所述集群子系统的地址信息,查询所述任务表,并识别所述任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。
进一步地,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到所述任务表中的。
进一步地,当自身为所述集群子系统中的节点,且当前自身处于激活状态时,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到自身存储的任务表中的;
所述集群子系统中其他节点中保存的任务表是将自身存储的任务表中的内容同步到所述其他节点中的。
进一步地,所述分配模块,具体用于:
当自身为所述集群子系统中的节点,且当前自身处于激活状态时,在自身存储的任务表的每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息,并将自身的所述任务表中的内容同步到所述集群子系统中的其他节点。
进一步地,各任务表中还包括各标识信息的任务对应的失败次数;所述装置还包括:
第一执行模块,用于对所述目标任务进行处理之后,当所述目标任务的处理结果为处理成功时,将该任务对应的状态信息修改为成功状态;
第二执行模块,用于当所述目标任务的处理结果为处理失败时,将该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值;如果是,将该任务对应的状态信息修改为失败状态,如果否,将该任务对应的状态信息修改为待处理状态中的重做状态。
进一步地,当自身是管理节点时,所述装置还包括:
识别模块,用于识别所述任务表中是否存在状态信息为失败状态的任务;
通知模块,用于当所述识别模块识别结果为是时,通知该任务失败处理。
进一步地,所述装置还包括:
第一检测模块,用于检测所述集群系统中是否存在故障节点;
第二处理模块,用于当所述第一检测模块检测结果为是时,根据所述任务表中各任务对应的执行节点标识信息,识别是否存在执行节点标识信息为所述故障节点的标识信息的任务,如果是,将该任务对应的执行状态修改为待处理状态中的重做状态,并将该任务对应的执行节点标识信息置空。
进一步地,所述分配模块包括:
确定子模块,用于确定各节点的当前负载量;
分配子模块,用于针对每个待分配任务,识别当前负载量最小的节点,并在该待分配任务对应的执行节点标识信息中添加所述负载量最小的节点的标识信息。
进一步地,所述管理节点是所述集群系统中的任一节点接收并保存其他各节点发送的其自身的服务序号后,根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点的。
进一步地,当判断自身不是管理节点时,所述装置还包括:
第二检测模块,用于检测所述管理节点是否发生故障;
第二确定模块,用于当所述第二检测模块检测结果为是时,根据自身的服务序号,以及本地保存的除该发生故障的节点之外的其他节点的服务序号,确定服务序号最小的节点为新的管理节点。
本发明实施例提供了一种用于集群系统的任务处理方法及装置,在集群系统中预先构建集群子系统,且该集群子系统包括至少两个节点,各节点均保存有任务表,并且,该集群系统中包括预先选取的一个管理节点和其他的普通节点,每个节点都可以访问集群子系统中的任务表,管理节点可以识别任务表中的待分配任务,并为各待分配任务分配对应的节点,普通节点可以识别任务表中执行节点标识信息为自身标识信息的目标任务,并对该目标任务进行处理,由于任务表保存在包括至少两个节点的集群子系统中,从而能够保证该任务表一直处于工作状态,不会因某一个节点的故障而不能被访问,因此,能够保证各任务能被成功处理,提高集群系统任务处理的成功率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种用于集群系统的任务处理方法的流程图;
图2为本发明实施例提供的一种用于集群系统的任务处理方法的另一流程图;
图3为本发明实施例提供的一种用于集群系统的任务处理装置的结构示意图;
图4为本发明实施例提供的一种用于集群系统的任务处理装置的另一结构示意图。
具体实施方式
为了提高集群系统任务处理的成功率,本发明实施例提供了一种用于集群系统的任务处理方法及装置。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中,集群系统可以包括预先选取的一个管理节点以及至少一个普通节点。其中,该管理节点可以是集群系统中的任一个节点,管理节点可以是依照预设的规则,从所有节点中选取出来的。并且,当选取出当前的管理节点后,集群系统中的各节点都可以保存当前管理节点的标识信息。
为了提高集群系统任务处理的成功率,本发明实施例提供了一种用于集群系统的任务处理方法过程,应用于所述集群系统中的任一节点,如图1所示,该过程可以包括:
S101,根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;如果是,执行步骤S102,如果否,执行步骤S103。
在本发明实施例中,集群系统中的任一节点可以根据自身保存的当前管理节点的标识信息,判断自身是否为集群系统的管理节点,以根据判断结果,执行相应的操作。
S102,根据在所述集群系统中预先构建的集群子系统的地址信息,查询所述集群子系统中存储的任务表,其中,所述集群子系统包括至少两个节点,各节点中均保存有所述任务表;根据所述任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息。
在本发明实施例中,为了提高集群系统任务处理的成功率,避免节点单点故障导致任务处理失败,可以在集群系统中预先构建集群子系统。并且,可以为该集群子系统配置对应的地址信息,集群系统的各节点都可以根据该地址信息,访问集群子系统。
其中,上述集群子系统可以包括至少两个节点,各节点中均保存有任务表,且各节点中的任务表都保持同步状态。上述任务表中可以包括当前集群系统已接收的每个任务的标识信息、及各任务对应的状态信息和执行节点标识信息。上述各任务对应的状态信息可以包括待处理状态、成功状态或失败状态等。
并且,在集群子系统中包括的至少两个节点中,任一时刻均只有一个节点处于激活状态。当任一节点通过集群子系统的地址信息访问集群子系统时,实际上访问的是该处于激活状态的节点中的任务表。
在本发明实施例中,当任一节点判断得到自身是当前管理节点时,其可以根据预设的集群子系统的地址信息,查询该集群子系统中存储的任务表,并根据该任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,并在每个待分配任务对应的执行节点标识信息中添加对该待分配任务处理的节点的标识信息。也就是说,管理节点可以为识别出的待分配任务分配对应的节点,以使各任务能够被管理节点为其分配的节点处理。
在本发明实施例中,当任一节点接收到新的任务,并将该任务添加到任务表时,该任务对应的状态信息可以为待做,其对应的执行节点标识信息可以为空。并且,可以理解,有些情况下,节点处理任务时,可能会出现处理失败的情况,这种情况下,该任务对应的状态信息可以被节点修改为重做,其对应的执行节点标识信息也可以为空。
因此,在本发明实施例中,具体地,管理节点可以查询任务表,并识别状态信息为待做或重做,执行节点标识信息为空的待分配任务,并在识别出的待分配任务对应的执行节点标识信息处添加对该任务处理的节点的标识信息。
S103,根据预设的集群子系统的地址信息,查询所述任务表,并识别所述任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。
在本发明实施中,当任一节点判断得到自身不是当前管理节点时,其可以根据预设的集群子系统的地址信息,查询该集群子系统中存储的任务表,并识别该任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,并对该目标任务进行处理。
本发明实施例提供了一种用于集群系统的任务处理方法,在集群系统中预先构建集群子系统,且该集群子系统包括至少两个的节点,各节点均保存有任务表,并且,该集群系统中包括预先选取的一个管理节点和其他的普通节点,每个节点都可以访问集群子系统中的任务表,管理节点可以识别任务表中的待分配任务,并为各待分配任务分配对应的节点,普通节点可以识别任务表中执行节点标识信息为自身标识信息的目标任务,并对该目标任务进行处理,由于任务表保存在包括至少两个节点的集群子系统中,从而能够保证该任务表一直处于工作状态,不会因某一个节点的故障而不能被访问,因此,能够保证各任务能被成功处理,提高集群系统任务处理的成功率。
进一步地,在本发明实施例中,任务表中的任务可以是集群系统中的任一节点接收到接口发送的任务,并根据集群子系统的地址信息,将该任务添加到任务表中的。
具体地,集群系统的接口可以接收新的任务,并且,可以将接收到的任务发送给任一个节点。任一节点接收到任务时,可以根据预设的集群子系统的地址信息,将该任务添加到任务表中。进一步地,可以在任务表中添加该任务的编号、任务标识,并添加该任务对应的状态信息为待做状态(TODO),将该任务对应的执行节点标识信息置空。
具体地,在本发明实施例中,当任一节点为集群子系统中的节点,且当前自身处于激活状态时,也就是说,各节点根据集群子系统的地址信息访问的是自身保存的任务表时,该节点可以将接收到的任务添加到自身存储的任务表中。并且,该节点还可以将自身的任务表中的内容同步到集群子系统中的其他节点,以保证集群子系统中各节点中保存的任务表都保持同步状态。
进一步地,当任一节点为集群子系统中的节点,且当前自身处于激活状态时,该节点还可能是集群系统中的管理节点。这种情况下,管理节点在每个待分配任务对应的执行节点标识信息中添加对该待分配任务处理的节点的标识信息时,即可以在自身存储的任务表的每个待分配任务对应的执行节点标识信息中添加对该待分配任务处理的节点的标识信息。并且,该节点还可以将自身的任务表中的内容同步到集群子系统中的其他节点,以保证集群子系统中各节点中保存的任务表都保持同步状态。
可以理解,在实际应用中,可能存在节点出现故障的情况。这种情况下,若管理节点之前将任一任务分配给了该出现故障的节点,则会导致该任务不能被成功执行。
因此,在本发明实施例中,集群系统中的任一节点都可以检测集群系统中是否存在故障节点,如果是,则可以根据任务表中各任务对应的执行节点标识信息,识别是否存在执行节点标识信息为检测到的故障节点的标识信息的任务,如果是,可以将该任务对应的执行状态修改为待处理状态中的重做状态(REDO),并将该任务对应的执行节点标识信息置空。将执行节点标识信息为检测到的故障节点的标识信息的任务对应的执行状态修改为待处理状态中的重做状态,并将该任务对应的执行节点标识信息置空后,管理节点即可识别到该任务为待分配任务,并可以重新在该任务对应的执行节点标识信息中添加新的节点的标识信息,能够保证各任务都可以被成功处理。
进一步地,在本发明实施例中,为了保证各节点负载均衡,管理节点在每个待分配任务对应的执行节点标识信息中添加对该待分配任务处理的节点的标识信息时,可以首先确定各节点的当前负载量;然后针对每个待分配任务,识别当前负载量最小的节点,并在该待分配任务对应的执行节点标识信息中添加该负载量最小的节点的标识信息。
进一步地,在本发明实施例中,管理节点可以是集群系统中的任一节点接收并保存其他各节点发送的其自身的服务序号后,根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点的。
具体地,集群系统中的每个节点都可以向其他节点发送自身的服务序号。例如,上述服务序号可以是在集群系统启动时,各节点的一个服务产生并保存的一个序号,各节点的服务序号在集群系统中是唯一的。
因此,集群系统中的任一节点都可以接收并保存其他各节点发送的该各节点的服务序号,并且,可以根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点。
可以理解,管理节点在集群系统中起到很关键的作用,当管理节点故障时,待分配任务对应的执行节点标识信息将一直为置空状态,因此,该任务将不能被其他节点处理。
因此,在本发明实施例中,为了保证各任务都可以被成功处理,需要保证集群系统中管理节点持续正常工作。具体地,除管理节点之外的其他节点可以检测当前管理节点是否发生故障;如果是,则可以根据自身的服务序号,以及本地保存的除该发生故障的节点之外的其他节点的服务序号,确定服务序号最小的节点为新的管理节点。
通过检测当前管理节点是否发生故障,并且,当检测到当前管理节点发生故障时,在未发生故障的节点中选取出新的管理节点,能够保证集群系统中管理节点持续正常工作,从而保证各任务都能够被成功处理。
可以理解,针对一些任务,可能由于任务本身的原因,导致该任务不能被节点成功处理。这种情况下,为了节省节点负载量,该任务不能持续地被节点处理。
因此,在本发明实施例中,各任务表中还可以包括各标识信息的任务对应的失败次数,以标识各任务被处理失败的次数,并且,可以根据各任务对应的失败次数,对各任务做相应的处理。
在本发明实施例中,当各节点识别到任务表中执行节点标识信息为自身的标识信息的目标任务,并处理完各目标任务后,还可以根据各目标任务的处理结果,对应修改任务表中各目标任务的状态信息。
如图2所示,本发明实施例提供的用于集群系统的任务处理方法,在步骤S103之后,还可以包括:
S104,当所述目标任务的处理结果为处理成功时,将该任务对应的状态信息修改为成功状态。
在本发明实施例中,当目标任务的处理结果为处理成功时,节点可以将该任务对应的状态信息修改为成功状态。
S105,当所述目标任务的处理结果为处理失败时,将该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值;如果是,将该任务对应的状态信息修改为失败状态,如果否,将该任务对应的状态信息修改为待处理状态中的重做状态。
在本发明实施例中,当目标任务的处理结果为处理失败时,节点可以将任务表中该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值(如2、3、4、5等);如果是,可以将该任务对应的状态信息修改为失败状态,如果否,可以将该任务对应的状态信息修改为待处理状态中的重做状态。
进一步地,在本发明实施例中,当自身是管理节点时,该节点还可以识别任务表中是否存在状态信息为失败状态的任务;如果是,则可以表明该任务不能被节点成功处理,这种情况下,管理节点可以通知该任务失败处理。
本实施例提供的方案,各节点可以根据对各任务的处理结果,修改任务表中各任务对应的状态信息,当任务处理失败,且其对应的失败次数小于或等于预定阈值时,将该任务对应的状态信息修改为待处理状态中的重做状态,以使管理节点可以为该任务重新分配节点,能够保证各任务都被成功处理;当任务处理失败,且其对应的失败次数大于预定阈值时,将该任务对应的状态信息修改为失败状态,使管理节点通知该任务失败处理,能够节省各节点的负载量。
相应于上面的方法实施例,本发明实施例还提供了相应的装置实施例。
图3为本发明实施例提供的一种用于集群系统的任务处理装置,应用于所述集群系统中的任一节点,所述集群系统包括预先选取的一个管理节点,所述装置包括:
判断模块310,用于根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;
分配模块320,用于当所述判断模块判断结果为是时,根据在所述集群系统中预先构建的集群子系统的地址信息,查询所述集群子系统中存储的任务表,其中,所述集群子系统包括至少两个节点,各节点中均保存有所述任务表;根据所述任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息;
第一处理模块330,用于当所述判断模块判断结果为否时,根据所述集群子系统的地址信息,查询所述任务表,并识别所述任务表中执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。
本发明实施例提供了一种用于集群系统的任务处理装置,在集群系统中预先构建集群子系统,且该集群子系统包括至少两个节点,各节点均保存有任务表,并且,该集群系统中包括预先选取的一个管理节点和其他的普通节点,每个节点都可以访问集群子系统中的任务表,管理节点可以识别任务表中的待分配任务,并为各待分配任务分配对应的节点,普通节点可以识别任务表中执行节点标识信息为自身标识信息的目标任务,并对该目标任务进行处理,由于任务表保存在包括至少两个节点的集群子系统中,从而能够保证该任务表一直处于工作状态,不会因某一个节点的故障而不能被访问,因此,能够保证各任务能被成功处理,提高集群系统任务处理的成功率。
进一步地,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到所述任务表中的。
进一步地,当自身为所述集群子系统中的节点,且当前自身处于激活状态时,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到自身存储的任务表中的;
所述集群子系统中其他节点中保存的任务表是将自身存储的任务表中的内容同步到所述其他节点中的。
进一步地,所述分配模块320,具体用于:
当自身为所述集群子系统中的节点,且当前自身处于激活状态时,在自身存储的任务表的每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息,并将自身的所述任务表中的内容同步到所述集群子系统中的其他节点。
进一步地,所述装置还包括:
第一检测模块(图中未示出),用于检测所述集群系统中是否存在故障节点;
第二处理模块(图中未示出),用于当所述第一检测模块检测结果为是时,根据所述任务表中各任务对应的执行节点标识信息,识别是否存在执行节点标识信息为所述故障节点的标识信息的任务,如果是,将该任务对应的执行状态修改为待处理状态中的重做状态,并将该任务对应的执行节点标识信息置空。
进一步地,所述分配模块320包括:
确定子模块(图中未示出),用于确定各节点的当前负载量;
分配子模块(图中未示出),用于针对每个待分配任务,识别当前负载量最小的节点,并在该待分配任务对应的执行节点标识信息中添加所述负载量最小的节点的标识信息。
进一步地,所述管理节点是所述集群系统中的任一节点接收并保存其他各节点发送的其自身的服务序号后,根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点的。
进一步地,当判断自身不是管理节点时,所述装置还包括:
第二检测模块(图中未示出),用于检测所述管理节点是否发生故障;
第二确定模块(图中未示出),用于当所述第二检测模块检测结果为是时,根据自身的服务序号,以及本地保存的除该发生故障的节点之外的其他节点的服务序号,确定服务序号最小的节点为新的管理节点。
进一步地,本发明实施例中,各任务表中还包括各标识信息的任务对应的失败次数;如图4所示,所述装置还包括:
第一执行模块340,用于对所述目标任务进行处理之后,当所述目标任务的处理结果为处理成功时,将该任务对应的状态信息修改为成功状态;
第二执行模块350,用于当所述目标任务的处理结果为处理失败时,将该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值;如果是,将该任务对应的状态信息修改为失败状态,如果否,将该任务对应的状态信息修改为待处理状态中的重做状态。
进一步地,当自身是管理节点时,所述装置还包括:
识别模块(图中未示出),用于识别所述任务表中是否存在状态信息为失败状态的任务;
通知模块(图中未示出),用于当所述识别模块识别结果为是时,通知该任务失败处理。
本实施例提供的方案,各节点可以根据对各任务的处理结果,修改任务表中各任务对应的状态信息,当任务处理失败,且其对应的失败次数小于或等于预定阈值时,将该任务对应的状态信息修改为待处理状态中的重做状态,以使管理节点可以为该任务重新分配节点,能够保证各任务都被成功处理;当任务处理失败,且其对应的失败次数大于预定阈值时,将该任务对应的状态信息修改为失败状态,使管理节点通知该任务失败处理,能够节省各节点的负载量。
下面结合一个具体的实施例,来说明本发明实施例提供的用于集群系统的任务处理方法。
如下表所示,为刚添加了多个任务的任务表:
由上表可知,任务刚被添加到任务表中时,各任务对应的状态信息均为待做(TODO),执行节点标识信息均为空,失败次数均为0。
当管理节点访问该任务表时,可以查询到编号为1-6的任务,对应的状态信息均为待处理状态中的待做状态,且各任务对应的执行节点标识信息均为空,因此,可以识别出编号为1-6的任务均为待分配任务。并且,管理节点可以在各待分配任务对应的执行节点标识信息中添加对各待分配任务处理的节点的标识信息,添加后结果如下表所示:
编号 任务标识 状态信息 执行节点标识信息 失败次数
1 8a40c2e05235e580015235e704500006 TODO 10.192.66.96:8080 0
2 8a40c2e0523deeb501523e05eede0011 TODO 10.192.71.201:8080 0
3 8a40c2e052360bb50152360d40d00003 TODO 10.192.71.200:8080 0
4 8a40c2e05253878f01525393a56f0009 TODO 10.192.66.96:8080 0
5 8a40c2e05242eb0b015242edd0400009 TODO 10.192.71.201:8080 0
6 8a40c2e05254b86a015254b90b8a0007 TODO 10.192.71.200:8080 0
由上表可知,管理节点在各待分配任务对应的执行节点标识信息中添加对各待分配任务处理的节点的标识信息后,各任务对应的状态信息仍为待处理状态中的重做状态。
非管理节点的其他节点访问任务表时,可以根据识别状态信息为待处理状态,执行节点标识信息为自身标识信息的目标任务,并对该目标任务进行处理。并且,节点可以将已开始处理的任务对应的状态信息修改为正做状态,如下表所示,各任务均正在被对应的各节点处理:
各节点将对应的目标任务处理完成后,将各任务对应的执行节点标识信息置空,并且,可以根据各任务对应的处理结果,修改各任务的状态信息,如下表所示:
编号 任务标识 状态信息 执行节点标识信息 失败次数
1 8a40c2e05235e580015235e704500006 REDO 1
2 8a40c2e0523deeb501523e05eede0011 DOING 10.192.71.201:8080 0
3 8a40c2e052360bb50152360d40d00003 REDO 1
4 8a40c2e05253878f01525393a56f0009 DOING 10.192.66.96:8080 0
5 8a40c2e05242eb0b015242edd0400009 SUCESS 10.192.71.201:8080 0
6 8a40c2e05254b86a015254b90b8a0007 FALSE 3
由上表可知,编号为2、4的任务,仍被节点执行中;编号为5的任务,被节点成功处理,这种情况下,节点将该任务对应的状态信息修改为了成功状态(SUCESS);编号为1、3的任务,被节点处理失败后,节点将这两个任务对应的执行节点标识信息置空,并将其对应的失败次数加1(由原来的0变为1),且节点判断这两个任务对应的失败次数小于阈值(如,2),将这两个任务对应的状态信息修改为了重做(REDO);编号为6的任务,已被处理失败3次,最后一次对其处理的节点判断其失败次数大于阈值(如,2),因此,将该任务对应的状态信息修改为了失败(FALSE)。
进一步地,当管理节点访问该任务表时,可以重新在编号为1、3的任务对应的执行节点标识信息处添加节点标识,以重新处理这两个任务;而编号为6的任务,其状态信息为失败状态,管理节点可以通知该任务失败处理。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (20)

1.一种用于集群系统的任务处理方法,其特征在于,应用于所述集群系统中的任一节点,所述集群系统包括预先选取的一个管理节点,所述方法包括:
根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;
如果是,根据在所述集群系统中预先构建的集群子系统的地址信息,查询所述集群子系统中存储的任务表,其中,所述集群子系统包括至少两个节点,各节点中均保存有所述任务表;根据所述任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息;
如果否,根据所述集群子系统的地址信息,查询所述任务表,并识别所述任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。
2.根据权利要求1所述的方法,其特征在于,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到所述任务表中的。
3.根据权利要求2所述的方法,其特征在于,当自身为所述集群子系统中的节点,且当前自身处于激活状态时,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到自身存储的任务表中的;所述任务是所述集群系统的接口接收到的并发送给所述任一节点的新的任务;
所述集群子系统中其他节点中保存的任务表是将自身存储的任务表中的内容同步到所述其他节点中的。
4.根据权利要求1所述的方法,其特征在于,所述在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息包括:
当自身为所述集群子系统中的节点,且当前自身处于激活状态时,在自身存储的任务表的每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息,并将自身的所述任务表中的内容同步到所述集群子系统中的其他节点。
5.根据权利要求1所述的方法,其特征在于,各任务表中还包括各标识信息的任务对应的失败次数;所述对所述目标任务进行处理之后,所述方法还包括:
当所述目标任务的处理结果为处理成功时,将该任务对应的状态信息修改为成功状态;
当所述目标任务的处理结果为处理失败时,将该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值;如果是,将该任务对应的状态信息修改为失败状态,如果否,将该任务对应的状态信息修改为待处理状态中的重做状态。
6.根据权利要求5所述的方法,其特征在于,当自身是管理节点时,所述方法还包括:
识别所述任务表中是否存在状态信息为失败状态的任务;
如果是,通知该任务失败处理。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检测所述集群系统中是否存在故障节点;
如果是,根据所述任务表中各任务对应的执行节点标识信息,识别是否存在执行节点标识信息为所述故障节点的标识信息的任务,如果是,将该任务对应的执行状态修改为待处理状态中的重做状态,并将该任务对应的执行节点标识信息置空。
8.根据权利要求1-7任一所述的方法,其特征在于,所述在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息包括:
确定各节点的当前负载量;
针对每个待分配任务,识别当前负载量最小的节点,并在该待分配任务对应的执行节点标识信息中添加所述负载量最小的节点的标识信息。
9.根据权利要求1-7任一所述的方法,其特征在于,所述管理节点是所述集群系统中的任一节点接收并保存其他各节点发送的其自身的服务序号后,根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点的。
10.根据权利要求9所述的方法,其特征在于,当判断自身不是管理节点时,所述方法还包括:
检测所述管理节点是否发生故障;
如果是,根据自身的服务序号,以及本地保存的除该发生故障的节点之外的其他节点的服务序号,确定服务序号最小的节点为新的管理节点。
11.一种用于集群系统的任务处理装置,其特征在于,应用于所述集群系统中的任一节点,所述集群系统包括预先选取的一个管理节点,所述装置包括:
判断模块,用于根据自身保存的当前管理节点的标识信息,判断自身是否为所述集群系统的管理节点;
分配模块,用于当所述判断模块判断结果为是时,根据在所述集群系统中预先构建的集群子系统的地址信息,查询所述集群子系统中存储的任务表,其中,所述集群子系统包括至少两个节点,各节点中均保存有所述任务表;根据所述任务表中各标识信息的任务对应的状态信息和执行节点标识信息,识别所述任务表中状态信息为待处理状态,且执行节点标识信息为空的待分配任务,在每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息;
第一处理模块,用于当所述判断模块判断结果为否时,根据所述集群子系统的地址信息,查询所述任务表,并识别所述任务表中状态信息为待处理状态,且执行节点标识信息为自身标识信息的目标任务,对所述目标任务进行处理。
12.根据权利要求11所述的装置,其特征在于,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到所述任务表中的。
13.根据权利要求12所述的装置,其特征在于,当自身为所述集群子系统中的节点,且当前自身处于激活状态时,所述任务表中的任务是所述集群系统中的任一节点接收到接口发送的任务,并根据所述集群子系统的地址信息,将所述任务添加到自身存储的任务表中的;所述任务是所述集群系统的接口接收到的并发送给所述任一节点的新的任务;
所述集群子系统中其他节点中保存的任务表是将自身存储的任务表中的内容同步到所述其他节点中的。
14.根据权利要求11所述的装置,其特征在于,所述分配模块,具体用于:
当自身为所述集群子系统中的节点,且当前自身处于激活状态时,在自身存储的任务表的每个待分配任务对应的执行节点标识信息中添加对所述待分配任务处理的节点的标识信息,并将自身的所述任务表中的内容同步到所述集群子系统中的其他节点。
15.根据权利要求11所述的装置,其特征在于,各任务表中还包括各标识信息的任务对应的失败次数;所述装置还包括:
第一执行模块,用于对所述目标任务进行处理之后,当所述目标任务的处理结果为处理成功时,将该任务对应的状态信息修改为成功状态;
第二执行模块,用于当所述目标任务的处理结果为处理失败时,将该任务对应的执行节点标识信息置空,将该任务对应的失败次数加1,并判断当前该任务对应的失败次数是否大于预定阈值;如果是,将该任务对应的状态信息修改为失败状态,如果否,将该任务对应的状态信息修改为待处理状态中的重做状态。
16.根据权利要求15所述的装置,其特征在于,当自身是管理节点时,所述装置还包括:
识别模块,用于识别所述任务表中是否存在状态信息为失败状态的任务;
通知模块,用于当所述识别模块识别结果为是时,通知该任务失败处理。
17.根据权利要求11所述的装置,其特征在于,所述装置还包括:
第一检测模块,用于检测所述集群系统中是否存在故障节点;
第二处理模块,用于当所述第一检测模块检测结果为是时,根据所述任务表中各任务对应的执行节点标识信息,识别是否存在执行节点标识信息为所述故障节点的标识信息的任务,如果是,将该任务对应的执行状态修改为待处理状态中的重做状态,并将该任务对应的执行节点标识信息置空。
18.根据权利要求11-17任一所述的装置,其特征在于,所述分配模块包括:
确定子模块,用于确定各节点的当前负载量;
分配子模块,用于针对每个待分配任务,识别当前负载量最小的节点,并在该待分配任务对应的执行节点标识信息中添加所述负载量最小的节点的标识信息。
19.根据权利要求11-17任一所述的装置,其特征在于,所述管理节点是所述集群系统中的任一节点接收并保存其他各节点发送的其自身的服务序号后,根据自身的服务序号,以及其他各节点的服务序号,将服务序号最小的节点确定为管理节点的。
20.根据权利要求19所述的装置,其特征在于,当判断自身不是管理节点时,所述装置还包括:
第二检测模块,用于检测所述管理节点是否发生故障;
确定模块,用于当所述第二检测模块检测结果为是时,根据自身的服务序号,以及本地保存的除该发生故障的节点之外的其他节点的服务序号,确定服务序号最小的节点为新的管理节点。
CN201610274108.9A 2016-04-28 2016-04-28 一种用于集群系统的任务处理方法及装置 Active CN107329820B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610274108.9A CN107329820B (zh) 2016-04-28 2016-04-28 一种用于集群系统的任务处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610274108.9A CN107329820B (zh) 2016-04-28 2016-04-28 一种用于集群系统的任务处理方法及装置

Publications (2)

Publication Number Publication Date
CN107329820A CN107329820A (zh) 2017-11-07
CN107329820B true CN107329820B (zh) 2019-12-20

Family

ID=60192266

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610274108.9A Active CN107329820B (zh) 2016-04-28 2016-04-28 一种用于集群系统的任务处理方法及装置

Country Status (1)

Country Link
CN (1) CN107329820B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228349A (zh) * 2017-12-26 2018-06-29 北京市商汤科技开发有限公司 用于处理任务的方法、系统和存储介质
CN108270865B (zh) * 2018-01-22 2021-05-11 苏州瑞翼信息技术有限公司 高性能云计算平台的作业调度方法
CN108446171B (zh) * 2018-02-01 2022-07-08 平安科技(深圳)有限公司 电子装置、分布式系统执行任务分配方法及存储介质
CN108762911A (zh) * 2018-06-13 2018-11-06 平安科技(深圳)有限公司 定时任务管理方法、装置、计算机设备及存储介质
CN111090502B (zh) * 2018-10-24 2024-05-17 阿里巴巴集团控股有限公司 一种流数据任务调度方法和装置
CN111338647B (zh) * 2018-12-18 2023-09-12 杭州海康威视数字技术股份有限公司 一种大数据集群管理方法和装置
CN110377407A (zh) * 2019-06-19 2019-10-25 北京威努特技术有限公司 一种扫描任务调度方法、装置、存储介质及设备
CN110569115B (zh) * 2019-08-15 2023-08-04 贝壳技术有限公司 多点部署的进程管理方法及进程的争夺方法
CN110532114B (zh) * 2019-09-04 2022-06-14 浪潮云信息技术股份公司 基于消息队列的定时任务管理系统及分配方法
CN113515357B (zh) * 2021-04-20 2024-03-08 建信金融科技有限责任公司 集群环境下批量任务的执行方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009020692A (ja) * 2007-07-11 2009-01-29 Toshiba Corp タスク管理装置、タスク管理方法及びタスク管理プログラム
CN103581225A (zh) * 2012-07-25 2014-02-12 中国银联股份有限公司 分布式系统中的节点处理任务的方法
CN105119992A (zh) * 2015-08-24 2015-12-02 用友网络科技股份有限公司 分布式任务执行装置和方法

Also Published As

Publication number Publication date
CN107329820A (zh) 2017-11-07

Similar Documents

Publication Publication Date Title
CN107329820B (zh) 一种用于集群系统的任务处理方法及装置
US10831622B2 (en) Method and apparatus for processing gateway device fault
CN106936618B (zh) 一种数据采集方法和系统
CN108881512B (zh) Ctdb的虚拟ip均衡分配方法、装置、设备及介质
CN108717379B (zh) 电子装置、分布式任务调度方法及存储介质
CN106789362A (zh) 一种设备管理方法及网管系统
CN109669762B (zh) 云计算资源管理方法、装置、设备及计算机可读存储介质
CN112395140B (zh) 去中心化的任务调度方法、装置、设备及介质
CN109831507B (zh) 物联网系统、负载均衡方法和存储介质
CN105553760B (zh) 一种基于心跳的软件模块故障处理方法及系统
CN108616424B (zh) 一种资源调度方法、计算机设备和系统
CN106991070B (zh) 实时计算方法及装置
CN111857998A (zh) 一种可配置的定时任务调度方法及系统
CN110912972A (zh) 一种业务处理方法、系统、电子设备及可读存储介质
CN111045811A (zh) 一种任务分配方法、装置、电子设备及存储介质
CN113656473A (zh) 接口访问方法、装置、设备及介质
CN107025129B (zh) 一种数据处理方法以及装置
CN110569124A (zh) 一种任务分配方法和装置
CN107483310B (zh) 一种终端与转发节点之间组网的方法和系统
CN107645396B (zh) 一种集群扩容方法及装置
CN117453357A (zh) 节点任务调度方法、装置、计算机设备及存储介质
CN112631756A (zh) 一种应用于航天测控软件的分布式调控方法及装置
CN107623711B (zh) 一种集群中主节点及从节点的分配方法及装置
CN112865995B (zh) 分布式主从系统
CN110569115B (zh) 多点部署的进程管理方法及进程的争夺方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant