CN111444002A - 一种任务调度方法及装置 - Google Patents

一种任务调度方法及装置 Download PDF

Info

Publication number
CN111444002A
CN111444002A CN202010218602.XA CN202010218602A CN111444002A CN 111444002 A CN111444002 A CN 111444002A CN 202010218602 A CN202010218602 A CN 202010218602A CN 111444002 A CN111444002 A CN 111444002A
Authority
CN
China
Prior art keywords
lock
data
adapter
transaction
holding
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.)
Pending
Application number
CN202010218602.XA
Other languages
English (en)
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.)
WeBank Co Ltd
Original Assignee
WeBank 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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202010218602.XA priority Critical patent/CN111444002A/zh
Publication of CN111444002A publication Critical patent/CN111444002A/zh
Pending legal-status Critical Current

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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • 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/466Transaction processing
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/482Application

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Business, Economics & Management (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Finance (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • Technology Law (AREA)
  • General Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种任务调度方法及装置,其中方法为:获取调度框架中的第一适配器;通过所述第一适配器确定所述数据锁;通过所述第一适配器,获取所述数据锁的持有标识;若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务;所述抢锁事务用于抢占所述数据锁;若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务。上述方法应用于金融科技(Fintech)时,通过获取调度框架中的第一适配器,获取所述数据锁的持有标识,预先判断数据锁是否被占用,因此可以通过调度框架中的第一适配器实现悲观锁的机制,可以使得金融系统同时满足高性能和高可靠性。

Description

一种任务调度方法及装置
技术领域
本发明涉及金融科技(Fintech)领域中的数据库领域,尤其涉及一种任务调度方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求,金融机构的任务处理系统,都面临着大量的任务、海量的数据需要处理。
对于金融机构的任务,一般通过调度框架来进行任务调度。举例来说,调度框架为Quartz。调度框架一个基本特性是:对于同一个任务,在任何一个触发时间窗口内,通过锁定该任务所用到的数据,有且只有一个应用实例可以执行该任务,从而可以防止相同任务在同一时间窗口内被重复执行而出错。但这种任务调度的互斥锁机制依赖于调度框架与关系型数据库的结合,本质上是通过关系型数据库的悲观锁机制锁定数据实现的。关系型数据库的横向扩展性差,当数据量较大时,又会导致任务调度的性能较差。而目前的新型数据库虽然可以横向扩展,但采用的是乐观锁机制,可能导致相同任务在同一时间窗口内被多个应用实例重复执行而出错,即可靠性较差。因此目前的任务调度方法,不能同时满足高性能和高可靠性,这是一个亟待解决的问题。
发明内容
本发明提供一种任务调度方法及装置,解决了现有技术中任务调度方法,不能同时满足高性能和高可靠性的问题。
第一方面,本发明提供一种任务调度方法,包括:获取调度框架中的第一适配器;所述第一适配器与所述目标数据库适配;所述第一适配器被设置于替换所述调度框架中的第二适配器;所述第二适配器与关系型数据库适配;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;所述数据锁用于锁定所述待调用数据;所述待调用数据是待调度任务所需的数据;通过所述第一适配器确定所述数据锁;通过所述第一适配器,获取所述数据锁的持有标识;所述持有标识用于指示所述数据锁为空闲状态或占用状态;若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务;所述抢锁事务用于抢占所述数据锁;若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务;所述抢锁事务提交成功表示所述持有标识指示所述数据锁为占用状态。
上述方法中,所述待调用数据是调度待调度任务所需的数据,所述数据锁用于锁定所述待调用数据;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;但是所述第二适配器与关系型数据库适配,为了与所述目标数据库适配,所述第一适配器被设置于替换所述调度框架中的第二适配器,获取调度框架中的第一适配器后,便通过所述第一适配器确定所述数据锁,并通过所述第一适配器,获取所述数据锁的持有标识;所述持有标识用于指示所述数据锁为空闲状态或占用状态,加入了持有标识后,还是要先判断所述数据锁为空闲状态后再去抢占所述数据锁,当所述持有标识指示所述数据锁为空闲状态时,便向目标数据库提交抢锁事务,但实现的抢锁机制是悲观锁的机制,即先确定锁是否被占用,确定未被占用后,且抢锁事务提交成功,才确定已获取到了将所述待调用数据锁定的所述数据锁,并通过所述抢锁事务提交成功表示了所述持有标识修改为指示所述数据锁为占用状态,在确定了所述数据锁将所述待调用数据锁定后,才根据所述数据锁已锁定的所述待调用数据,调度待调度任务,从而既可以通过目标数据库扩展性能,又可以通过对数据锁增加持有标识来实现悲观锁的抢锁机制,从而提供了一种同时满足高性能和高可靠性的任务调度方法。
可选地,所述目标数据库在所述调度框架中对应第一锁记录;所述关系型数据库在所述调度框架中对应第二锁记录;所述通过所述第一适配器确定所述数据锁,包括:通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁;所述通过所述第一适配器,获取所述数据锁的持有标识,包括:通过所述第一适配器的互斥锁获取接口,从所述第一锁记录中获取所述持有标识;所述互斥锁获取接口中定义了所述目标数据库中所述数据锁的获取函数,所述获取函数中定义了所述数据锁的所述持有标识的机制。
上述方法中,所述目标数据库在所述调度框架中对应第一锁记录;所述关系型数据库在所述调度框架中对应第二锁记录,因此可以通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述目标数据库在所述调度框架中的第一锁记录中确定出所述数据锁;进一步地,由于第一适配器中的互斥锁获取接口中定义了所述目标数据库中所述数据锁的获取函数,所述获取函数中定义了所述数据锁的所述持有标识的机制,因此可以通过所述第一适配器的互斥锁获取接口,为数据锁做持有标记,并从所述第一锁记录中获取所述数据锁的持有标识,从而通过第一锁记录来获取所述数据锁的持有标识,从而提供了一种通过所述目标数据库专用的第一锁记录以及第一适配器的互斥锁获取接口来确定数据锁并获取所述数据锁的持有标识的方法。
可选地,所述通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁,包括:通过所述第一适配器确定所述待调度任务在所述调度框架中对应的调度器,以及从所述第二锁记录中确定所述待调用数据的第一锁;通过所述第一适配器,根据所述调度器的名称与所述第一锁的名称,确定出所述待调用数据在所述第一锁记录中的第二锁的名称;所述第二锁为所述待调用数据的数据锁。
上述方法中,通过所述第一适配器先确定所述待调度任务在所述调度框架中对应的调度器,以及从原有的第二锁记录中确定第一锁,从而可以根据所述调度器的名称与所述第一锁的名称,从新定义的第一适配器所对应的所述第一锁记录中确定出第二锁的名称,从而实现了通过在调度框架中引入第一适配器,确定所述新型数据库中所述待调用数据的所述数据锁。
可选地,通过所述互斥锁获取接口创建所述抢锁事务;所述抢锁事务用于将所述第一锁记录中所述持有标识的指示修改为:所述数据锁为占用状态;通过所述互斥锁获取接口提交所述抢锁事务。
上述方式下,通过所述互斥锁获取接口可以创建抢锁事务,从而通过第一适配器的互斥锁获取接口实现事务的包装,进一步通过所述互斥锁获取接口提交所述抢锁事务,对所述第一锁记录中的所述持有标识的指示做修改。
可选地,所述获取所述数据锁的持有标识之后,还包括:若所述持有标识指示所述数据锁为占用状态,或所述持有标识指示所述数据锁为空闲状态且所述抢锁事务提交失败,则确定截止本次获取到所述持有标识时所述持有标识已获取到的累计次数;若所述持有标识已获取到的累计次数小于预设次数,则按照预设周期执行所述获取所述数据锁的持有标识的步骤。
上述方式下,所述持有标识指示所述数据锁为占用状态,或者所述数据锁为空闲状态且所述抢锁事务提交失败的情况下,不断地确定已获取到的累计次数,累计次数小于预设次数便不断获取数据锁的持有标识,从而提供了一种周期性竞争数据锁的方法。
可选地,若所述持有标识已获取到的累计次数大于或等于所述预设次数,则确定所述累计次数的所述持有标识获取情况中是否存在以下情况:该次获取到的所述持有标识指示所述数据锁为空闲状态,且该次获取所述持有标识后向所述目标数据库提交抢锁事务失败;若存在,则将所述累计次数更新为0;若不存在,则提交解锁事务;所述解锁事务用于解除所述数据锁对所述待调用数据的锁定;将所述持有标识的指示修改为:所述数据锁为空闲状态。
上述方式下,若所述持有标识已获取到的累计次数大于或等于所述预设次数,可以根据是否存在特定的情况来采取不同措施,如果存在以下情况:获取到的所述持有标识指示所述数据锁为空闲状态,且该次获取所述持有标识后向所述目标数据库提交抢锁事务失败,说明数据锁还是有被释放的情况,只不过竞争太过激烈,导致提交抢锁事务失败,因此可以继续竞争,将所述累计次数更新为0,或者不存在上述情况时,说明数据锁一直未被释放,则提交解锁事务,强制解除所述数据锁对所述待调用数据的锁定;将所述持有标识的指示修改为:所述数据锁为空闲状态,从而使得数据锁恢复可被竞争的空闲状态。
可选地,所述向所述目标数据库提交抢锁事务之后,还包括:若所述抢锁事务提交失败,则等待第一预设时长后,重新执行所述获取所述数据锁的持有标识的步骤。
上述方式下,若所述抢锁事务提交失败,说明数据锁有空闲状态,但未竞争到数据锁,那么可以等待预设时长后,重新执行所述获取所述数据锁的持有标识的步骤,从而提供了一种等待预设时长竞争数据锁的方法。
可选地,所述确定所述抢锁事务提交成功之后,还包括:记录成功占用所述数据锁的应用实例和调度线程;若所述应用实例和所述调度线程占用所述数据锁的占用时长大于第二预设时长,则将所述持有标识的指示修改为:所述数据锁为空闲状态。
上述方式下,确定所述抢锁事务提交成功后,还可以记录成功占用所述数据锁的应用实例和调度线程,并在占用时长大于第二预设时长时将所述持有标识的指示修改为:所述数据锁为空闲状态,让其他应用实例也可以取竞争数据锁,从而避免所述应用实例和所述调度线程一直占用所述数据锁。
可选地,所述根据所述待调用数据,调度所述待调度任务之后,还包括:若确定所述待调度任务调度完毕,提交解锁事务;所述解锁事务用于将所述持有标识的指示修改为:所述数据锁为空闲状态。
上述方法下,待确定所述待调度任务调度完毕后,便提交解锁事务,由于所述解锁事务用于将所述持有标识的指示修改为:所述数据锁为空闲状态,从而在待调度任务调度完毕后,及时回收数据锁,使得数据锁可以继续被竞争使用。
第二方面,本发明提供一种任务调度装置,包括:获取模块,用于获取调度框架中的第一适配器;所述第一适配器与所述目标数据库适配;所述第一适配器被设置于替换所述调度框架中的第二适配器;所述第二适配器与关系型数据库适配;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;所述数据锁用于锁定所述待调用数据;所述待调用数据是待调度任务所需的数据;确定模块,用于通过所述第一适配器确定所述数据锁;通过所述第一适配器,获取所述数据锁的持有标识;所述持有标识用于指示所述数据锁为空闲状态或占用状态;若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务;所述抢锁事务用于抢占所述数据锁;调度模块,用于若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务;所述抢锁事务提交成功表示所述持有标识指示所述数据锁为占用状态。
可选地,所述目标数据库在所述调度框架中对应第一锁记录;所述关系型数据库在所述调度框架中对应第二锁记录;所述确定模块具体用于:通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁;通过所述第一适配器的互斥锁获取接口,从所述第一锁记录中获取所述持有标识;所述互斥锁获取接口中定义了所述目标数据库中所述数据锁的获取函数,所述获取函数中定义了所述数据锁的所述持有标识的机制。
可选地,所述确定模块具体用于:通过所述第一适配器确定所述待调度任务在所述调度框架中对应的调度器,以及从所述第二锁记录中确定所述待调用数据的第一锁;通过所述第一适配器,根据所述调度器的名称与所述第一锁的名称,确定出所述待调用数据在所述第一锁记录中的第二锁的名称;所述第二锁为所述待调用数据的数据锁。
可选地,所述确定模块具体用于:通过所述互斥锁获取接口创建所述抢锁事务;所述抢锁事务用于将所述第一锁记录中所述持有标识的指示修改为:所述数据锁为占用状态;通过所述互斥锁获取接口提交所述抢锁事务。
可选地,所述确定模块还用于:若所述持有标识指示所述数据锁为占用状态,或所述持有标识指示所述数据锁为空闲状态且所述抢锁事务提交失败,则确定截止本次获取到所述持有标识时所述持有标识已获取到的累计次数;若所述持有标识已获取到的累计次数小于预设次数,则按照预设周期执行所述获取所述数据锁的持有标识的步骤。
可选地,所述确定模块还用于:若所述持有标识已获取到的累计次数大于或等于所述预设次数,则确定所述累计次数的所述持有标识获取情况中是否存在以下情况:该次获取到的所述持有标识指示所述数据锁为空闲状态,且该次获取所述持有标识后向所述目标数据库提交抢锁事务失败;若存在,则将所述累计次数更新为0;若不存在,则提交解锁事务;所述解锁事务用于解除所述数据锁对所述待调用数据的锁定;将所述持有标识的指示修改为:所述数据锁为空闲状态。
可选地,所述确定模块还用于:若所述抢锁事务提交失败,则等待第一预设时长后,重新执行所述获取所述数据锁的持有标识的步骤。
可选地,所述确定模块还用于:记录成功占用所述数据锁的应用实例和调度线程;若所述应用实例和所述调度线程占用所述数据锁的占用时长大于第二预设时长,则将所述持有标识的指示修改为:所述数据锁为空闲状态。
可选地,所述确定模块还用于:若确定所述待调度任务调度完毕,提交解锁事务;所述解锁事务用于将所述持有标识的指示修改为:所述数据锁为空闲状态。
上述第二方面及第二方面各个可选方法的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。
第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
附图说明
图1为本申请实施例提供的一种任务调度方法的步骤流程示意图;
图2为本申请实施例提供的一种任务调度方法中抢占乐观锁的流程示意图;
图3为本申请实施例提供的一种任务调度装置的结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。
事务的原子性、一致性、持久性、隔离性(Atomicity,Consistency,Isolation+Durability,ACID)。
悲观锁:一种数据库保证事务隔离性和一致性的机制,表示一个线程在修改数据之前,必须先对该数据进行锁定,以防止其他线程在同一时刻对该数据进行修改。如果事先已经有其他线程对该数据进行了锁定,当前线程必须被阻塞等待,直到持有线程将锁释放后再被当前线程锁定成功,或者被阻塞至事务超时。
乐观锁:一种数据库保证事务隔离性和一致性的机制,表示一个线程在修改数据之前,无需先对该数据进行锁定,数据库只在事务提交时检测是否有冲突,如果有冲突则回滚事务并报错。
关系型数据库(Relational database):具有ACID的特性,但横向扩展性差,比如:Oracle,DB2,MySQL等。
非关系型数据库(Not Only SQL,NoSQL)不具有传统关系型数据库的ACID特性,但具有无限横向扩展的特性,比如:HBase,Hive,MongoDB等。
新型数据库(NewSQL),同时具有关系型数据库和非关系型数据库的特性,比如:VoltDB,ScaleDB,TiDB等。新型数据库具有传统关系型数据库的ACID特性和非关系型数据库的无限横向扩展特性,同时也可以兼容MySQL协议和语法,如TiDB。但不同的是:其锁类型为乐观锁,而关系型数据库锁类型都为悲观锁。
互斥锁:又称为排他锁,是一种应用系统中编制的互斥机制,表示一个线程在执行某个特定的操作之前、或者修改某一段特定的数据之前,必须先对一个唯一的、排他性的对象加锁,这个锁用来保证在任一时刻,只能由一个线程来执行某个特定的操作、或者修改某一段特定的数据。当且仅当拥有这个对象锁的线程,将锁释放之后,其他线程才被允许竞争地再次对该对象加锁。这种应用系统中的各个线程互斥的机制称为互斥锁,一般通过数据库的悲观锁机制来实现。
Quartz:一种著名的、被广泛使用的、基于Java语言的任务调度框架。
Redis:一种内存型数据库。
在金融机构(银行机构、保险机构或证券机构)在进行业务(如银行的贷款业务、存款业务等)运转过程中,互联网银行的任务处理系统,都面临着大量的任务、海量的数据需要处理。为了提升任务处理效率,抛开数据库不谈,其应用层的部署,都由多台硬件组成(物理机、或虚拟机、或容器),每台硬件上包含一到多个应用实例,这些应用实例都可能调度任务。对于任务的调度:一部分任务可能由外围系统提交请求而触发,也可能由任务处理系统自身定时触发,比如:各种交易流水处理任务、对账任务、日终任务等。
对于金融机构的任务,一般通过调度框架来进行任务调度。调度框架一个基本特性是:对于同一个任务,在任何一个触发时间窗口内,通过锁定该任务所用到的数据,有且只有一个应用实例可以执行该任务,从而可以防止相同任务在同一时间窗口内被重复执行而出错。
现有技术中,采用关系型数据库,由于横向扩展性差,又会导致任务调度的性能较差。如采用新型数据库,其乐观锁机制会造成任务调度的可靠性较差。因此目前的任务调度方法,不能同时满足高性能和高可靠性。这种情况不符合银行等金融机构的需求,无法保证金融机构各项业务的高效运转。
为此,如图1所示,本申请提供一种任务调度方法。
步骤101:获取调度框架中的第一适配器。
步骤102:通过所述第一适配器确定所述数据锁。
步骤103:通过所述第一适配器,获取所述数据锁的持有标识。
所述持有标识用于指示所述数据锁为空闲状态或占用状态。
步骤104:若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务。
所述抢锁事务用于抢占所述数据锁。
步骤105:若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务。
所述抢锁事务提交成功表示所述持有标识指示所述数据锁为占用状态。
步骤101~步骤105中的方法可以通过改造后的调度框架来实现,如添加了乐观锁的持有标识机制后的Quartz,但是原版Quartz并不能实现,因为原版的Quartz中适用的是关系型数据库的悲观锁机制。步骤101~步骤105中的目标数据库可以有多种选择,如新型数据库,具体地如TiDB。
需要说明的是,步骤101~步骤105中的所述第一适配器与所述目标数据库适配;所述第一适配器被设置于替换所述调度框架中的第二适配器,而所述第二适配器与关系型数据库适配;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;所述数据锁用于锁定所述待调用数据;所述待调用数据是待调度任务所需的数据。因此,可以通过所述第一适配器替换所述第二适配器,来实现与目标数据库的适配,并利用所述第一适配器,通过步骤101~步骤105增加持有标识来实现悲观锁的抢锁机制。
需要说明的是,所述第二适配器用于通过关系型数据库在所述调度框架中对应的第二锁记录获取数据锁,即所述第二适配器是所述调度框架中原有的适配器,第二适配器中实现的是通过关系型数据库在所述调度框架中对应的第二锁记录获取数据锁,而本申请实施例中,需要实现通过所述目标数据库在所述调度框架中对应的第一锁记录获取数据锁,因此需要创建能够实现上述功能的第一适配器,并用所述第一适配器把所述调度框架中的第二适配器替换掉。
一种可选实施方式中,可以通过在调度框架中添加所述目标数据库在所述调度框架中对应的第一锁记录来实现确定数据锁,以及获取数据锁的持有标识。步骤101具体可以按照以下方式执行:
通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁。
其中,所述目标数据库在所述调度框架中对应第一锁记录;所述关系型数据库在所述调度框架中对应第二锁记录。。
举例来说,第一锁记录实际上可以为一张互斥锁定义表,其结构可以如表1所示,表名可以记为QUARTZ_LOCKS_TIDB。
Figure BDA0002425280610000111
表1
第一锁记录可以预先置入互斥锁,举例来说,当调度框架为Quartz时,在该表中,预先定义两个互斥锁:
互斥锁一:
lock_name:scheduler-name.STATE_ACCESS;
host_ip:0;
thread_id:0;
update_datetime:0。
互斥锁二:
lock_name:scheduler-name.TRIGGER_ACCESS;
host_ip:0;
thread_id:0;
update_datetime:0。
从而互斥锁一和互斥锁二可以与Quartz中原有的两个互斥锁对应。创建第一锁记录的目的是替换Quartz中原本的QUARTZ_LOCKS表(第二锁记录),另外,可以将Quartz上下文中的调度器名字(scheduler-name)和两个互斥锁的名字(STATE_ACCESS与TRIGGER_ACCESS)置入其中备用。
对于第一适配器和第二适配器,举例来说,调度框架为Quartz时,Semaphore是Quartz内部的一个悲观锁获取与释放接口,该接口默认的实现类(第二适配器)为适用于关系型数据库的Semaphore实现类,比如:DBSemaphore,StdRowLockSemaphore,UpdateLockRowSemaphore,第二适配器包括Semaphore实现类中的一个或多个实现类。Semaphore包含了三个方法(函数):
(1)boolean obtainLock(Connection conn,String lockName),用于获取互斥锁;
(2)void releaseLock(String lockName),用于释放互斥锁;
(3)boolean requiresConnection(),表示是否需要上述obtainLock的数据库连接。
本发明在第二适配器的基础上,额外增加新的接口:PessimisticLockFetcher,以及对应的实现类(第一适配器):
TiDBLockFetcher与QuartzSemaphoreTiDBAdapter,第一适配器包括TiDBLockFetcher与QuartzSemaphoreTiDBAdapter中的一个或多个。
可以将第一适配器置入Quartz运行环境,替换掉第二适配器,如此来实现获取目标数据库的数据锁,以及连同持有标识机制,实现所述目标数据库的数据锁机制。举例来说,将QuartzSemaphoreTiDBAdapter适配器置入Quartz运行环境,替换其默认的StdRowLockSemaphore实现类,如此来达到在TiDB上运行Quartz的目的。
具体来说,替换方式可以为:在quartz.properties配置文件中加入以下两行,指示Quartz框架在运行时用本发明编写的第一适配器来替换其默认的第一适配器:
“org.quartz.jobStore.acquireTriggersWithinLock=true
org.quartz.jobStore.lockHandler.class=com.mycompany.QrtzSemaphoreTiD
BAdapter”。
由此可知,基于本发明,调度框架(如Quartz)在运行时,将忽略其内部默认的互斥锁获取方式,转而使用QuartzSemaphoreTiDBAdapter来获取互斥锁;而QuartzSemaphoreTiDBAdapter又忽略了Quartz默认的互斥锁定义表,转而使用QUARTZ_LOCKS_TIDB表,通过对QUARTZ_LOCKS_TIDB的操作,又实现了在TiDB乐观锁基础上的悲观锁行为,达到了多实例多线程下的互斥的目的,并且不介入Quartz中原本存在的事务。如此,达到了在TiDB上运行Quartz的目的。
下面结合具体的实现方法来说明TiDBLockFetcher实现类与QuartzSemaphoreTiDBAdapter实现类。
需要说明的是,步骤101中,更具体地,通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁的方式可以如下:
通过所述第一适配器确定所述待调度任务在所述调度框架中对应的调度器,以及从所述第二锁记录中确定所述待调用数据的第一锁;通过所述第一适配器,根据所述调度器的名称与所述第一锁的名称,确定出所述待调用数据在所述第一锁记录中的第二锁的名称。
所述第二锁为所述待调用数据的数据锁。
上述确定所述目标数据库中所述待调用数据的所述数据锁的方式可以通过QuartzSemaphoreTiDBAdapter实现类来实现,QuartzSemaphoreTiDBAdapter实现类从TiDBLockFetcher实现类扩展,并同时实现Semaphore接口里的方法,具体来说:
(1)实现数据锁的获取方法boolean obtainLock(Connection conn,StringlockName):
从Quartz上下文中,获取所述待调度任务在所述调度框架中对应的调度器,再与(所述第二锁记录中确定所述待调用数据的第一锁(lockName)拼接,将调度器的名称与所述第一锁的名称;用拼接后的名字来调用TiDBLockFetcher的obtain(String lockName)方法,从而从所述第一锁记录获取第二锁,从而获取数据锁(在调度框架中表现为互斥锁)。
(2)实现乐观锁的释放方法void releaseLock(String lockName):
从Quartz上下文中,获取所述待调度任务在所述调度框架中对应的调度器,再与(所述第二锁记录中确定所述待调用数据的第一锁(lockName)拼接,将调度器的名称与所述第一锁的名称;用拼接后的名字来调用TiDBLockFetcher的release(String lockName)方法,从而释放数据锁(在调度框架中表现为互斥锁)。
(3)实现数据库的连接方法boolean requiresConnection()
访问后台数据库通常使用MyBatis等框架,所以这里直接返回错误(false),即不使用Quartz传入的数据库连接。
在上述“通过在调度框架中添加所述目标数据库在所述调度框架中对应的第一锁记录来实现确定数据锁”的可选实施方式下,与步骤101的执行方式相应地,步骤102可以按照以下方式执行:
通过所述第一适配器的互斥锁获取接口,从所述第一锁记录中获取所述持有标识。
其中,所述互斥锁获取接口中定义了所述新型数据库中所述乐观锁的获取函数,所述获取函数中定义了所述乐观锁的所述持有标识的机制。因此可以通过所述第一适配器的互斥锁获取接口,为数据锁实现持有标记的机制,并从所述第一锁记录中获取所述数据锁的持有标识,从而通过第一锁记录来获取所述数据锁的持有标识
举例来说,所述互斥锁获取接口(可表示为boolean obtain(String lockName))可以通过第一适配器中的TiDBLockFetcher实现类来实现,互斥锁获取接口可以通过重试性的事务包装、设置持有标记的方式,将目标数据库(如TiDB)的乐观锁机制,转换为悲观锁的行为,从而达到了互斥锁的目的。具体来说,互斥锁获取接口可定义如下步骤:
(i)创建一个新的同步等待线程,目的是将新事务与原Quartz事务完全隔离。
(ii)在新线程里开启事务:start transaction。
(iii)执行命令:
select*from QUARTZ_LOCKS_TIDB where lock_name=’lockName’and host_ip=0for update;其中lockName为方法传入的参数;该命令将指示TiDB对QUARTZ_LOCKS_TIDB表中的’lockName’记录加上乐观锁。
如果获得的结果集不为空(持有标识指示乐观锁为空闲状态),则继续下一步。否则(持有标识指示乐观锁为占用状态),说明指定类型的锁正被其他调度线程持有,将事务回滚,可以等待一定时长后,再回到(ii)。
(iv)执行命令:update QUARTZ_LOCKS_TIDB set host_ip=‘当前实例ip’,thread_id=‘Quartz调度线程id’,update_datetime=‘当前日期时间’wherelock_name=‘lockName’and host_ip=0;该命令将实例ip和调度线程id,作为持有标记,设置于’lockName’记录之上。
如果返回结果为1,则继续下一步。否则,说明已经有其他线程抢先获取了锁,将事务回滚,等待一定的时间后,再回到(ii)
(v)提交事务:commit;如果事务提交成功,则说明成功获取到互斥锁。否则,说明与其他调度线程有事务冲突,获取互斥锁失败,等待一定的时间后,再回到(ii)。
因此,在步骤103中向新型数据库提交抢锁事务之后,一种可选实施方式可以如下:
若所述抢锁事务提交失败,则等待第一预设时长后,重新执行所述获取所述数据锁的持有标识的步骤。该实施方式可在TiDBLockFetcher实现类中定义。
相应地,还有互斥锁释放接口(可表示为void release(String lockName)),可定义如下步骤:
(i)同样创建一个新的同步等待线程。
(ii)开启事务:begin transaction;
(iii)执行命令:update QUARTZ_LOCKS_TIDB set host_ip=0,thread_id=0,update_datetime=‘当前日期时间’where lock_name=‘lockName’and host_ip=‘当前实例ip’and thread_id=‘Quartz调度线程ID’;该命令将清除当前线程在该锁上的持有标记。
(iv)提交事务:commit。
基于上述步骤102的执行方式,步骤103中向所述目标数据库提交抢锁事务的方式可以为:通过所述互斥锁获取接口创建所述抢锁事务;通过所述互斥锁获取接口提交所述抢锁事务。
所述抢锁事务用于将所述第一锁记录中所述持有标识的指示修改为:所述数据锁为占用状态。
在步骤102之后,所述持有标识指示所述乐观锁还可能为占用状态,基于此,一种可选实施方式如下:
若所述持有标识指示所述数据锁为占用状态,或所述持有标识指示所述数据锁为空闲状态且所述抢锁事务提交失败,则确定截止本次获取到所述持有标识时所述持有标识已获取到的累计次数;若所述持有标识已获取到的累计次数小于预设次数,则按照预设周期执行所述获取所述数据锁的持有标识的步骤(即步骤102)。
上述实施方式可以通过在TiDBLockFetcher实现类的boolean obtain(StringlockName)方法中加入获取次数(也可以是重试次数)以及预设周期(T)来实现,如果累计次数小于预设次数,可在计时器等于T时,返回执行TiDBLockFetcher实现类的booleanobtain(String lockName)方法中的步骤(ii)。
基于上述持有标识指示所述乐观锁为占用状态的方法,当一个Quartz调度线程获取到互斥锁之后,如果出现突然宕机等异常情况,该互斥锁将无法释放。针对这种情况,一种可能的实现方式可以如下:
若所述持有标识已获取到的累计次数大于或等于所述预设次数,则确定所述累计次数的所述持有标识获取情况中是否存在以下情况:该次获取到的所述持有标识指示所述数据锁为空闲状态,且该次获取所述持有标识后向所述目标数据库提交抢锁事务失败;若存在,则将所述累计次数更新为0;若不存在,则提交解锁事务;所述解锁事务用于解除所述数据锁对所述待调用数据的锁定;将所述持有标识的指示修改为:所述数据锁为空闲状态。
上述实施方式可以通过在TiDBLockFetcher实现类的boolean obtain(StringlockName)方法中加入获取次数(也可以是重试次数)以及预设周期(T)基础上来实现,举例来说,在TiDBLockFetcher实现类中的互斥锁获取接口中,每次执行(iii)步骤的返回结果都为空,说明指定的锁已经被某个实例占有且长时间未释放。此时,可异步地执行命令:update QUARTZ_LOCKS_TIDB set host_ip=0,thread_id=0where lock_name=‘lockName’,将被占用的互斥锁强制释放。
进一步地,还可以按照条件释放互斥锁。
异步地执行命令:update QUARTZ_LOCKS_TIDB set host_ip=0,thread_id=0where lock_name=‘lockName’and update_datetime<‘当前日期时间减去解锁时长’,将被持有的且占用时长超过解锁时长的互斥锁强制释放。如解锁时长为2分钟,减去2分钟的目的可以防止判断错误而强制解锁,因为每次拿锁、查询修改提交任务、放锁的时长,原则上不会超过2分钟。如果超过最大获取次数(或重试次数),即预设次数,且每次执行(iii)步骤的返回结果不全为空,则说明竞争激烈,此时无需强制解锁,只需等待调度线程的下一次触发。
上述记录“所述持有标识的已获取到的累计次数”可选实施的整个流程可以结合图2理解。图2中的最大重试次数即为预设次数,解锁时长以2分钟为例。开启抢锁事务后,便去查询指定名字且空闲的锁。如果结果为空,则直接回滚事务;如果结果为非空,便去抢数据锁,以将开启抢锁事务的应用实例的互联网协议(Internet protocol,IP)地址和调度线程的标识(identification,ID)置入其中,并提交抢锁事务。如果提交抢锁事务失败了,或者结果为空,则查看累计次数是否超过最大重试次数。若未超过就重新开启抢锁事务,若超过了就查看累计次数中每次获取到的结果是否均为空。若是,则异步解锁,可通过互斥锁释放接口来解除(2分钟前)的数据锁;否则,同步等待线程结束时并返回抢锁失败。
在步骤105中确定所述抢锁事务提交成功之后,一种可选实施方式如下:
记录占用所述数据锁的应用实例和调度线程的占用时长;若所述应用实例和所述调度线程占用所述数据锁的占用时长大于第二预设时长,则将所述持有标识的指示修改为:所述数据锁为空闲状态。该实施方式可在TiDBLockFetcher实现类中定义。
在步骤105执行后,一种可选实施方式如下:
若确定所述待调度任务调度完毕,提交解锁事务;所述解锁事务用于将所述持有标识的指示修改为:所述数据锁为空闲状态。该实施方式可在TiDBLockFetcher实现类中的互斥锁释放接口来实现。
如图3所示,本发明提供一种任务调度装置,包括:获取模块301,用于获取调度框架中的第一适配器;所述第一适配器与所述目标数据库适配;所述第一适配器被设置于替换所述调度框架中的第二适配器;所述第二适配器与关系型数据库适配;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;所述数据锁用于锁定所述待调用数据;所述待调用数据是待调度任务所需的数据;确定模块302,用于通过所述第一适配器确定所述数据锁;通过所述第一适配器,获取所述数据锁的持有标识;所述持有标识用于指示所述数据锁为空闲状态或占用状态;若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务;所述抢锁事务用于抢占所述数据锁;调度模块303,用于若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务;所述抢锁事务提交成功表示所述持有标识指示所述数据锁为占用状态。
可选地,所述目标数据库在所述调度框架中对应第一锁记录;所述关系型数据库在所述调度框架中对应第二锁记录;所述确定模块302具体用于:通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁;通过所述第一适配器的互斥锁获取接口,从所述第一锁记录中获取所述持有标识;所述互斥锁获取接口中定义了所述目标数据库中所述数据锁的获取函数,所述获取函数中定义了所述数据锁的所述持有标识的机制。
可选地,所述确定模块302具体用于:通过所述第一适配器确定所述待调度任务在所述调度框架中对应的调度器,以及从所述第二锁记录中确定所述待调用数据的第一锁;通过所述第一适配器,根据所述调度器的名称与所述第一锁的名称,确定出所述待调用数据在所述第一锁记录中的第二锁的名称;所述第二锁为所述待调用数据的数据锁。
可选地,所述确定模块302具体用于:通过所述互斥锁获取接口创建所述抢锁事务;所述抢锁事务用于将所述第一锁记录中所述持有标识的指示修改为:所述数据锁为占用状态;通过所述互斥锁获取接口提交所述抢锁事务。
可选地,所述确定模块302还用于:若所述持有标识指示所述数据锁为占用状态,或所述持有标识指示所述数据锁为空闲状态且所述抢锁事务提交失败,则确定截止本次获取到所述持有标识时所述持有标识已获取到的累计次数;若所述持有标识已获取到的累计次数小于预设次数,则按照预设周期执行所述获取所述数据锁的持有标识的步骤。
可选地,所述确定模块302还用于:若所述持有标识已获取到的累计次数大于或等于所述预设次数,则确定所述累计次数的所述持有标识获取情况中是否存在以下情况:该次获取到的所述持有标识指示所述数据锁为空闲状态,且该次获取所述持有标识后向所述目标数据库提交抢锁事务失败;若存在,则将所述累计次数更新为0;若不存在,则提交解锁事务;所述解锁事务用于解除所述数据锁对所述待调用数据的锁定;将所述持有标识的指示修改为:所述数据锁为空闲状态。
可选地,所述确定模块302还用于:若所述抢锁事务提交失败,则等待第一预设时长后,重新执行所述获取所述数据锁的持有标识的步骤。
可选地,所述确定模块302还用于:记录成功占用所述数据锁的应用实例和调度线程;若所述应用实例和所述调度线程占用所述数据锁的占用时长大于第二预设时长,则将所述持有标识的指示修改为:所述数据锁为空闲状态。
可选地,所述确定模块302还用于:若确定所述待调度任务调度完毕,提交解锁事务;所述解锁事务用于将所述持有标识的指示修改为:所述数据锁为空闲状态。
本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的一种任务调度方法及任一可选方法。
本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的一种任务调度方法及任一可选方法。
最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (12)

1.一种任务调度方法,其特征在于,包括:
获取调度框架中的第一适配器;所述第一适配器与所述目标数据库适配;所述第一适配器被设置于替换所述调度框架中的第二适配器;所述第二适配器与关系型数据库适配;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;所述数据锁用于锁定所述待调用数据;所述待调用数据是待调度任务所需的数据;
通过所述第一适配器确定所述数据锁;
通过所述第一适配器,获取所述数据锁的持有标识;所述持有标识用于指示所述数据锁为空闲状态或占用状态;
若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务;所述抢锁事务用于抢占所述数据锁;
若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务;所述抢锁事务提交成功表示所述持有标识指示所述数据锁为占用状态。
2.如权利要求1所述的方法,其特征在于,所述目标数据库在所述调度框架中对应第一锁记录;所述关系型数据库在所述调度框架中对应第二锁记录;所述通过所述第一适配器确定所述数据锁,包括:
通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁;
所述通过所述第一适配器,获取所述数据锁的持有标识,包括:
通过所述第一适配器的互斥锁获取接口,从所述第一锁记录中获取所述持有标识;所述互斥锁获取接口中定义了所述目标数据库中所述数据锁的获取函数,所述获取函数中定义了所述数据锁的所述持有标识的机制。
3.如权利要求2所述的方法,其特征在于,所述通过所述第一适配器,根据所述待调度任务、所述待调用数据和所述第二锁记录,从所述第一锁记录中确定出所述数据锁,包括:
通过所述第一适配器确定所述待调度任务在所述调度框架中对应的调度器,以及从所述第二锁记录中确定所述待调用数据的第一锁;
通过所述第一适配器,根据所述调度器的名称与所述第一锁的名称,确定出所述待调用数据在所述第一锁记录中的第二锁的名称;所述第二锁为所述待调用数据的数据锁。
4.如权利要求2所述的方法,其特征在于,所述向所述目标数据库提交抢锁事务,包括:
通过所述互斥锁获取接口创建所述抢锁事务;所述抢锁事务用于将所述第一锁记录中所述持有标识的指示修改为:所述数据锁为占用状态;
通过所述互斥锁获取接口提交所述抢锁事务。
5.如权利要求1至4任一项所述的方法,其特征在于,所述获取所述数据锁的持有标识之后,还包括:
若所述持有标识指示所述数据锁为占用状态,或所述持有标识指示所述数据锁为空闲状态且所述抢锁事务提交失败,则确定截止本次获取到所述持有标识时所述持有标识已获取到的累计次数;
若所述持有标识已获取到的累计次数小于预设次数,则按照预设周期执行所述获取所述数据锁的持有标识的步骤。
6.如权利要求5所述的方法,其特征在于,还包括:
若所述持有标识已获取到的累计次数大于或等于所述预设次数,则确定所述累计次数的所述持有标识获取情况中是否存在以下情况:该次获取到的所述持有标识指示所述数据锁为空闲状态,且该次获取所述持有标识后向所述目标数据库提交抢锁事务失败;
若存在,则将所述累计次数更新为0;
若不存在,则提交解锁事务;所述解锁事务用于解除所述数据锁对所述待调用数据的锁定;将所述持有标识的指示修改为:所述数据锁为空闲状态。
7.如权利要求1至4任一项所述的方法,其特征在于,所述向所述目标数据库提交抢锁事务之后,还包括:
若所述抢锁事务提交失败,则等待第一预设时长后,重新执行所述获取所述数据锁的持有标识的步骤。
8.如权利要求1至4任一项所述的方法,其特征在于,所述确定所述抢锁事务提交成功之后,还包括:
记录成功占用所述数据锁的应用实例和调度线程;
若所述应用实例和所述调度线程占用所述数据锁的占用时长大于第二预设时长,则将所述持有标识的指示修改为:所述数据锁为空闲状态。
9.如权利要求1至4任一项所述的方法,其特征在于,所述根据所述待调用数据,调度所述待调度任务之后,还包括:
若确定所述待调度任务调度完毕,提交解锁事务;所述解锁事务用于将所述持有标识的指示修改为:所述数据锁为空闲状态。
10.一种任务调度装置,其特征在于,包括:
获取模块,用于获取调度框架中的第一适配器;所述第一适配器与所述目标数据库适配;所述第一适配器被设置于替换所述调度框架中的第二适配器;所述第二适配器与关系型数据库适配;所述第一适配器和所述第二适配器均用于抢占所述目标数据库中待调用数据的数据锁;所述数据锁用于锁定所述待调用数据;所述待调用数据是待调度任务所需的数据;
确定模块,用于通过所述第一适配器确定所述数据锁;通过所述第一适配器,获取所述数据锁的持有标识;所述持有标识用于指示所述数据锁为空闲状态或占用状态;若确定所述持有标识指示所述数据锁为空闲状态,则向所述目标数据库提交抢锁事务;所述抢锁事务用于抢占所述数据锁;
调度模块,用于若确定所述抢锁事务提交成功,则根据所述待调用数据,调度所述待调度任务;所述抢锁事务提交成功表示所述持有标识指示所述数据锁为占用状态。
11.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至9中任一项所述的方法被执行。
12.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至9中任一项所述的方法被执行。
CN202010218602.XA 2020-03-25 2020-03-25 一种任务调度方法及装置 Pending CN111444002A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010218602.XA CN111444002A (zh) 2020-03-25 2020-03-25 一种任务调度方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010218602.XA CN111444002A (zh) 2020-03-25 2020-03-25 一种任务调度方法及装置

Publications (1)

Publication Number Publication Date
CN111444002A true CN111444002A (zh) 2020-07-24

Family

ID=71629613

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010218602.XA Pending CN111444002A (zh) 2020-03-25 2020-03-25 一种任务调度方法及装置

Country Status (1)

Country Link
CN (1) CN111444002A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111913810A (zh) * 2020-07-28 2020-11-10 北京百度网讯科技有限公司 多线程场景下的任务执行方法、装置、设备和存储介质
CN112035503A (zh) * 2020-09-17 2020-12-04 中国银行股份有限公司 交易数据更新方法及装置
CN112463828A (zh) * 2020-11-02 2021-03-09 马上消费金融股份有限公司 一种数据处理方法、装置、设备、系统及可读存储介质
CN117082307A (zh) * 2023-10-13 2023-11-17 天津幻彩科技有限公司 基于流畅度提升的三维场景流数据播放控制方法和设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150301871A1 (en) * 2014-04-16 2015-10-22 International Business Machines Corporation Busy lock and a passive lock for embedded load management
CN107229632A (zh) * 2016-03-24 2017-10-03 阿里巴巴集团控股有限公司 一种避免线程并发访问数据库的方法和装置
CN110162388A (zh) * 2019-04-26 2019-08-23 深圳智链物联科技有限公司 一种任务调度方法、系统及终端设备
CN110445864A (zh) * 2019-08-11 2019-11-12 西藏宁算科技集团有限公司 一种云计算环境下分布式锁的实现方法及系统
CN110704198A (zh) * 2018-07-10 2020-01-17 阿里巴巴集团控股有限公司 数据操作方法、装置、存储介质以及处理器

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150301871A1 (en) * 2014-04-16 2015-10-22 International Business Machines Corporation Busy lock and a passive lock for embedded load management
CN107229632A (zh) * 2016-03-24 2017-10-03 阿里巴巴集团控股有限公司 一种避免线程并发访问数据库的方法和装置
CN110704198A (zh) * 2018-07-10 2020-01-17 阿里巴巴集团控股有限公司 数据操作方法、装置、存储介质以及处理器
CN110162388A (zh) * 2019-04-26 2019-08-23 深圳智链物联科技有限公司 一种任务调度方法、系统及终端设备
CN110445864A (zh) * 2019-08-11 2019-11-12 西藏宁算科技集团有限公司 一种云计算环境下分布式锁的实现方法及系统

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111913810A (zh) * 2020-07-28 2020-11-10 北京百度网讯科技有限公司 多线程场景下的任务执行方法、装置、设备和存储介质
CN111913810B (zh) * 2020-07-28 2024-03-19 阿波罗智能技术(北京)有限公司 多线程场景下的任务执行方法、装置、设备和存储介质
CN112035503A (zh) * 2020-09-17 2020-12-04 中国银行股份有限公司 交易数据更新方法及装置
CN112035503B (zh) * 2020-09-17 2023-09-19 中国银行股份有限公司 交易数据更新方法及装置
CN112463828A (zh) * 2020-11-02 2021-03-09 马上消费金融股份有限公司 一种数据处理方法、装置、设备、系统及可读存储介质
CN117082307A (zh) * 2023-10-13 2023-11-17 天津幻彩科技有限公司 基于流畅度提升的三维场景流数据播放控制方法和设备
CN117082307B (zh) * 2023-10-13 2023-12-29 天津幻彩科技有限公司 基于流畅度提升的三维场景流数据播放控制方法和设备

Similar Documents

Publication Publication Date Title
CN111444002A (zh) 一种任务调度方法及装置
AU2016244128B2 (en) Processing database transactions in a distributed computing system
US8386720B2 (en) Method for allowing exclusive access to shared data
US10585874B2 (en) Locking concurrent commands in a database management system
CN104793988B (zh) 跨数据库分布式事务的实现方法和装置
US5274809A (en) Task execution control method for a multiprocessor system with enhanced post/wait procedure
US7584474B2 (en) Systems and methods for transaction chaining
Timnat et al. A practical wait-free simulation for lock-free data structures
WO2018077073A1 (zh) 分布式数据库系统、事务处理方法、锁服务器及存储介质
EP2550632B1 (en) System with multiple conditional commit databases
JP4283328B2 (ja) 部分的に順序付けられたトランザクションをスケジューリングしてイベントを関連付けるための方法
US20090183159A1 (en) Managing concurrent transactions using bloom filters
US20090133032A1 (en) Contention management for a hardware transactional memory
US8103838B2 (en) System and method for transactional locking using reader-lists
CN108108232B (zh) 用于确保与数据模型有关的并发事务的一致性的系统和方法
US20100325630A1 (en) Parallel nested transactions
CN103782574A (zh) 用于数据库事务的幂等性
WO2011009274A1 (zh) 并发控制方法及装置
US8336053B2 (en) Transaction management
US8132174B2 (en) Concurrency management in cluster computing of business applications
CN112241400A (zh) 一种基于数据库实现分布式锁的方法
CN101350022A (zh) 基于数据库逻辑锁的变更处理方法
US8893137B2 (en) Transaction-based shared memory protection for high availability environments
US5752026A (en) Early commit locking computer database protocol
WO2024098363A1 (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