CN105573841A - 一种基于非关系型数据库的控制定时器执行的方法 - Google Patents
一种基于非关系型数据库的控制定时器执行的方法 Download PDFInfo
- Publication number
- CN105573841A CN105573841A CN201510917191.2A CN201510917191A CN105573841A CN 105573841 A CN105573841 A CN 105573841A CN 201510917191 A CN201510917191 A CN 201510917191A CN 105573841 A CN105573841 A CN 105573841A
- Authority
- CN
- China
- Prior art keywords
- timer
- relational database
- identifier
- described non
- database
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于非关系型数据库的控制定时器执行的方法,首先建立一个非关系型数据库,然后为各定时器配置标识符,当各定时器接收到执行指令时,判断所述非关系型数据库中是否已经存在该定时器的标识符,若存在,则令该定时器不执行;否则,将该定时器的标识符写入所述非关系型数据库,并令该定时器执行。本发明在避免定时器单点的同时,能防止多个定时器在某一时间段内同时执行,节省了资源,在数据库异常时进行了相应的配置,使得定时器不会因为数据库失效而无法运行。
Description
技术领域
本发明涉及计算机软件领域,尤其涉及一种基于非关系型数据库的控制定时器执行的方法。
背景技术
目前大多数系统都会用到定时器(worker),定时器的作用是在设定的时间间隔到期时自动触发应用实例,以执行一些业务操作。在大型的java系统(例如购物网站)中,通常会设有多个服务器,每个服务器均包括多个应用实例,并且每个服务器包括应用实例相同,每个应用实例对应一个定时器,例如,若设有10台服务器,每台服务器均包括100个应用实例,针对其中一个应用实例A,由于其在10台服务器中均存在,那么就对应设有10个相同的定时器,如果10个相同的定时器都执行,那相对应的应用实例A会在10台服务器上都运行,进行相同的业务操作,这无疑造成了资源的浪费。
现有技术是采用spring通过依赖数据库来防止多定时器同时执行,因为要依赖数据库,所以就涉及到建表等繁琐操作,并且不能给出数据库挂掉后定时器如何工作的解决方案。
另外一种是将所有的定时器均设于一台服务器中,专门用于触发其他服务器中的应用实例,此方案的缺点是会造成定时器单点,即一旦定时器所处的服务器出现异常导致定时器无法执行,其他服务器中的应用实例也均无法运行。
发明内容
(一)要解决的技术问题
本发明的目的在于,提供一种基于非关系型数据库的控制定时器执行的方法,可以防止多个定时器同时执行,同时解决定时器单点的问题。
(二)技术方案
本发明提供一种基于非关系型数据库的控制定时器执行的方法,包括:
S1,建立一个非关系型数据库;
S2,为各定时器配置标识符,其中,相同的定时器所配置的标识符相同,相同的定时器是指用于触发同一应用实例的定时器;
S3,当各定时器接收到执行指令时,判断非关系型数据库中是否已经存在该定时器的标识符,若存在,则令该定时器不执行;否则,将该定时器的标识符写入非关系型数据库,并令该定时器执行。
(三)有益效果
本发明通过为定时器配置标识符,并通过标识符在非关系型数据库进行判定,以获取定时器的“执行权限”,并在数据库中设置标识符的删除时间,避免定时器单点,并能防止多个定时器在某一时间段内同时执行,节省了资源;另外,本发明在数据库异常时进行了相应的配置,使得定时器不会因为数据库失效而无法运行。
附图说明
图1是本发明实施例提供的基于redis数据库的控制定时器执行的方法的流程图。
图2是本发明实施例提供的定时器与redis数据库的结构示意图。
图3是本发明实施例提供的redis数据库中主从节点的示意图。
具体实施方式
本发明提供一种基于非关系型数据库的控制定时器执行的方法,首先建立一个非关系型数据库,然后为各定时器配置标识符,当各定时器接收到执行指令时,判断所述非关系型数据库中是否已经存在该定时器的标识符,若存在,则令该定时器不执行;否则,将该定时器的标识符写入所述非关系型数据库,并令该定时器执行。本发明在避免定时器单点的同时,能防止多个定时器在某一时间段内同时执行,节省了资源,在数据库异常时进行了相应的配置,使得定时器不会因为数据库失效而无法运行。
根据本发明的一种实施方式,基于非关系型数据库的控制定时器执行的方法包括:
S1,建立一个非关系型数据库;
S2,为各定时器配置标识符,其中,相同的定时器所配置的标识符相同,相同的定时器是指用于触发同一应用实例的定时器;
S3,当各定时器接收到执行指令时,判断所述非关系型数据库中是否已经存在该定时器的标识符,若存在,则令该定时器不执行;否则,将该定时器的标识符写入所述非关系型数据库,并令该定时器执行。在标识符判断中,若标识符存在则说明相同的定时器(其可能存在于其他服务器中)已经执行过,故该定时器就不再执行了,若标识符存在则说明相同的定时器从没执行过,则将标识符写入非关系型数据库,并另该定时器执行,这样,后续相同的定时器将无法执行,从而达到了“排他执行”的目的。
根据本发明的一种实施方式,方法还包括:S4,定时器执行完毕后,向非关系型数据库发送标识符过期命令,以使非关系型数据库自该定时器执行完毕时起,经过一指定时间后,删除所述非关系型数据库中该定时器对应的标识符。本发明并在没有定时器执行完毕后,直接删除对应的标示符,而是经过一指定时间后进行删除,这主要是考虑到多个服务器上的时间可能不同步的,那么很有可能多个相同的定时器并没有同时被触发,这时如果A机器上的定时器提前触发,并且被快速的被执行完毕,然后B机器上的相同的定时器向数据库发送命令的时候,因为代表他的标示符已被删除所以该定时器就会被再执行一遍,从而导致资源浪费甚至业务错误。
根据本发明的一种实施方式,为了保证定时器的可扩展性,本发明抽象出一个公共的基类,定时器是继承一基类的子类,基类封装有变量,该变量表示该定时器是否执行,子类封装有该定时器的标识符。这样,不同的定时器通过继承该基类只做其业务相关的操作。
根据本发明的一种实施方式,标识符由该子类的类名、一固定字符串及系统时间组成,例如:
子类的类名:com.jd.configWorker
一个固定的字符串:_work_
一个精确到小时的时间:2015092012
那么该定时器在系统中的标识符为:
com.jd.configWorker_work_2015092012
其中,系统时间可精确到小时,这表明每个定时器的标识符会每小时变更一次,这样设置是考虑到,如果定时器在执行完毕后,由于某种原因数据库未收到标识符过期命令,那么后续的所有该标示符代表的定时器就都不会执行。加上这个时间后,即使没有成功设置超时时间,那么该worker也会在后续的时间继续正常工作,另外根据业务的不同,这个时间也是可以灵活变更的,可以根据具体的业务来设置该时间的精度。
根据本发明的一种实施方式,步骤S3具体包括:当各定时器接收到执行指令时,该定时器向非关系型数据库发送一个写入请求,以请求将该定时器的标识符写入该非关系型数据库,接着,判断非关系型数据库是否已经存在该定时器的标识符,若存在,则非关系型数据库向该定时器返回写入失败响应,并使该定时器不执行;若非关系型数据库中不存在该定时器的标识符,则将该定时器的标识符写入非关系型数据库,并且,非关系型数据库向该定时器返回写入成功响应,并使该定时器执行。
根据本发明的一种实施方式,非关系型数据库包括主节点及子节点,其中主节点与子节点存储的数据同步,在步骤S3的判断步骤中,首先通过访问非关系型数据库的主节点来判断非关系型数据库中是否已经存在该定时器的标识符,当主节点发生异常时,再通过访问非关系型数据库的子节点来判断非关系型数据库中是否已经存在该定时器的标识符。
根据本发明的一种实施方式,当非关系型数据库整体异常时,可通过预先的设置,另所有定时器都执行或者都不执行。
根据本发明的一种实施方式,所述非关系型数据库为redis数据库。
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
图1是本发明实施例提供的基于redis数据库的控制定时器执行的方法的流程图,如图1所示,方法包括:
S1,建立一个redis数据库;
S2,为定时器配置标识符,定时器为一个类,标识符以类名、一固定字符串及系统时间组成:com.jd.configWorker_work_2015092012;
S3,定时器执行前,向非关系型数据库发送一个写入请求,用于请求将定时器的标识符写入该数据库,非关系型数据库判断其是否已经存在该定时器的标识符,若存在,非关系型数据库向该定时器返回写入失败响应,以使该定时器不执行;若非关系型数据库中不存在该定时器的标识符,则将该定时器的标识符写入非关系型数据库,并且,非关系型数据库向该定时器返回写入成响应,以使该定时器执行。如图2所示,在相同的定时器A、B、C均要执行时,先要向数据库索取“执行权”,即是否成功将标识符写入数据库,这取决于该标识符在数据库中是否已经存在,若标识符存在则说明相同的定时器(其可能存在于其他服务器中)已经执行过,故该定时器就不再执行了,若标识符存在则说明相同的定时器从没执行过,则将标识符写入非关系型数据库,并另该定时器执行,这样,后续相同的定时器将无法执行,从而达到了“排他执行”的目的。
S4,定时器执行完毕后,向非关系型数据库发送标识符过期命令,以使非关系型数据库自该定时器执行完毕时起,经过一指定时间后,删除所述非关系型数据库中该定时器对应的标识符。
图3是本发明实施例提供的redis数据库中主从节点的示意图,如图3所示,redis数据库包括主节点及子节点,其中主节点与子节点存储的数据同步,在redis数据库正常运行时,通过访问redis数据库的主节点,以判断redis数据库中是否已经存在该定时器的标识符,当主节点发生异常时,通过访问redis数据库的子节点,以判断redis数据库中是否已经存在该定时器的标识符。而当redis数据库整体异常时(即主节点及子节点均无法工作),另所有定时器都执行。这样的配置使得定时器不会因为数据库失效而无法运行。
需要说明的是,本发明所说的防止定时器“同时”执行,由于系统采用单线程操作,即便是多个相同的定时器“同时”去访问数据库,该多个相同的定时器访问数据库一定存在先后顺序,故本发明的思想在于在先访问就获得“执行权”,后面的定时器即不再执行。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于非关系型数据库的控制定时器执行的方法,用于控制至少一个定时器的执行,其特征在于,方法包括:
S1,建立一个非关系型数据库;
S2,为各定时器配置标识符,其中,相同的定时器所配置的标识符相同,相同的定时器是指用于触发同一应用实例的定时器;
S3,当各定时器接收到执行指令时,判断所述非关系型数据库中是否已经存在该定时器的标识符,若存在,则令该定时器不执行;否则,将该定时器的标识符写入所述非关系型数据库,并令该定时器执行。
2.根据权利要求1所述的控制定时器执行的方法,其特征在于,还包括:
S4,每个定时器执行完毕后,向所述非关系型数据库发送标识符过期命令,以使所述非关系型数据库自该定时器执行完毕时起,经过一指定时间后,删除所述非关系型数据库中该定时器对应的标识符。
3.根据权利要求1所述的控制定时器执行的方法,其特征在于,所述步骤S3具体包括:
当各定时器接收到执行指令时,该定时器向所述非关系型数据库发送一个写入请求,以请求将该定时器的标识符写入该非关系型数据库,接着,判断所述非关系型数据库是否已经存在该定时器的标识符,若存在,则所述非关系型数据库向该定时器返回写入失败响应,并使该定时器不执行;若所述非关系型数据库中不存在该定时器的标识符,则将该定时器的标识符写入所述非关系型数据库,并且,所述非关系型数据库向该定时器返回写入成功响应,并使该定时器执行。
4.根据权利要求1所述的控制定时器执行的方法,其特征在于,所述非关系型数据库包括主节点及子节点,其中主节点与子节点存储的数据同步,在所述步骤S3的判断步骤中,首先通过访问所述非关系型数据库的主节点来判断非关系型数据库中是否已经存在该定时器的标识符,当所述主节点发生异常时,再通过访问所述非关系型数据库的子节点来判断非关系型数据库中是否已经存在该定时器的标识符。
5.根据权利要求1所述的控制定时器执行的方法,其特征在于,所述步骤S3中判断所述非关系型数据库中是否已经存在定时器的标识符时,若所述非关系型数据库整体异常时,令该定时器执行。
6.根据权利要求1所述的控制定时器执行的方法,其特征在于,所述步骤S3中判断所述非关系型数据库中是否已经存在定时器的标识符时,若所述非关系型数据库整体异常时,令该定时器不执行。
7.根据权利要求1至6中任意一项所述的控制定时器执行的方法,其特征在于,所述非关系型数据库为redis数据库。
8.根据权利要求1至6中任意一项所述的控制定时器执行的方法,其特征在于,所述定时器是继承一基类的子类,所述基类封装有变量,该变量表示该定时器是否执行,所述子类封装有该定时器的标识符。
9.根据权利要求1至6中任意一项所述的定时器执行方法,其特征在于,所述标识符由该子类的类名、一固定字符串及系统时间组成。
10.根据权利要求9所述的控制定时器执行的方法,其特征在于,所述系统时间精确到小时,以使该标识符按每小时更新一次。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510917191.2A CN105573841B (zh) | 2015-12-10 | 2015-12-10 | 一种基于非关系型数据库的控制定时器执行的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510917191.2A CN105573841B (zh) | 2015-12-10 | 2015-12-10 | 一种基于非关系型数据库的控制定时器执行的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105573841A true CN105573841A (zh) | 2016-05-11 |
CN105573841B CN105573841B (zh) | 2019-06-04 |
Family
ID=55884011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510917191.2A Active CN105573841B (zh) | 2015-12-10 | 2015-12-10 | 一种基于非关系型数据库的控制定时器执行的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105573841B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825758A (zh) * | 2019-10-31 | 2020-02-21 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040064558A1 (en) * | 2002-09-26 | 2004-04-01 | Hitachi Ltd. | Resource distribution management method over inter-networks |
CN102207888A (zh) * | 2011-05-09 | 2011-10-05 | 大唐移动通信设备有限公司 | 定时器管理方法和装置 |
CN103019805A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种多线程环境下定时器的设置方法 |
CN104093199A (zh) * | 2014-07-29 | 2014-10-08 | 中国联合网络通信集团有限公司 | 定时器设置方法和终端 |
CN104135571A (zh) * | 2014-08-12 | 2014-11-05 | 中国联合网络通信集团有限公司 | 心跳定时器设置方法、终端和服务器 |
CN104391732A (zh) * | 2014-11-20 | 2015-03-04 | 中国船舶重工集团公司第七二六研究所 | 软件多定时器动态管理方法 |
-
2015
- 2015-12-10 CN CN201510917191.2A patent/CN105573841B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040064558A1 (en) * | 2002-09-26 | 2004-04-01 | Hitachi Ltd. | Resource distribution management method over inter-networks |
CN102207888A (zh) * | 2011-05-09 | 2011-10-05 | 大唐移动通信设备有限公司 | 定时器管理方法和装置 |
CN103019805A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种多线程环境下定时器的设置方法 |
CN104093199A (zh) * | 2014-07-29 | 2014-10-08 | 中国联合网络通信集团有限公司 | 定时器设置方法和终端 |
CN104135571A (zh) * | 2014-08-12 | 2014-11-05 | 中国联合网络通信集团有限公司 | 心跳定时器设置方法、终端和服务器 |
CN104391732A (zh) * | 2014-11-20 | 2015-03-04 | 中国船舶重工集团公司第七二六研究所 | 软件多定时器动态管理方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825758A (zh) * | 2019-10-31 | 2020-02-21 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
CN110825758B (zh) * | 2019-10-31 | 2022-11-15 | 中国银联股份有限公司 | 一种交易处理的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105573841B (zh) | 2019-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110389900B (zh) | 一种分布式数据库集群测试方法、装置及存储介质 | |
US10678601B2 (en) | Orchestration service for multi-step recipe composition with flexible, topology-aware, and massive parallel execution | |
CN112214330A (zh) | 集群中主节点的部署方法、装置及计算机可读存储介质 | |
CN108139964B (zh) | 云服务配置方法、装置、存储介质及云服务系统 | |
CN104360878B (zh) | 一种应用软件部署的方法及装置 | |
US11748163B2 (en) | Control token and hierarchical dynamic control | |
KR20140025503A (ko) | 서비스의 2차 위치에서의 작업의 재생 기법 | |
CN105468500A (zh) | 定时任务监控方法和装置 | |
WO2012121899A2 (en) | System and method to provide remote device management for mobile virtualized platforms | |
CN115292026B (zh) | 容器集群的管理方法、装置、设备及计算机可读存储介质 | |
US10778597B1 (en) | Orchestration management system and method for managing a resource pool across multiple computing clouds | |
JP2013218687A (ja) | サーバー監視システム及びその方法 | |
CN108319492B (zh) | 复位物理机的方法、装置与系统 | |
CN110750343A (zh) | 集群系统定时任务调度控制方法及集群系统 | |
CN110704172B (zh) | 集群系统定时任务调度方法及集群系统 | |
CN104516744A (zh) | 软件更新方法及系统 | |
CN111831567A (zh) | 应用的测试环境配置方法、装置、系统和介质 | |
CN104410511A (zh) | 一种服务器管理方法及系统 | |
US20150039929A1 (en) | Method and Apparatus for Forming Software Fault Containment Units (SWFCUS) in a Distributed Real-Time System | |
CN106648964A (zh) | 数据库备份方法及系统 | |
CN110162312B (zh) | 一种基于IML的BeeGFS配置方法与装置 | |
CN105573841A (zh) | 一种基于非关系型数据库的控制定时器执行的方法 | |
WO2023061257A1 (zh) | 数据库业务处理方法和装置 | |
CN112445549A (zh) | 运维方法、运维装置、电子设备和介质 | |
CN116149713A (zh) | 一种树型异构网络下的各级设备的程序升级方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |