CN111078413A - 一种定时任务的执行方法、装置、计算机设备及存储介质 - Google Patents

一种定时任务的执行方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN111078413A
CN111078413A CN201911301277.7A CN201911301277A CN111078413A CN 111078413 A CN111078413 A CN 111078413A CN 201911301277 A CN201911301277 A CN 201911301277A CN 111078413 A CN111078413 A CN 111078413A
Authority
CN
China
Prior art keywords
hash
servers
server
timing task
total number
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.)
Granted
Application number
CN201911301277.7A
Other languages
English (en)
Other versions
CN111078413B (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.)
Shenzhen Qianhai Huanrong Lianyi Information Technology Service Co Ltd
Original Assignee
Shenzhen Qianhai Huanrong Lianyi Information Technology Service 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 Shenzhen Qianhai Huanrong Lianyi Information Technology Service Co Ltd filed Critical Shenzhen Qianhai Huanrong Lianyi Information Technology Service Co Ltd
Priority to CN201911301277.7A priority Critical patent/CN111078413B/zh
Publication of CN111078413A publication Critical patent/CN111078413A/zh
Application granted granted Critical
Publication of CN111078413B publication Critical patent/CN111078413B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • 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/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了定时任务的执行方法、装置、计算机设备及存储介质,涉及计算机技术领域。所述方法包括:设置多个哈希槽;将每台服务器与其中的一部分哈希槽进行关联;获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;根据取模结果将相应的数据分配至对应的服务器进行处理;通过Redis数据库记录参与定时任务的服务器的总数量;判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;若相等,则结束当前定时任务;若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。本发明设置多个哈希槽,使定时任务能够均匀分配至各服务器,同时利用Redis数据库实现定时任务同步执行。

Description

一种定时任务的执行方法、装置、计算机设备及存储介质
技术领域
本发明涉及计算机技术领域,特别涉及一种定时任务的执行方法、装置、计算机设备及存储介质。
背景技术
现有技术中,主要有两种执行定时任务的技术方案:第一种方案是分布式锁方案,通过对定时任务加锁,保证多台服务器在定时任务触发时只有一台服务器执行定时任务;第二种方案是根据数据的主键字段取模实现定时任务分配,使每台服务器都可以被分配到一部分定时任务。
但是上述两种还存在一定的缺陷:第一种方案中,采用分布式锁增加了技术难度,并且无法发挥出集群服务器的优势,另外如果执行定时任务的服务器出现异常,则其他服务器无法代为执行定时任务;第二种方案中,当主键字段取模分配不均匀时,可能会导致有的服务器出现负荷运行,从而导致各服务器无法同步执行定时任务,而且如果出现服务器数量的增加或者减少的情况时,还可能导致定时任务中的数据被重复处理。因此如何实现均匀分配定时任务以及同步执行定时任务是本领域技术人员需要解决的问题。
发明内容
本发明提供了一种定时任务的执行方法、装置、计算机设备及存储介质,旨在解决定时任务分配不均匀以及定时任务执行不同步的问题。
第一方面,本发明实施例提供了一种定时任务的执行方法,包括:
设置多个哈希槽,并对所述多个哈希槽进行编号;
将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;
当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;
根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;
通过Redis数据库记录参与所述定时任务的服务器的总数量;
在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;
若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;
若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。
进一步的,所述将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同,包括:
将所述哈希槽的总数量除以服务器的总数量,得到每台服务器关联的哈希槽的数量;
依次从所有哈希槽中取出对应数量的哈希槽分配至每台服务器,并将每台服务器与分配的哈希槽进行关联。
进一步的,所述当需要对定时任务的各条数据进行处理时,获取各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果包括:
根据哈希算法计算各条数据的主键字段对应的哈希值;
通过所述哈希值对所述哈希槽的总数量进行取模计算,得到取模结果。
进一步的,还包括:
当当前定时任务未执行完成并且增加新的服务器时,则等待当前定时任务执行完成;
在当前定时任务执行完成后,更新服务器的总数量,并基于更新后的服务器的总数量重新分配哈希槽。
进一步的,还包括:
当执行下一次定时任务时,在所述Redis数据库中重新设置参与定时任务的服务器的总数量。
进一步的,所述哈希算法为CRC16算法。
进一步的,所述在Redis数据库中记录处理完对应数据的服务器的数量,包括:
当一服务器处理完对应数据时,则在所述Redis数据库中将处理完对应数据的服务器的数量加1。
第二方面,本发明实施例还提供了一种定时任务的执行装置,包括:
编号单元,用于设置多个哈希槽,并对所述多个哈希槽进行编号;
关联单元,用于将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;
获取单元,用于当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;
分配单元,用于根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;
记录单元,用于通过Redis数据库记录参与所述定时任务的服务器的总数量;
判断单元,用于在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;
第一重置单元,用于若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;
等待单元,用于若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。
第三方面,本发明实施例还提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法。
本发明实施例提供了一种定时任务的执行方法、装置、计算机设备及存储介质。其中,所述方法包括:设置多个哈希槽,并对所述多个哈希槽进行编号;将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;通过Redis数据库记录参与所述定时任务的服务器的总数量;在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。本发明实施例首先通过设置多个哈希槽,对定时任务中的数据进行取模计算,使所有数据能够均匀分配至各服务器进行处理,使定时任务分配均匀;另外,通过增加Redis数据库,记录服务器的数量,实现所有服务器相互之间的同步通信,使每一次定时任务都可以同步执行,且不会重复执行定时任务。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种定时任务的执行方法的流程示意图;
图2为本发明实施例提供的一种定时任务的执行装置的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
下面请参阅图1,图1为本发明实施例提供的一种定时任务的执行方法的流程示意图,具体包括:步骤S101~S108。
S101、设置多个哈希槽,并对所述多个哈希槽进行编号;
本步骤中,设置的多个哈希槽的数量可以多一些,例如可以设置几千个哈希槽或者上万个哈希槽,并对设置的哈希槽进行编号,在这里,由于后续存在取模的步骤,而取模的结果可能为0,因此对多个哈希槽从0开始依次进行编号。在一具体应用场景中,设置的多个哈希槽的数量为16384个,则对这16384个哈希槽进行编号:0、1、2、3......16383。
S102、将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;
本步骤中,将设置的多个哈希槽按照服务器的总数量进行划分,使每台服务器都可以对应到一部分哈希槽,并将每台服务器与对应的哈希槽进行关联,需要注意的是,每台服务器关联的哈希槽相互之间需要不相同,也就是说,不能出现多台服务器同时关联相同的一个或者几个哈希槽的情况,具体原因由于与后续步骤相关联,因此在后续步骤中进行详细说明。
在一实施例中,所述将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同,包括:将所述哈希槽的总数量除以服务器的总数量,得到每台服务器关联的哈希槽的数量;依次从所有哈希槽中取出对应数量的哈希槽分配至每台服务器,并将每台服务器与分配的哈希槽进行关联。
本实施例中,首先分别统计哈希槽的总数量以及服务器的总数量,然后将哈希槽的总数量除以服务器的总数量,得到的结果即为每台服务器应分配到的哈希槽的数量,从而将对应数量的哈希槽分配至每台服务器。在这里,可以首先对所有哈希槽进行统一编号,然后根据除法计算得到的结果,从编号为0的哈希槽开始,将所有哈希槽划分为多个(与服务器的总数量相同)编号范围,每个编号范围内包含的哈希槽的数量与得到的结果相等,然后将多个编号范围内的哈希槽分别分配至每台服务器,并将每台服务器与分配的编号范围内的哈希槽进行关联,如此,可以实现哈希槽的均匀分配。
需要说明的是,当哈希槽的总数量无法除尽服务器的总数量时,即存在余数时,则可以在所有的服务器中选择出一部分服务器,这部分服务器的数量大小与余数相等,然后将数量大小与余数相等的哈希槽一一分配至这部分服务器,并将这部分服务器与对应的哈希槽进行关联。优选的,选择的一部分服务器为所有服务器中性能较好的一部分,这样可以防止性能相对较差的服务器关联的哈希槽较多,影响定时任务的执行效率。
举例说明,设置的多个哈希槽的总数量为16384,编号为0~16383,服务器的总数量为3,将哈希槽的总数量(16384)除以服务器的总数量(3),得到的结果包含余数,即余数为1,则可以从3台服务器中选择1台性能较好的服务器,并使选择的服务器关联的哈希槽的数量比另外两台服务器关联的哈希槽的数量多一个,即选择的服务器关联的哈希槽的编号可以为0~5461,另外两台服务器关联的哈希槽的编号分别为5462~10922和10933~16383。
S103、当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;
本步骤中,由于定时任务中包含多条数据,因此在需要执行定时任务时,需要对定时任务中的多条数据进行处理,而每条数据都会存在用于区分的关键字,即数据的主键字段,因此可以根据数据的主键字段对数据进行分配处理,确保每条数据都能够被处理。
在一实施例中,所述当需要对定时任务的各条数据进行处理时,获取各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果包括:根据哈希算法计算各条数据的主键字段对应的哈希值;通过所述哈希值对所述哈希槽的总数量进行取模计算,得到取模结果。
本实施例中,由于数据的主键字段可能包含英文字母或者其他特殊字符等,因此需要将各条数据的主键字段转换为数字。首先采用哈希算法对各条数据的主键字段进行计算,得到各条数据的哈希值,即一串固定长度的数字,然后根据这一串固定长度的数字对哈希槽的总数量进行取模计算。
在一具体实施例中,所述哈希算法为CRC16算法。即通过CRC16算法对各条数据的主键字段进行计算,得到各条数据对应的数值,从而进行取模计算。
S104、根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;
根据上一步骤中得到的取模结果,在哈希槽中找到各条数据的取模结果对应的编号(这里所说的对应是指各条数据的取模结果与哈希槽的编号大小相等),而每个编号的哈希槽都会存在关联的服务器,因此最终可以根据各条数据对应的编号,将各条数据分配至与对应编号的哈希槽关联的服务器,并由分配的服务器对数据进行处理。
需要说明的是,由于在本实施例中,首先根据各条数据的取模结果找到对应的哈希槽的编号,然后根据哈希槽与服务器的关联关系将各条数据分配至服务器进行处理,因此需要每台服务器关联的哈希槽不相同,使一条数据一次只能被分配至一台服务器。如果出现多台服务器关联的哈希槽中存在相同的哈希槽的情况,同时某一条数据的取模结果对应的哈希槽的编号与多台服务器关联的相同哈希槽的编号相同,则会导致该条数据被同时分配至多台服务器,进而导致该条数据被重复多次处理。
S105、通过Redis数据库记录参与所述定时任务的服务器的总数量;
本步骤中,由于执行定时任务的所有服务器之间都是相互独立的,无法获知除自身以外其他服务器执行定时任务的进度,因此通过增加Redis数据库,实现各服务器之间的线程同步通信。另外,Redis数据库具有原子性自增方法,自带分布式锁,可以保证服务器处理数据时不被干扰。在执行定时任务时,首先通过Redis数据库记录参与当前定时任务的服务器的总数量,防止在执行定时任务过程中,服务器的总数量发生变化,影响后续步骤的执行。
需要说明的是,本步骤中,Redis数据库中记录的参与当前定时任务的服务器的总数量与参与分配哈希槽的服务器的总数量并不一定相等,前者也可能小于后者。因为在参与分配哈希槽的所有服务器中,在分配当前定时任务(即分配定时任务中的各条数据)时,可能会有部分服务器未被分配到数据,因此在参与执行当前定时任务时,未被分配到数据的服务器并不会被Redis数据库记录,从而导致参与当前定时任务的服务器的总数量小于参与分配哈希槽的服务器的总数量。
S106、在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;
本步骤中,当存在服务器处理完对应的数据时,即服务器执行完定时任务中该服务器对应的部分定时任务时,在Redis数据库中记录下已经处理完对应数据的服务器的数量,并将上一步骤中记录的服务器的总数量(即参与所述定时任务的服务器的总数量)与本步骤中记录的处理完对应数据的服务器的数量进行比较,判断二者是否相等。
S107、若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;
当处理完对应数据的服务器与参与当前定时任务的服务器的总数量相等时,则说明参与执行当前定时任务的服务器均已经完成各自对应的部分定时任务,因此可以确定当前定时任务执行完成。另外,当当前定时任务结束时,Redis数据库中记录的数据便可以删除,即将记录的服务器的总数量以及处理完对应数据的服务器的数据重置。
在一具体实施例中,所述在Redis数据库中记录处理完对应数据的服务器的数量,包括:当一服务器处理完对应数据时,则在所述Redis数据库中将处理完对应数据的服务器的数量加1。即每当有服务器处理完对应数据时,便在Redis数据库将记录处理完对应数据的服务器的数量加1,这样可以保证对处理完对应数据的服务器的数量进行实时记录更新,进而实时比较参与当前定时任务的服务器的总数量与处理完对应数据的服务器的数量是否相等,从而提高定时任务的执行效率。
S108、若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。
当处理完对应数据的服务器与参与当前定时任务的服务器的总数量不相同时,则说明还有一部分服务器还在处理对应的数据,此时,处理完对应数据的服务器还不可以转而处理下一次定时任务中的数据,还需要等待未处理完对应数据的服务器,并且只有当所有服务器均处理完对应数据时,才可以结束本次定时任务,如此,可以保证所有服务器每一次都可以同步执行定时任务。而如果处理完对应数据的服务器没有等待未处理完对应数据的服务器,直接执行下一次定时任务时,有可能会导致下一次定时任务中的数据被先后分配至多台服务器进行处理,从而导致下一次定时任务重复执行。
本实施例中,首先通过设置多个哈希槽,对定时任务中的数据进行取模计算,使所有数据能够均匀分配至各服务器进行处理,使定时任务分配均匀。另外,通过增加Redis数据库,记录服务器的数量,实现所有服务器相互之间同步通信,使每一次定时任务都可以同步执行,且不会重复执行定时任务。
在一实施例中,当当前定时任务未执行完成并且增加新的服务器时,则等待当前定时任务执行完成;在当前定时任务执行完成后,更新服务器的总数量,并基于更新后的服务器的总数量重新分配哈希槽。
本实施例中,当在执行定时任务过程中,有新的服务器加入时,此时,新加入的服务器无法参与执行当前定时任务,因为当前定时任务已经被分配完成,因此需要等待当前定时任务执行完成。当当前定时任务执行完成后,由于存在新加入的服务器,服务器的总数量发生变化,因此在执行下一次定时任务前,需要更新服务器的总数量,在分配哈希槽时也需要重新根据更新后的服务器的总数量进行分配,即每台服务器在下一次定时任务中关联的的哈希槽将会减少,最后被分配处理的数据也会随之减少。
在一实施例中,当执行下一次定时任务时,在所述Redis数据库中重新设置参与定时任务的服务器的总数量。本实施例中,在执行下一次定时任务时,由于下一次定时任务中的数据可能发生变化,从而导致各条数据分配的服务器发生变化,也就是说参与当前定时任务的服务器可能在下一次定时任务未被分配到数据,因此需要对参与下一次定时任务的服务器的总数量进行更新。
在一实施例中,所述定时任务的执行方法还包括:
判断每台服务器处理对应数据的时长是否超过预设的执行时间阈值;若超过,则判定对应的服务器出现异常,并将对应的服务器处理的数据重新分配至处理完对应数据的服务器进行处理。
本实施例中,为了防止服务器在处理数据时出现异常,导致迟迟无法完成对应的部分定时任务,因而设置一执行时间阈值。这里的执行时间阈值可以根据以往执行定时任务的经验进行设置,具体可以是:获取最近5次定时任务执行的历史记录中服务器处理完对应数据所用的时长,并将其中的最大时长设置为执行时间阈值;或者是将执行时间阈值设置为其中的最大时长加上最大时长的五分之一,这样设置的好处是:如果服务器处理的对应数据比较复杂,需要更多时间进行处理时,不会因为服务器处理对应数据的时长超过预设的执行时间阈值而将服务器判定为出现异常。
在执行定时任务过程中,将每台服务器处理对应数据的时长与预设的执行时间阈值进行比较,判断是否有服务器出现异常。由于预设的执行时间阈值是根据最近5次定时任务执行的历史记录中服务器处理完对应数据所用的最大时长设置的,而最后处理完对应数据的服务器通常是在所有服务器中性能较差的一个,或者是处理的对应数据较为复杂,因此当有服务器处理对应数据的时长超过预设的执行时间阈值时,那么在此之前性能较好的服务器或者处理对应数据较为简单的服务器应当已经完成对应的部分定时任务。因此,当有服务器处理对应数据的时长超过预设的执行时间阈值时,则将对应的服务器判定为出现异常,并获取出现异常的服务器处理的对应数据(也就是未处理完成的数据),并将该数据重新分配至已处理完对应数据的服务器(此处已处理完对应数据的服务器是指该服务器已处理完步骤S104所分配的数据),由已处理完对应数据的服务器重新处理该数据。优选的,当已处理完对应数据的服务器有多台时,将数据分配至最早处理完对应数据的服务器,因为最早处理完对应数据的服务器的性能可能相对较好,由性能较好的服务器处理数据,可以加快执行定时任务,提高定时任务执行效率。
请参阅图2,图2为本发明实施例提供的一种定时任务的执行装置200的示意性框图,所述执行装置200包括:
编号单元201,用于设置多个哈希槽,并对所述多个哈希槽进行编号;
关联单元202,用于将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;
获取单元203,用于当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;
分配单元204,用于根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;
记录单元205,用于通过Redis数据库记录参与所述定时任务的服务器的总数量;
判断单元206,用于在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;
第一重置单元207,用于若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;
等待单元208,用于若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。
在一实施例中,所述关联单元202包括:
除法单元,用于将所述哈希槽的总数量除以服务器的总数量,得到每台服务器关联的哈希槽的数量;
分配单元,用于依次从所有哈希槽中取出对应数量的哈希槽分配至每台服务器,并将各服务器与分配的哈希槽进行关联。
在一实施例中,所述获取单元203包括:
哈希计算单元,用于根据哈希算法计算各条数据的主键字段对应的哈希值;
取模单元,用于通过所述哈希值对所述哈希槽的总数量进行取模计算,得到取模结果。
在一实施例中,所述定时任务的执行装置200还包括:
等待单元,用于当当前定时任务未执行完成并且增加新的服务器时,则等待当前定时任务执行完成;
更新单元,用于在当前定时任务执行完成后,更新服务器的总数量,并基于更新后的服务器的总数量重新分配哈希槽。
在一实施例中,所述定时任务的执行装置200还包括:
第二重置单元,用于当执行下一次定时任务时,在所述Redis数据库中重新设置参与定时任务的服务器的总数量。
在一实施例中,所述哈希算法为CRC16算法。
在一实施例中,所述判断单元206包括:
加1单元,用于当一服务器处理完对应数据时,则在所述Redis数据库中将处理完对应数据的服务器的数量加1。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本发明实施例还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供了一种计算机设备,可以包括存储器和处理器,存储器中存有计算机程序,处理器调用存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然电子设备还可以包括各种网络接口,电源等组件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种定时任务的执行方法,其特征在于,包括:
设置多个哈希槽,并对所述多个哈希槽进行编号;
将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;
当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;
根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;
通过Redis数据库记录参与所述定时任务的服务器的总数量;
在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;
若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;
若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。
2.根据权利要求1所述的定时任务的执行方法,其特征在于,所述将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同,包括:
将所述哈希槽的总数量除以服务器的总数量,得到每台服务器关联的哈希槽的数量;
依次从所有哈希槽中取出对应数量的哈希槽分配至每台服务器,并将每台服务器与分配的哈希槽进行关联。
3.根据权利要求1所述的定时任务的执行方法,其特征在于,所述当需要对定时任务的各条数据进行处理时,获取各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果包括:
根据哈希算法计算各条数据的主键字段对应的哈希值;
通过所述哈希值对所述哈希槽的总数量进行取模计算,得到取模结果。
4.根据权利要求1所述的定时任务的执行方法,其特征在于,还包括:
当当前定时任务未执行完成并且增加新的服务器时,则等待当前定时任务执行完成;
在当前定时任务执行完成后,更新服务器的总数量,并基于更新后的服务器的总数量重新分配哈希槽。
5.根据权利要求4所述的定时任务的执行方法,其特征在于,还包括:
当执行下一次定时任务时,在所述Redis数据库中重新设置参与定时任务的服务器的总数量。
6.根据权利要求3所述的定时任务的执行方法,其特征在于,所述哈希算法为CRC16算法。
7.根据权利要求4所述的定时任务的执行方法,其特征在于,所述在Redis数据库中记录处理完对应数据的服务器的数量,包括:
当一服务器处理完对应数据时,则在所述Redis数据库中将处理完对应数据的服务器的数量加1。
8.一种定时任务的执行装置,包括:
编号单元,用于设置多个哈希槽,并对所述多个哈希槽进行编号;
关联单元,用于将每台服务器与其中的一部分哈希槽进行关联,且每台服务器关联的哈希槽不相同;
获取单元,用于当需要对定时任务进行执行时,获取定时任务中各条数据的主键字段,并通过所述主键字段对所述哈希槽的总数量进行取模计算,得到取模结果;
分配单元,用于根据所述取模结果确定对应哈希槽的编号,并基于所述编号确定对应哈希槽关联的服务器,再将相应的数据分配至对应的服务器进行处理;
记录单元,用于通过Redis数据库记录参与所述定时任务的服务器的总数量;
判断单元,用于在Redis数据库中记录处理完对应数据的服务器的数量,并判断所述服务器的总数量与处理完对应数据的服务器的数量是否相等;
第一重置单元,用于若相等,则结束当前定时任务,并将所述Redis数据库中记录的服务器的总数量以及处理完对应数据的服务器的数量均重置为0;
等待单元,用于若不相等,则继续等待未处理完对应数据的服务器完成当前定时任务。
9.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的定时任务的执行方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的定时任务的执行方法。
CN201911301277.7A 2019-12-17 2019-12-17 一种定时任务的执行方法、装置、计算机设备及存储介质 Active CN111078413B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911301277.7A CN111078413B (zh) 2019-12-17 2019-12-17 一种定时任务的执行方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911301277.7A CN111078413B (zh) 2019-12-17 2019-12-17 一种定时任务的执行方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN111078413A true CN111078413A (zh) 2020-04-28
CN111078413B CN111078413B (zh) 2024-04-19

Family

ID=70315058

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911301277.7A Active CN111078413B (zh) 2019-12-17 2019-12-17 一种定时任务的执行方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN111078413B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113190777A (zh) * 2021-03-31 2021-07-30 北京达佳互联信息技术有限公司 数据更新方法、装置、电子设备、存储介质及产品
CN116095099A (zh) * 2023-01-20 2023-05-09 广东省中山市质量计量监督检测所 一种基于机器视觉的机械零件质检系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170031908A1 (en) * 2015-07-30 2017-02-02 Futurewei Technologies, Inc. Efficient parallel insertion into an open hash table
CN108132830A (zh) * 2016-12-01 2018-06-08 北京金山云网络技术有限公司 一种任务调度方法、装置及系统
CN110532111A (zh) * 2019-08-29 2019-12-03 深圳前海环融联易信息科技服务有限公司 高并发请求异步处理方法、装置、计算机设备及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170031908A1 (en) * 2015-07-30 2017-02-02 Futurewei Technologies, Inc. Efficient parallel insertion into an open hash table
CN108132830A (zh) * 2016-12-01 2018-06-08 北京金山云网络技术有限公司 一种任务调度方法、装置及系统
CN110532111A (zh) * 2019-08-29 2019-12-03 深圳前海环融联易信息科技服务有限公司 高并发请求异步处理方法、装置、计算机设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李兵: "大规模分布式指纹识别系统关键技术研究" *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113190777A (zh) * 2021-03-31 2021-07-30 北京达佳互联信息技术有限公司 数据更新方法、装置、电子设备、存储介质及产品
CN116095099A (zh) * 2023-01-20 2023-05-09 广东省中山市质量计量监督检测所 一种基于机器视觉的机械零件质检系统
CN116095099B (zh) * 2023-01-20 2023-09-12 广东省中山市质量计量监督检测所 一种基于机器视觉的机械零件质检系统

Also Published As

Publication number Publication date
CN111078413B (zh) 2024-04-19

Similar Documents

Publication Publication Date Title
US8867727B2 (en) Telephone number groups
CN107608773B (zh) 任务并发处理方法、装置及计算设备
CN109002259B (zh) 一种归置组所属硬盘分配方法、系统、装置及存储介质
CN111858055B (zh) 任务处理方法、服务器及存储介质
CN111078413A (zh) 一种定时任务的执行方法、装置、计算机设备及存储介质
CN111722928A (zh) 一种资源调度方法、装置、电子设备及存储介质
CN110636388A (zh) 一种业务请求分配方法、系统、电子设备及存储介质
CN110602227A (zh) 一种智能合约管理的方法以及相关装置
CN112699098A (zh) 一种索引数据迁移方法、装置及设备
CN111209111B (zh) 基于区块链系统的资源分配方法、装置、设备和存储介质
CN109977373B (zh) 标识号分配方法、标识号回收方法及装置
CN106169148B (zh) 一种客服服务方法及装置
CN110413393B (zh) 集群资源管理方法、装置、计算机集群及可读存储介质
CN111124672A (zh) 基于Redis集群的数据分配的方法及相关设备
WO2016070564A1 (zh) 网管系统中资源标识分配的方法及装置
CN107369088B (zh) 帐务交易的处理方法和装置
CN110991901A (zh) 任务分配方法、计算机存储介质及电子设备
CN110073321B (zh) 一种存储控制器及io请求处理方法
CN111967798B (zh) 实验样本分配的方法及装置、设备及计算机可读存储介质
US8201023B2 (en) Test optimization
CN110929207B (zh) 数据处理方法、装置和计算机可读存储介质
CN104572036B (zh) 事件的处理方法及装置
CN111858610A (zh) 数据行号分配方法和装置、存储介质、电子设备
CN112150035A (zh) 数据处理方法和装置
CN111552561B (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