CN111737021A - 并行任务的处理方法、装置、电子设备及存储介质 - Google Patents
并行任务的处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN111737021A CN111737021A CN202010790764.0A CN202010790764A CN111737021A CN 111737021 A CN111737021 A CN 111737021A CN 202010790764 A CN202010790764 A CN 202010790764A CN 111737021 A CN111737021 A CN 111737021A
- Authority
- CN
- China
- Prior art keywords
- operation object
- locking
- conflict
- parallel
- frequency
- 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
Links
Images
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
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
技术领域
本发明涉及互联网技术领域,尤其涉及一种并行任务的处理方法、装置、电子设备及计算机可读存储介质。
背景技术
在工作流系统中,往往需要频繁调用本地或第三方系统中的资源来完成特定的任务,这些资源称为操作对象(简称为对象)。当多个调用方并发地发起操作请求以对操作对象执行各自的任务时,可能会存在并发的操作请求需要操作同一个对象的情况,这样会导致对象在某一时刻的状态不确定。
相关技术通常是固定地采用一种加锁处理方式,例如,在任务并发的调用前把操作对象进行加锁,对象被加锁后,可以保证其原子性,从而保证在任务执行过程中不被其他调用方的任务打断。
然而,无论是采用哪一种加锁处理方式,都是为了保证同一个对象在同一时间只能被一个任务修改其状态。对于任务量非常大的工作流系统来说,整体的执行效率会受到一定的影响。
发明内容
本发明实施例提供一种并行任务的处理方法、装置、电子设备及计算机可读存储介质,能够提升并行任务的处理效率。
本发明实施例的技术方案是这样实现的:
本发明实施例提供一种并行任务的处理方法,包括:
获取操作对象的冲突频率;
根据所述冲突频率确定对应的加锁处理方式,并将所述操作对象设置为所述对应的加锁处理方式;
接收针对所述操作对象的多个并行的操作请求,其中,每个所述操作请求用于请求操作所述操作对象以完成一个特定的任务;
根据所述操作对象对应的加锁处理方式,响应所述多个并行的操作请求。
本发明实施例提供一种并行任务的处理装置,包括:
获取模块,用于获取操作对象的冲突频率;
确定模块,用于根据所述冲突频率确定对应的加锁处理方式,并将所述操作对象设置为所述对应的加锁处理方式;
接收模块,用于接收针对所述操作对象的多个并行的操作请求,其中,每个所述操作请求用于请求操作所述操作对象以完成一个特定的任务;
响应模块,用于根据所述操作对象对应的加锁处理方式,响应所述多个并行的操作请求。
上述方案中,所述获取模块,还用于将所述操作对象对应的加锁处理方式设置为第一锁定方式,其中,所述第一锁定方式默认不对所述操作对象加锁;在所述操作对象对应的加锁处理方式被设置为所述第一锁定方式的期间,获取同时接收到针对所述操作对象的多个并行的操作请求的次数,并获取接收到针对所述操作对象的操作请求的总次数;所述确定模块,还用于将所述次数与所述总次数之间的比值,确定为所述操作对象的冲突频率。
上述方案中,所述确定模块,还用于当所述冲突频率小于冲突频率阈值时,确定所述操作对象对应的加锁处理方式为第一锁定方式;当所述冲突频率大于或等于所述冲突频率阈值时,确定所述操作对象对应的加锁处理方式为第二锁定方式;其中,所述第一锁定方式默认不对所述操作对象加锁,所述第二锁定方式默认对所述操作对象加锁。
上述方案中,所述装置还包括更新模块,用于基于机器学习模型提取所述操作对象的历史冲突频率数据的隐层特征,并基于所述隐层特征进行映射处理,以确定所述操作对象的冲突频率;根据所述确定的冲突频率更新所述冲突频率阈值。
上述方案中,所述确定模块,还用于当多次获取的所述冲突频率基于所述冲突频率阈值出现波动时,根据所述冲突频率阈值确定第一冲突频率阈值和第二冲突频率阈值;其中,所述第一冲突频率阈值大于所述冲突频率阈值,所述第二冲突频率阈值小于所述冲突频率阈值;当所述冲突频率大于所述第一冲突频率阈值时,将所述操作对象对应的加锁处理方式设置为所述第二锁定方式;当所述冲突频率小于所述第二冲突频率阈值时,将所述操作对象对应的加锁处理方式设置为所述第一锁定方式。
上述方案中,当所述操作对象对应的加锁处理方式为第二锁定方式时,所述响应模块,还用于当接收到所述多个并行的操作请求中的任一操作请求时,将所述操作对象的状态记录为已占用;在完成所述任一操作请求针对所述操作对象所需要执行的操作后,将所述操作对象的状态记录为空闲,以继续响应所述多个并行的操作请求中未被响应的其他操作请求;其中,所述第二锁定方式默认对所述操作对象加锁。
上述方案中,当所述操作对象对应的加锁处理方式为第一锁定方式时,所述响应模块,还用于针对所述多个并行的操作请求中的任一操作请求执行以下操作:接收所述任一操作请求的调用方发送的所述操作对象的初始状态值、以及待提交操作对象;其中,所述初始状态值为针对所述操作对象执行所述任一操作请求前所述操作对象的状态,所述待提交操作对象是针对所述操作对象执行所述任一操作请求需要执行的任务后得到;将所述操作对象的初始状态值与所述操作对象的实时状态值进行比对;根据比对结果处理所述待提交操作对象;其中,所述第一锁定方式默认不对所述操作对象加锁。
上述方案中,所述更新模块,还用于当所述比对结果表征所述操作对象的初始状态值与所述操作对象最新的状态值一致时,基于所述待提交操作对象更新所述操作对象;以及用于当所述比对结果表征所述操作对象的初始状态值与所述操作对象最新的状态值不一致时,丢弃所述待提交操作对象,并向所述任一操作请求对应的调用方返回操作失败的提醒消息。
上述方案中,所述确定模块,还用于当探测到所述操作对象不具备原子性,或未获取到所述操作对象被配置的原子性时,确定执行获取所述操作对象的冲突频率的处理。
上述方案中,所述确定模块,还用于当探测到所述操作对象具备原子性,且接收到针对所述操作对象的多个并行的操作请求时,基于所述操作对象同步响应所述多个并行的操作请求。
上述方案中,所述获取模块,还用于获取所述操作对象实时的冲突频率;所述确定模块,还用于根据所述实时的冲突频率调整所述操作对象对应的加锁处理方式。
上述方案中,所述确定模块,还用于当所述实时的冲突频率小于冲突频率阈值时,将所述操作对象对应的加锁处理方式调整为第一锁定方式;当所述实时的冲突频率大于或等于所述冲突频率阈值时,将所述操作对象对应的加锁处理方式调整为第二锁定方式;其中,所述第一锁定方式默认不对所述操作对象加锁,所述第二锁定方式默认对所述操作对象加锁。
本发明实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的并行任务的处理方法。
本发明实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本发明实施例提供的并行任务的处理方法。
本发明实施例具有以下有益效果:
通过对操作对象的冲突频率进行分析,为操作对象自动设置合适的加锁处理方式,并根据所设置的加锁处理方式来响应多个并行的操作请求,由于操作对象的加锁处理方式是根据操作对象的冲突频率设置的,从而能够在冲突时优化操作请求的响应效率。
附图说明
图1是本发明实施例提供的工作流系统的架构示意图;
图2是本发明实施例提供的服务器的结构示意图;
图3A是本发明实施例提供的并行任务的处理方法的流程示意图;
图3B是本发明实施例提供的并行任务的处理方法的流程示意图;
图3C是本发明实施例提供的并行任务的处理方法的流程示意图;
图4是本发明实施例提供的并行任务的处理方法的应用示意图;
图5是相关技术提供的针对多个并行任务执行串行调度的示意图;
图6是相关技术提供的针对多个并行任务执行并行调度的示意图;
图7是本发明实施例提供的运营流程系统执行过程的示意图;
图8是本发明实施例提供的任务中心的示意图;
图9是本发明实施例提供的基于乐观锁机制响应多个并行任务的示意图;
图10是本发明实施例提供的基于同步锁机制响应多个并行任务的示意图;
图11是本发明实施例提供的在不同时间段内任务中心调用的对象示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解, “一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
1)操作对象,即调用方的操作请求需要在工作流系统本地或第三方系统的资源,例如需要在数据库中操作(包括增、删、查、改等任务)的数据,下文中也简称为对象。
2)第一锁定方式,是一种加锁处理方式(也称为加锁处理机制),对操作对象被调用方的修改持保守态度,即默认总是对操作对象加锁。例如,在操作对象被调用方通过操作请求进行操作时,总是将操作对象设置为锁定状态,避免被其他调用方操作。第一锁定方式可以是悲观锁机制(下文中简称为悲观锁),使用的锁的类型包括共享锁和排他锁。
3)第二锁定方式,是一种加锁处理方式(也称为加锁处理机制),对操作对象被调用方的修改持乐观态度,即默认总是不对操作对象加锁,只在调用方提交更新的操作对象时,才会进行冲突检测和冲突处理。第二锁定方式可以是乐观锁机制(下文中简称为乐观锁)。
4)原子性(Atomicity), 表示操作请求是一个不可分割的原子单元,只有操作请求针对数据库中的操作对象所需要执行的任务(包括多个事务)全部执行成功时,所形成的新的操作对象才会被提交到数据库进行更新。操作请求所需要执行的任一个事务失败,已经执行的事务都必须被撤销(也称为回滚),让数据库中的操作对象返回执行操作请求之前的状态。
在本发明实施例中发现,在工作流系统中,往往需要频繁地调用工作流系统本地或第三方系统中的资源来完成特定的任务。然而,当多个调用方向任务中心发起并发的操作请求以执行任务时,例如两个调用方同时向任务中心发起了操作请求,可能会同时操作一个对象,这样会令对象在某一个时刻的状态不确定。
针对上述技术问题,相关技术提供的技术方案是在任务并发的调用前把操作的对象加锁。被执行的对象加锁后,可以保证其原子性,任务执行过程中不会被其他任务打断。加锁的方式一般有两种,包括同步锁(也称悲伤锁)和乐观锁。其中,同步锁是指调用方在发起对象操作前,先申请一个锁,在获得锁后,操作对象只能被获得锁的调用方操作,其他调用方只能等待锁释放后才能获得操作权限。而乐观锁是指系统默认操作对象没有同时被操作的情况,调用方不加锁,直接进行操作。当任务中心发现操作的时候有多个调用方冲突时,再进行回滚。
示例的,参见图5,图5是相关技术提供的针对多个并行任务执行串行调度的示意图。如图5所示,串行调度的执行方式在一段时间内,只能响应一个调用方的请求,发起一次任务调度。在等待任务完成后,才能响应另一个调用方的请求。例如,对象1在时刻t1之前只能被调用方1调用,在调用方1完成对对象1的操作后,调用方2才能调用对象1执行相应的操作,因此,图5中4个任务的总共耗时为:t1+t2+t3+t4,工作流系统整体的执行效率较低。
示例的,参见图6,图6是相关技术提供的针对多个并行任务执行并行调度的示意图。如图6所示,相较于图5的串行调度方式,图6的任务调度方式增加了并行执行的能力。当操作的对象不是同一个时,可以同时发起。如果被操作的对象是非原子性的,在任务开始之初,需要向任务中心申请获取操作权限,没有获取操作权限前,即需要把操作对象进行加锁。确认操作对象加锁成功后,才能开始进行操作。例如调用方1获取了操作权限后,对象1被加锁,当调用方1的任务完成后,对象1的锁才被释放,然后调用方2才能开始操作对象1。如图6所示,4个任务的总共耗时为:t1+t2。
然而,无论是图5还是图6所示的任务调度方式,都存在比较大的局限性,主要体现在执行效率比较低下。对于小任务量的流程系统可能影响不大,但在任务量庞大的工作流系统中,会有很多调用方同时对一个第三方系统的对象发起操作,例如配置中心里的某个配置属性。当这个属性本身不具备原子性,且多个调用方同时对对象操作时,其状态就不确定了。这样会跟调用方的逻辑造成混乱,工作流系统也无法准确根据配置的数据来正常运行。
示例的,对于并行调度来说,在并行任务中上锁是保持操作对象原子性的一种方式,但每次调用前都需要进行上锁,没有得到锁的调用方都需要循环等待,整个工作流系统的执行效率较低,主要表现在:
1、并行调度的方式下多个调用方的加锁、释放锁会导致比较多的上下文切换和调度延时,对工作流系统性能的影响较大。
2、一个调用方持有锁后,会导致其他所有需要此锁的调用方挂起。
3、如果一个优先级高的调用方等待另一个优先级低的调用方释放锁,会导致优先级倒置,引起逻辑风险,这种情况是无法实现任务优先级管理的。
也就是说,相关技术提供的方案中以上两种任务调度方式只会单独存在,非并行调度即串行调度,或者非串行调度即并行调度。
然而,在本发明实施例中发现,无论是单独采用上述哪一种加锁处理方式,都是为了保证一个对象在同一时间只能被一个操作请求的任务修改其状态。对于任务量非常大的工作流系统,整体的执行效率都会受到一定的影响。
鉴于此,本发明实施例提供一种并行任务的处理方法、装置、电子设备和计算机可读存储介质,能够提升并行任务的执行效率。
下面针对本发明实施例提供的并行任务的处理方法进行说明。参见图1,图1是本发明实施例提供的工作流系统100的架构示意图,其中,终端400通过网络300连接上游系统200,上游系统200与工作流系统100连接(工作流系统100包括工作流服务器110和任务中心服务器120),工作流系统100与数据库500连接,网络300可以是广域网或者局域网,又或者是二者的组合。
示例的,工作流系统100可以是任意生产环境的运行系统,例如社交网络应用系统、支付应用的后台系统和电商平台的后台系统等。
如图1所示,上游系统200可以对终端提供接入,并对终端的业务请求根据负载均衡原理进行分流,例如通过网络300接收终端400发送的业务请求,运行用于响应业务请求的工作流。
工作流系统100中的工作流服务器110在接收到经过上游系统200处理的业务请求后,分配处理器线程以运行用于响应业务请求的工作流,工作流包括多个节点,每个节点通过发起操作请求来对特定的对象执行任务。
任务中心服务器100负责对不同工作流中节点的操作请求进行调度。例如,当不同工作流中的多个节点需要调用同一个操作对象(例如操作对象A)进行操作时,任务中心服务器120从数据库500中获取操作对象A的冲突频率,并根据冲突频率为操作对象A配置对应的加锁处理方式,并根据加锁处理方式响应多个节点针对操作对象A的调用请求,即任务中心服务器120根据操作对象A对应的加锁处理方式来调度多个节点发送的针对操作对象A的操作请求。
其中,图1所示的数据库500可以是工作流系统100本地的资源,也可以是第三方系统(即独立于工作流系统100的系统)中的资源,或者是以上两者的组合。
需要说明的是,上述的工作流服务器110和任务中心服务器120可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、以及大数据和人工智能平台等基础云计算服务的云服务器,本发明在此不做限制。
示例的,本发明实施例提供的并行任务的处理方法可以结合人工智能(AI,Artificial Intelligence)云服务技术实现。
人工智能云服务(AIaaS,AI as a Service)是目前主流的一种人工智能平台的服务方式,具体来说AIaaS平台会把几类常见的AI服务进行拆分,并在云端提供独立或者打包的服务。这种服务模式类似于开了一个AI主题商城,所有的开发者都可以通过应用程序编程接口(API,Application Programming Interface)的方式来接入使用平台提供的一种或者是多种人工智能服务,部分资深的开发者还可以使用平台提供的AI框架和AI基础设施来部署和运维自己专属的云人工智能服务。
举例来说,图1中的工作流系统100、上游系统200和数据库500可以部署为人工智能云服务,当人工智能云服务接收到客户端400发送的业务请求时,对业务请求进行预处理,并分配处理器线程以运行用于响应经过处理后的业务请求的工作流,工作流中包括多个节点,每个节点通过发起操作请求来对特定的对象执行任务。当不同工作流中的多个节点需要调用同一个操作对象(例如操作对象A)时,人工智能云服务获取操作对象A的冲突频率,根据冲突频率确定对应的加锁处理方式,并对操作对象A设置对应的加锁处理方式。随后,人工智能云服务可以根据操作对象A对应的加锁处理方式来响应多个节点同时针对操作对象A的请求。
参见图2,图2是本发明实施例提供的任务中心服务器120的结构示意图,图2所示的任务中心服务器120包括:至少一个处理器210、存储器240、至少一个网络接口220。任务中心服务器120中的各个组件通过总线系统230耦合在一起。可理解,总线系统230用于实现这些组件之间的连接通信。总线系统230除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统230。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
存储器240可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器240可选地包括在物理位置上远离处理器210的一个或多个存储设备。
存储器240包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本发明实施例描述的存储器240旨在包括任意适合类型的存储器。
在一些实施例中,存储器240能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统241,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块242,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
在一些实施例中,本发明实施例提供的并行任务的处理装置可以采用软件方式实现,图2示出了存储在存储器240中的并行任务的处理装置243,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块2431、确定模块2432、接收模块2433和响应模块2434,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本发明实施例提供的并行任务的处理装置可以采用硬件方式实现,作为示例,本发明实施例提供的并行任务的处理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的并行任务的处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application SpecificIntegrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
下面将结合附图具体说明本发明实施例提供的并行任务的处理方法。
参见图3A,图3A是本发明实施例提供的并行任务的处理方法的流程示意图,将结合图3A示出的步骤进行说明,可以理解的,下文所述的并行任务的处理方法可以由服务器执行,例如上文所述的任务中心服务器。.
在步骤S101中,获取操作对象的冲突频率。
这里,操作对象包括本地的资源和第三方系统的资源。例如,当工作流系统为虚拟资源包发放系统时,操作对象可以是存储在数据库中的虚拟资源包;当工作流系统为电商系统时,操作对象可以是存储在数据库中的各个商品的库存数量;当工作流系统为支付系统时,操作对象可以是账户余额;当工作流系统为社交网络系统时,操作对象可以是用户发表的文章,关注的用户数量等。
在一些实施例中,图3A示出的步骤S101可以通过图3B示出的步骤S1011至步骤S1013实现,将结合图3B示出的步骤进行说明。
在步骤S1011中,将操作对象对应的加锁处理方式设置为第一锁定方式,其中,第一锁定方式默认不对操作对象加锁;在步骤S1012中,在操作对象对应的加锁处理方式被设置为第一锁定方式的期间,获取同时接收到针对操作对象的多个并行的操作请求的次数,并获取接收到针对操作对象的操作请求的总次数;在步骤S1013中,将次数与总次数之间的比值,确定为操作对象的冲突频率。
示例的,以操作对象为虚拟资源包A为例,首先将虚拟资源包A的加锁处理方式设置为第一锁定方式,例如将虚拟资源包A的加锁处理方式设置为乐观锁,接着,在虚拟资源包A的加锁处理方式被设置为乐观锁的期间,获取同时接收到针对虚拟资源包A的多个并行的操作请求的次数,例如获取到同时接收到多个并行的操作请求的次数为5次;并获取在期间接收到的针对虚拟资源包A的操作请求的总次数,例如获取到针对虚拟资源包A的操作请求的总次数为100次,接着,计算同时接收到多个并行的操作请求的次数和接收到的操作请求的总次数的比值,将比值作为虚拟资源包A的冲突频率,从而计算得到虚拟资源包A在锁定方式为乐观锁的期间的冲突频率为5%。
需要说明的是,本发明实施例中操作对象的冲突频率并不是固定不变的,而是随着时间的推移而变化的,在不同的时间段中,操作对象的冲突频率可能是不同的。
在一些实施例中,还可以获取操作对象实时的冲突频率,并对所获取的实时的冲突频率进行分析,以对操作对象对应的加锁处理方式进行调整。
示例的,以操作对象为虚拟资源包A为例,假设在时间段1获取到虚拟资源包A的冲突频率为F1,且冲突频率F1小于冲突频率阈值T,则将虚拟资源包A的加锁处理方式设置为乐观锁。随后,在时间段2获取到虚拟资源包A的冲突频率为F2,且冲突频率F2大于冲突频率阈值T,则将虚拟资源包A的加锁处理方式从乐观锁调整为同步锁。
在另一些实施例中,在执行步骤S101之前,还可以首先执行以下步骤:探测操作对象的原子性,当探测到操作对象不具备原子性,或者未获取到操作对象被配置的原子性时,确定执行步骤S101获取操作对象的冲突频率的处理;当探测到操作对象具备原子性时,则无需对操作对象加锁,后续在接收到针对操作对象的多个并行的操作请求时,直接基于操作对象同步响应多个并行的操作请求。
本发明实施例通过获取操作对象的冲突频率,并对操作对象的冲突频率进行分析,为不同的操作对象设置不同的加锁处理方式,如此,可以大大提升并行任务的执行效率。
在步骤S102中,根据冲突频率确定对应的加锁处理方式,并将操作对象设置为对应的加锁处理方式。
在一些实施例中,图3A所示的步骤S102可以通过图3C所示的步骤S201至步骤S203实现,将结合图3C示出的步骤进行说明。
在步骤S201中,判断操作对象的冲突频率是否大于或者等于冲突频率阈值;当冲突频率小于冲突频率阈值时,执行步骤S202;当冲突频率大于或者等于冲突频率阈值时,执行步骤S203。
在一些实施例中,在获取到操作对象的冲突频率后,可以针对操作对象设置一个对应的冲突频率阈值,例如,冲突频率阈值可以是由运营管理用户自行设定,接着,比较所获取的操作对象的冲突频率与设定的冲突频率阈值之间的大小,进而可以基于比较结果确定出操作对象对应的加锁处理方式。
需要说明的是,本发明实施例中冲突频率阈值并不是固定不变的,而是可以根据操作对象的冲突频率进行调整的,即针对同一个操作对象,在不同时间段对应的冲突频率阈值可以是不同的。此外,不同操作对象对应的冲突频率阈值也是不同的,例如,可以根据每个操作对象各自的冲突频率设置不同的冲突频率阈值。
在一些实施例中,可以基于机器学习模型提取操作对象的历史冲突频率数据的隐层特征,并基于所提取的隐层特征进行映射处理,以确定出操作对象的冲突频率,进而根据所确定出的冲突频率更新冲突频率阈值。下面对机器学习模型的训练过程进行说明。
示例的,针对某个操作对象,获取操作对象的历史操作请求中的冲突记录,每条冲突的记录形式如下:发生冲突的操作请求类型、以及接收到的各个冲突的操作请的时间等,并将这些数据作为样本数据进行机器学习模型的训练。机器学习模型的标签可以设置为冲突频率,具体的模型类型可以采用神经网络模型,也可以采用深度神经网络模型等。
作为示例,机器学习模型可以包括:卷积层(用于特征提取)、全连接层(用于将特征连接成一个向量)和池化层(用于平均池化或者最大池化);损失函数可以是预测冲突频率阈值和实际冲突频率阈值之间的误差为因子构建的各种形式的函数,包括:均方误差损失函数(MSE,Mean Squared Error)、合页损失函数(HLF,Hinge Loss Function)和交叉熵损失函数(CrossEntropy)等。从而,可以利用训练后的机器学习模型确定出操作对象的冲突频率,并根据确定出的冲突频率对冲突频率阈值进行更新。
在步骤S202中,将操作对象的加锁处理方式设置为第一锁定方式,其中,第一锁定方式默认不对操作对象加锁。
在一些实施例中,当确定出操作对象的冲突频率小于冲突频率阈值时,说明针对操作对象的竞争不是很激烈,即同时接收到多个并行的操作请求的几率较小,因此不需要对操作对象加锁,此时,可以将操作对象的加锁处理方式设置为第一锁定方式,例如,可以将操作对象的加锁处理方式设置为乐观锁,以基于乐观锁来响应后续不同调用方发送的操作请求。
在步骤S203中,将操作对象的加锁处理方式设置为第二锁定方式,其中,第二锁定方式默认对操作对象加锁。
在一些实施例中,当确定出操作对象的冲突频率大于或者等于冲突频率阈值时,说明针对操作对象的竞争比较激烈,即同时接收到多个并行的操作请求的几率较大,因此需要对操作对象加锁,此时,可以将操作对象的加锁处理方式设置为第二锁定方式,例如,可以将操作对象的加锁处理方式设置为同步锁,以基于同步锁来响应后续不同调用方发送的操作请求。
在另一些实施例中,可能还存在以下情况,多次获取的冲突频率阈值在设定的冲突频率阈值附近出现波动,例如在时间段1获取到操作对象的冲突频率大于冲突频率阈值,在时间段2获取到操作对象的冲突频率小于冲突频率阈值,在时间段3获取到操作对象的冲突频率又大于冲突频率阈值,此时,会导致操作对象对应的加锁处理方式在第一锁定方式和第二锁定方式之间反复切换,造成系统资源的大量浪费。因此,为了避免上述情况的发生,可以针对冲突频率阈值执行以下处理:根据冲突频率阈值确定第一冲突频率阈值和第二冲突频率阈值,其中,第一冲突频率阈值大于冲突频率阈值,第二冲突频率阈值小于冲突频率阈值。例如,当冲突频率阈值为T是,第一冲突频率阈值可以设置为T+T*5%;第二冲突频率阈值可以设置为T-T*5%,当冲突频率大于第一冲突频率阈值时,才将操作对象对应的加锁处理方式设置为第二锁定方式;当冲突频率小于第二冲突频率阈值时,才将操作对象的加锁处理方式设置为第一锁定方式,如此,可以避免由于冲突频率在冲突频率阈值附近波动时造成操作对象的加锁处理方式反复切换,节约了系统资源。
本发明实施例通过对操作对象的冲突频率进行分析,针对不同的情况设置了对应的加锁处理方式,例如,当冲突频率大于或等于冲突频率阈值时,将操作对象的加锁处理方式设置为默认加锁的加锁处理方式;当冲突频率小于冲突频率阈值时,将操作对象的加锁处理方式设置为默认不加锁的加锁处理方式,即根据操作对象的实际情况,为操作对象设置对应的加锁处理方式,大大提升了工作流系统整体的执行效率。
在步骤S103中,接收针对操作对象的多个并行的操作请求,其中,每个操作请求用于请求操作操作对象以完成一个特定的任务。
这里,在工作流系统中,在同一时间,可能会接收到多个调用方发送的针对同一操作对应的操作请求。
示例的,以工作流系统为虚拟资源包抽取系统为例,在同一时间,可能会接收到多个客户端发送的针对同一虚拟资源包的领取请求。例如,在上午10:00,同时接收到客户端A、客户端B和客户端C发送的针对虚拟资源包A的领取请求。
在步骤S104中,根据操作对象对应的加锁处理方式,响应多个并行的操作请求。
在一些实施例中,当操作对象对应的加锁处理方式为第一锁定方式时,根据操作对象对应的加锁处理方式,响应多个并行的操作请求可以通过以下方式实现:针对多个并行的操作请求中的任一操作请求执行以下操作:接收任一操作请求的调用方发送的操作对象的初始状态值、以及待提交操作对象,将操作对象的初始状态值和操作对象实时状态值进行比对;其中,待提交对象是针对操作对象执行任一操作请求需要执行的操作后得到,初始状态值为针对操作对象执行任一操作请求前所记录的操作对象的状态;根据比对结果处理待提交对象。
示例的,以操作对象为虚拟资源包A为例,假设接收到客户端A、客户端B和客户端C分别发送的针对虚拟资源包A的领取请求。以客户端C为例,当接收到客户端C发送的待提交虚拟资源包A(待提交虚拟资源包A是客户端C针对虚拟资源包A进行领取操作后形成的)时,首先将在执行客户端C的领取请求时发送给客户端C的虚拟资源包A的初始状态值,例如虚拟资源包A的初始版本标识,与虚拟资源包A实时状态值(例如虚拟资源包A实时的版本标识)进行比对。当比对结果表征两者一致时,说明在执行客户端C发送的领取请求期间,虚拟资源包A的状态没有发生变化,则根据客户端C发送的待提交虚拟资源包A对虚拟资源包A进行更新。当比对结果表征两者不一致时,说明在执行客户端C发送的领取请求期间,虚拟资源包A的状态已经发生变化,例如假设客户端C接收到的虚拟资源包A的初始版本标识为1,在执行客户端C发送的领取请求期间,首先完成了客户端B发送的领取请求,将虚拟资源包A的版本标识加1,此时,虚拟资源包A的实时版本标识为2,,也就是说在执行客户端C发送的领取请求期间,虚拟资源包A的状态发生了变化,则丢弃客户端C发送的待提交虚拟资源包A,并向客户端C发送领取失败的提醒消息,以使客户端C重新向服务器发送领取请求。
在另一些实施例中,当操作对象对应的加锁处理方式为第二锁定方式时,根据操作对象对应的加锁处理方式,响应多个并行的操作请求可以通过以下方式实现:当接收到多个并行的操作请求中的任一操作请求时,将操作对象的状态记录为已占用;在完成任一操作请求针对操作对象所需要执行的操作后,将操作对象的状态记录为空闲,以继续响应多个并行的操作请求中未被响应的其他操作请求。
示例的,仍以操作对象为虚拟资源包A为例,假设接收到客户端A、客户端B和客户端C分别发送的针对虚拟资源包A的领取请求。当接收到客户端A发送的领取请求时,将虚拟资源包A的状态记录为已占用,并暂停响应客户端B和客户端C发送的领取请求,即在同一时刻只会处理对一个调用方发送的请求,其他的调用方请求都会暂停。随后,当执行完客户端A发送的领取请求后,才将虚拟资源包A的状态置为空闲,以继续响应客户端B或者客户端C发送的领取请求。
本发明实施例针对大规模海量的任务调度场景,提出了一种基于操作对象的冲突频率动态调整操作对象的加锁处理方式的方案,通过对操作对象的历史冲突频率数据进行分析,综合操作对象的被调用情况,对加锁策略进行了动态调整和细化,大大提升了工作流系统执行的整体效率,同时也简化了调用方的请求方式,降低了复杂度。
在一些实施例中,本发明实施例提供的并行任务的处理方法也可以结合区块链技术实现。
区块链是指由区块形成的加密的、链式的交易的存储结构。它是一个共享数据库,存储于其中的数据或者信息,具有不可伪造、可以追溯、集体维护的特点。
示例的,参见图4,图4是本发明实施例提供的并行任务的处理方法的应用示意图,包括区块链网络600(示例性示出了共识节点610-1至共识节点610-3)、认证中心700和业务主体800,下面分别进行说明。
区块链网络600的类型是灵活多样的,例如可以为公有链、私有链或联盟链中的任意一种。以公有链为例,任何业务主体(例如客户端的运维方,客户端用户)的电子设备(例如,终端400),都可以在不需要授权的情况下接入区块链网络600而成为客户端节点;以联盟链为例,业务主体在获得授权后其下辖的电子设备可以接入区块链网络600而成为客户端节点。
作为示例,当区块链网络600是联盟链时,业务主体800从认证中心700进行登记注册获得各自的数字证书,数字证书中包括业务主体的公钥、以及认证中心700对业务主体800的公钥和身份信息签署的数字签名,用来与业务主体针对交易的数字签名一起附加到交易(例如,用于上链的针对操作对象的操作请求等)中,并被发送到区块链网络600,以供区块链网络600从交易中取出数字证书和数字签名,验证交易的可靠性(即是否未经篡改)和发送消息的业务主体的身份信息,区块链网络600会根据身份进行验证,例如是否具有发起交易的权限。
在一些实施例中,客户端节点可以只作为区块链网络600的观察者,即提供支持业务主体发起交易功能,对于区块链网络600的共识节点610的功能,例如排序功能、共识服务和账本功能等,客户端节点可以缺省或者有选择性(例如,取决于业务主体的具体业务需求)地实施。从而,可以将业务主体的数据和业务处理逻辑最大程度迁移到区块链网络600中,通过区块链网络600实现数据和业务处理过程的可信和可追溯。
区块链网络600中的共识节点接收来自不同业务主体(例如图4中示出的业务主体800)的客户端节点提交的交易,执行交易以更新账本或者查询账本,执行交易的各种中间结果或最终结果可以返回业务主体的客户端节点中显示。
下面以终端400向区块链网络600发送针对某一操作对象的操作请求为例,说明区块链网络的示例性应用,参见图4,图4中的客户端节点810对应于图1中的终端400。
示例的,当客户端节点810具有发起操作请求的权限时,可以由客户端节点810发送业务请求生成对应的交易并提交到区块链网络600中,使共识节点610调用智能合约将业务请求分解成多个节点,并通过不同的工作流来分别执行每个节点对应的任务,其中,每个工作流可以包括多个节点。当多个节点需要同时调用同一个操作对象时,区块链网络600从状态数据库(对应于图1中的数据库500)中查询操作对象的冲突频率,并调用智能合约执行根据冲突频率确定对应的加锁处理方式,并为操作对象设置对应的加锁处理方式的处理。接着,区块链600根据操作对象对应的加锁处理方式来响应多个节点针对操作对象的调用请求。
下面继续说明本发明实施例提供的并行任务的处理装置243实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器240的并行任务的处理装置243中的软件模块可以包括:获取模块2431、确定模块2432、接收模块2433和响应模块2434。
获取模块2431,用于获取操作对象的冲突频率;确定模块2432,用于根据冲突频率确定对应的加锁处理方式,并将操作对象设置为对应的加锁处理方式;接收模块2433,用于接收针对操作对象的多个并行的操作请求,其中,每个操作请求用于请求操作操作对象以完成一个特定的任务;响应模块2434,用于根据操作对象对应的加锁处理方式,响应多个并行的操作请求。
在一些实施例中,获取模块2431,还用于将操作对象对应的加锁处理方式设置为第一锁定方式,其中,第一锁定方式默认不对操作对象加锁;在操作对象对应的加锁处理方式被设置为第一锁定方式的期间,获取同时接收到针对操作对象的多个并行的操作请求的次数,并获取接收到针对操作对象的操作请求的总次数;确定模块2432,还用于将次数与总次数之间的比值,确定为操作对象的冲突频率。
在一些实施例中,确定模块2432,还用于当冲突频率小于冲突频率阈值时,确定操作对象对应的加锁处理方式为第一锁定方式;当冲突频率大于或等于冲突频率阈值时,确定操作对象对应的加锁处理方式为第二锁定方式;其中,第一锁定方式默认不对操作对象加锁,第二锁定方式默认对操作对象加锁。
在一些实施例中,并行任务的处理装置243还包括更新模块2435,用于基于机器学习模型提取操作对象的历史冲突频率数据的隐层特征,并基于隐层特征进行映射处理,以确定操作对象的冲突频率;根据确定的冲突频率更新冲突频率阈值。
在一些实施例中,确定模块2432,还用于当多次获取的冲突频率基于冲突频率阈值出现波动时,根据冲突频率阈值确定第一冲突频率阈值和第二冲突频率阈值;其中,第一冲突频率阈值大于冲突频率阈值,第二冲突频率阈值小于冲突频率阈值;当冲突频率大于第一冲突频率阈值时,将操作对象对应的加锁处理方式设置为第二锁定方式;当冲突频率小于第二冲突频率阈值时,将操作对象对应的加锁处理方式设置为第一锁定方式。
在一些实施例中,当操作对象对应的加锁处理方式为第二锁定方式时,响应模块2434,还用于当接收到多个并行的操作请求中的任一操作请求时,将操作对象的状态记录为已占用;在完成任一操作请求针对操作对象所需要执行的操作后,将操作对象的状态记录为空闲,以继续响应多个并行的操作请求中未被响应的其他操作请求;其中,第二锁定方式默认对操作对象加锁。
在一些实施例中,当操作对象对应的加锁处理方式为第一锁定方式时,响应模块2434,还用于针对多个并行的操作请求中的任一操作请求执行以下操作:接收任一操作请求的调用方发送的操作对象的初始状态值、以及待提交操作对象;其中,初始状态值为针对操作对象执行任一操作请求前操作对象的状态,待提交操作对象是针对操作对象执行任一操作请求需要执行的操作后得到,将操作对象的初始状态值与操作对象实时状态值进行比对;根据比对结果处理待提交操作对象;其中,第一锁定方式默认不对操作对象加锁。
在一些实施例中,更新模块2435,还用于当比对结果表征操作对象的初始状态值与操作对象最新的状态值一致时,基于待提交操作对象更新操作对象;以及用于当比对结果表征操作对象的初始状态值与操作对象最新的状态值不一致时,丢弃待提交操作对象,并向任一操作请求对应的调用方返回操作失败的提醒消息。
在一些实施例中,确定模块2432,还用于当探测到操作对象不具备原子性,或未获取到操作对象被配置的原子性时,确定执行获取操作对象的冲突频率的处理。
在一些实施例中,确定模块2432,还用于当探测到操作对象具备原子性,且接收到针对操作对象的多个并行的操作请求时,基于操作对象同步响应多个并行的操作请求。
在一些实施例中,获取模块2431,还用于获取操作对象实时的冲突频率;确定模块2432,还用于根据实时的冲突频率调整操作对象对应的加锁处理方式。
在一些实施例中,确定模块2432,还用于当实时的冲突频率小于冲突频率阈值时,将操作对象对应的加锁处理方式调整为第一锁定方式;当实时的冲突频率大于或等于冲突频率阈值时,将操作对象对应的加锁处理方式调整为第二锁定方式;其中,第一锁定方式默认不对操作对象加锁,第二锁定方式默认对操作对象加锁。
需要说明的是,本发明实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本发明实施例提供的并行任务的处理装置中未尽的技术细节,可以根据图3-4任一附图的说明而理解。
下面,以电商场景为例说明本发明实施例提供的并行任务的处理方法的示例性应用。
示例的,当电商平台上线一款新的热门商品时,会有多个用户在电商平台上购买热门商品。当多个用户同时购买热门商品时,如果不对热门商品加锁,则会导致数据库中热门商品的数量不准确,从而影响用户的购买体验;而对于电商平台中的冷门商品,多个用户同时购买冷门商品的几率较小,对冷门商品加锁,则会浪费电商平台的系统资源。
针对上述技术问题,本发明实施例提供的并行任务的处理方法对于电商平台中的热门商品,将热门商品对应的加锁处理方式配置为悲观锁,如此,可以避免用户1在看到剩余商品数量不为零,但在付款时却无法购买的情况(这是因为用户1在购买热门商品的同时,用户2也在购买热门商品,由于用户2先完成付款操作,导致用户1在执行付款操作时,数据库中热门商品的实际数量已经为零);对于电商平台中冷门商品,则将冷门商品对应的加锁处理方式配置为乐观锁,避免了不必要的加锁处理,从而提升了整个电商系统的执行效率。
在电商平台中的应用可以包括以下三部分:
1、根据电商平台中商品的销售情况,动态地调整商品的加锁处理方式。即针对热门商品(即多个用户同时购买商品的几率较大),采用同步锁(即对热门商品的库存数量采用同步锁的加锁处理方式);针对冷门商品(即多个用户同时购买商品的几率较小),采用乐观锁(即对冷门商品的库存数量采用乐观锁的加锁处理方式)。
2、任务中心具备自动分析商品的销售记录的功能,加锁处理方式根据商品的销售记录来动态调整。
3、任务中心自动探测和发现商品是否具备原子性。对于本身具备原子性的商品,可以不加锁(即不对商品的库存数量加锁);对于不具备原子性的商品,则采用上述第1点的保护策略。
也就是说,本发明实施例提出了一种在调用方看来无锁的并发操作方式,根据商品销售记录的不同和调用频率动态管理冲突,可以很大程度上解决加锁带来的时间损耗,也避免了调用方加锁和解锁的操作,降低了操作的复杂度
本发明实施例提供的并行任务的处理方法可以应用于工作流系统,其本质上是把一项工作分解为多个任务节点,当所有的任务节点都执行完成后,也就完成了项工作。工作流系统要把每个任务节点按特定的条件串接起来。
示例的,参见图7,图7是本发明实施例提供的工作流系统执行过程的示意图。如图7所示,上游系统向工作流系统发起流程,以使工作流系统中的流程引擎将工作拆分为4个不同的任务节点,每个任务节点都需要完成特定的事务,才能把任务完成。其中,上游系统作为工作流系统的门户,用于接收终端发送的业务请求,对业务请求进行预处理并触发工作流系统执行具体的业务处理过程,以及用于当接收到多个终端发送的业务请求时,基于负载均衡策略对多个业务请求进行调度。在工作流系统中,可以提供一个任务中心来管理各个任务节点的操作步骤,包括访问本地的资源或者第三方系统的资源。在同一时间,可能会有多个流程在同时执行,每个流程中不同的任务节点也有可能会对同一个对象发起操作请求。当被操作的对象不具备原子性时,就需要调用方来协调,避免同一时间对同一个对象(即操作对象)进行操作。
示例的,参见图8,图8是本发明实施例提供的任务中心的示意图。如图8所示,任务中心作为调用方(由图7中4个不同的节点组成)和第三方系统或者本地资源的桥梁,其主要作用是接收调用方的请求(即操作请求),根据所接收的请求对第三方系统或者本地资源发起读取或者配置等操作。任务中心在处理访问冲突时提供了以下两种处理方式,包括乐观锁和同步锁,下面分别进行说明。
1、乐观锁
示例的,参见图9,图9是本发明实施例提供的基于乐观锁机制响应多个并行任务的示意图。如图9所示,任务中心在操作开始之初,首先会通过接口或者本地读取操作对象的状态,并记录为A;处理完逻辑后,需要更改对象的状态前,任务中心会将上次读取的A值与新读取的B值进行比较,当预期值A和当前值B相等时,才把操作对象的状态改为C值,并给调用方返回操作成功的消息。因为当且仅当A=B时,说明在逻辑操作期间,被操作对象没有被别的调用方改变其状态,上述方法叫做比较替换法。
另一种情况是,如果任务中心发现A不等于B,说明在逻辑操作期间,被操作对象已经被别的调用方改变其状态,则向调用方返回操作失败的消息。
2、同步锁(也称为悲观锁)
示例的,参见图10,图10是本发明实施例提供的基于同步锁机制响应多个并行任务的示意图。如图10所示,任务中心在内部将每个被调用的对象记录下来,例如可以用标识(ID,IDentity)的方式,也可以用对象名的方式。需要说明的是,这里的ID和对象名在同一个任务中心内部都是唯一的。
任务中心在接收到调用方发送的请求时,会记录被操作对象的ID的状态为已占用,直到被调用的对象结束后,才会把对象的ID的状态置为空闲。任务中心在同一时刻只会处理对一个操作对象的请求,其他的调用方发送的请求都会暂停,等待被操作的对象ID的状态为空闲时才会再次发起调用。
下面对上述两种锁的使用情景进行说明。
在一些实施例中,对于某些操作对象,其资源竞争很少(即并行操作时冲突较轻,例如电商平台中的冷门商品,不同用户在同一时刻购买商品的几率较小),如果使用同步锁进行调用,调用方之间会发生阻塞和唤醒切换,且调用方之间需要互相等待,导致整体的执行效率较低;而乐观锁基于任务中心本身的调度能力,不需要对操作对象进行加锁或者等待,操作冲突的几率较少,几乎不需要做回滚操作,因此,对于操作对象调用不是很频繁的情况,采用乐观锁的方式调度多个调用方发送的任务,整体来看可以获得更高的性能。
在另一些实施例中,对于操作对象调用非常频繁的情况,其竞争严重(即并行操作时调用方之间冲突严重,例如电商平台中的热门商品,不同用户在同一时刻购买商品的几率较大),如果采用乐观锁的方式进行调度会经常发生冲突而导致频繁的回滚、等待和再次操作等过程,导致浪费更多的任务中心资源。因此,对于操作对象被频繁访问的情况,使用同步锁,系统整体的效率会更高。
在调用方看来,其只关心调用执行的最终结果就行。具体的并行执行和调度方式,由任务中心按照一定的策略来管理,具体的策略如下。
1、任务中心首先探测或配置被操作对象的原子性,对于具备原子属性的操作对象,无须理会,直接按普通并行处理方式进行。
2、对于不具备原子属性的操作对象,在任务中心启动之初,都统一采用乐观锁机制,并实时统计每个操作对象乐观锁的冲突频率,计数为F。
3、任务中心为操作对象乐观锁的冲突频率F定义一个冲突频率阈值T,阈值T可以由用户自行定义。
4、当冲突频率F>=冲突频率阈值T时,任务中心将操作对象的加锁处理方式配置为同步锁;当冲突频率F<冲突频率阈值T时,任务中心将操作对象的加锁处理方式配置为乐观锁。
5、在某些情况下,当实时采集的冲突频率F在冲突频率阈值T值附近反复波动时,会导致针对操作对象的加锁处理方式在同步锁和乐观锁之间反复的切换。因此,为了避免这种情况的发生,可以把上述的判断条件改为:当冲突频率F>=T+T*5%时,任务中心将操作对象的加锁处理方式配置为同步锁;当冲突频率F<T-T*5%时,任务中心将操作对象的加锁处理方式配置为乐观锁。
6、对于任务中心来说,被调用的对象在不同的时间段也是不同的,如图11所示,在时间段A,被调用的对象有1、2、3和4;而到了时间段B,被调用的对象可能会是5、6、7和8。也就是说,不但乐观锁冲突的频率会随着时间的推移而变化,同时,同步锁的占用时长也会发生变化。本发明实施例提供的并行任务的处理方法追求的是锁定时间最小,从而让系统整体执行效率最大化。
7、在任务中心设置一个机器学习模块,用于对操作对象历史的乐观锁冲突频率数据进行分析,以根据实时分析的结果来调整阈值T,从而得到任务中心的整体执行时间与各操作对象的冲突频率阈值T的关系:t=f(T1,T2,T3,T4,T5…)。
示例的,可以把机器学习作为一个独立的模块,定时对任务中心里有乐观锁冲突的情况记录下来,具体来说就是记录乐观锁冲突的频率,进而把采集的频率数据做数据分析。例如在某一时间段内,某个操作对象的冲突频率F1比较小(例如F1<5%),此时,可以将阈值T调整为档位1;在另外一个时间段内,检测到操作对象的冲突频率上升,例如变化为5%<F2<10%,则此时可以将阈值T调整为档位2。在经过上述学习过程后,就可以得到一个机器学习模型,后续系统就可以利用模型对冲突频率阈值T进行动态调整。
本发明实施例的方案应用于电商平台时,基于商品销售情况的统计,根据实际需要对商品的库存数量加锁处理方式,实现了灵活动态调整方案解决针对商品下单的冲突。如此,可以极大提升电商平台的整体执行效率,对于任务的稳定性和性能都可以带来很大的收益。同时,无论是直接加锁还是冲突后回滚的并行执行方式都是在任务中心内部自行完成,完全屏蔽了任务的执行步骤,调用方无需关心具体的执行细节,大大降低了代码实现的复杂度。
本发明实施例提供了一种计算机程序产品或计算机程序,计算机程序产品或计算机程序包括计算机指令,计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取计算机指令,处理器执行计算机指令,使得计算机设备执行本发明实施例上述的并行任务的处理方法。
本发明实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本发明实施例提供的并行任务的处理方法,例如,如图3A、图3B或图3C示出的并行任务的处理方法。
在一些实施例中,存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以被存储在保存其它程序或数据的文件的一部分,例如,存储在超日志标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
下面结合实验数据进一步说明本发明实施例提供的并行任务处理方法的效果。
在工作流系统中,应用场景非常复杂,例如当审批流和工作流混在一起,访问的对象也是千差万别,在任务中心的操作对象也是形态各异。如果没有一个高效安全的调度策略,任务的执行效率和数据的一致性就没有办法保证。
根据历史数据估算,在大型的工作流系统中,任务中心的每秒查询率(Query PerSecond,QPS)可以达到10k/秒,假如有50%的操作对象需要加锁,每个需要加锁的操作对象访问时间按500ms计算。前期任务中心的加锁处理方式均为乐观锁,其冲突频率假设为5%,这样任务中心的整体性能可提升45%;在后期,当同步锁的占比上升至10%时,则任务中心的整体性能可提升35%。
可见,本发明实施例针对大规模海量的任务调度应用场景,提出了一种基于冲突频率动态调整加锁策略的方案,通过对历史冲突数据的自动分析,综合被调用对象的执行情况,对加锁策略进行动态调整并进行细化,大大提升了任务中心执行的整体效率,同时也简化了调用方的请求方式,降低了复杂度。
以上所述,仅为本发明的实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。
Claims (15)
1.一种并行任务的处理方法,其特征在于,所述方法包括:
获取操作对象的冲突频率;
根据所述冲突频率确定对应的加锁处理方式,并将所述操作对象设置为所述对应的加锁处理方式;
接收针对所述操作对象的多个并行的操作请求,其中,每个所述操作请求用于请求操作所述操作对象以完成一个特定的任务;
根据所述操作对象对应的加锁处理方式,响应所述多个并行的操作请求。
2.根据权利要求1所述的方法,其特征在于,所述获取操作对象的冲突频率,包括:
将所述操作对象对应的加锁处理方式设置为第一锁定方式,其中,所述第一锁定方式默认不对所述操作对象加锁;
在所述操作对象对应的加锁处理方式被设置为所述第一锁定方式的期间,确定同时接收到针对所述操作对象的多个并行的操作请求的次数,并确定接收到针对所述操作对象的操作请求的总次数;
将所述次数与所述总次数之间的比值,确定为所述操作对象的冲突频率。
3.根据权利要求1所述的方法,其特征在于,所述根据所述冲突频率确定对应的加锁处理方式,包括:
当所述冲突频率小于冲突频率阈值时,确定所述操作对象对应的加锁处理方式为第一锁定方式;
当所述冲突频率大于或等于所述冲突频率阈值时,确定所述操作对象对应的加锁处理方式为第二锁定方式;
其中,所述第一锁定方式默认不对所述操作对象加锁,所述第二锁定方式默认对所述操作对象加锁。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
基于机器学习模型提取所述操作对象的历史冲突频率数据的隐层特征,并基于所述隐层特征进行映射处理,以确定所述操作对象的冲突频率;
根据所述确定的冲突频率更新所述冲突频率阈值。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当多次获取的所述冲突频率基于所述冲突频率阈值出现波动时,根据所述冲突频率阈值确定第一冲突频率阈值和第二冲突频率阈值;
其中,所述第一冲突频率阈值大于所述冲突频率阈值,所述第二冲突频率阈值小于所述冲突频率阈值;
当所述冲突频率大于所述第一冲突频率阈值时,将所述操作对象对应的加锁处理方式设置为所述第二锁定方式;
当所述冲突频率小于所述第二冲突频率阈值时,将所述操作对象对应的加锁处理方式设置为所述第一锁定方式。
6.根据权利要求1所述的方法,其特征在于,当所述操作对象对应的加锁处理方式为第二锁定方式时,所述根据所述操作对象对应的加锁处理方式,响应所述多个并行的操作请求,包括:
当接收到所述多个并行的操作请求中的任一操作请求时,将所述操作对象的状态记录为已占用;
在完成所述任一操作请求针对所述操作对象所需要执行的任务后,将所述操作对象的状态记录为空闲,以继续响应所述多个并行的操作请求中未被响应的其他操作请求;
其中,所述第二锁定方式默认对所述操作对象加锁。
7.根据权利要求1所述的方法,其特征在于,当所述操作对象对应的加锁处理方式为第一锁定方式时,所述根据所述操作对象对应的加锁处理方式,响应所述多个并行的操作请求,包括:
针对所述多个并行的操作请求中的任一操作请求执行以下操作:
接收所述任一操作请求的调用方发送的所述操作对象的初始状态值、以及待提交操作对象;
其中,所述初始状态值为针对所述操作对象执行所述任一操作请求前所述操作对象的状态,所述待提交操作对象是针对所述操作对象执行所述任一操作请求需要执行的任务后得到;
将所述操作对象的初始状态值与所述操作对象的实时状态值进行比对;
根据比对结果处理所述待提交操作对象;
其中,所述第一锁定方式默认不对所述操作对象加锁。
8.根据权利要求7所述的方法,其特征在于,所述根据比对结果处理所述待提交操作对象,包括:
当所述比对结果表征所述操作对象的初始状态值与所述操作对象最新的状态值一致时,基于所述待提交操作对象更新所述操作对象;
当所述比对结果表征所述操作对象的初始状态值与所述操作对象最新的状态值不一致时,丢弃所述待提交操作对象,并向所述任一操作请求对应的调用方返回操作失败的提醒消息。
9.根据权利要求1所述的方法,其特征在于,在获取操作对象的冲突频率之前,所述方法还包括:
当探测到所述操作对象不具备原子性,或未获取到所述操作对象被配置的原子性时,确定执行获取所述操作对象的冲突频率的处理。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当探测到所述操作对象具备原子性,且接收到针对所述操作对象的多个并行的操作请求时,基于所述操作对象同步响应所述多个并行的操作请求。
11.根据权利要求1所述的方法,其特征在于,所述获取操作对象的冲突频率,包括:
获取所述操作对象实时的冲突频率;
所述方法还包括:
根据所述实时的冲突频率调整所述操作对象对应的加锁处理方式。
12.根据权利要求11所述的方法,其特征在于,所述根据所述实时的冲突频率调整所述操作对象对应的加锁处理方式,包括:
当所述实时的冲突频率小于冲突频率阈值时,将所述操作对象对应的加锁处理方式调整为第一锁定方式;
当所述实时的冲突频率大于或等于所述冲突频率阈值时,将所述操作对象对应的加锁处理方式调整为第二锁定方式;
其中,所述第一锁定方式默认不对所述操作对象加锁,所述第二锁定方式默认对所述操作对象加锁。
13.一种并行任务的处理装置,其特征在于,所述装置包括:
获取模块,用于获取操作对象的冲突频率;
确定模块,用于根据所述冲突频率确定对应的加锁处理方式,并将所述操作对象设置为所述对应的加锁处理方式;
接收模块,用于接收针对所述操作对象的多个并行的操作请求,其中,每个所述操作请求用于请求操作所述操作对象以完成一个特定的任务;
响应模块,用于根据所述操作对象对应的加锁处理方式,响应所述多个并行的操作请求。
14.一种电子设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1-12任一项所述的并行任务的处理方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1-12任一项所述的并行任务的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010790764.0A CN111737021A (zh) | 2020-08-07 | 2020-08-07 | 并行任务的处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010790764.0A CN111737021A (zh) | 2020-08-07 | 2020-08-07 | 并行任务的处理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111737021A true CN111737021A (zh) | 2020-10-02 |
Family
ID=72658257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010790764.0A Pending CN111737021A (zh) | 2020-08-07 | 2020-08-07 | 并行任务的处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737021A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112381649A (zh) * | 2020-11-17 | 2021-02-19 | 深圳前海微众银行股份有限公司 | 基于区块链的交易共识方法、装置及设备 |
CN113821321A (zh) * | 2021-08-31 | 2021-12-21 | 上海商汤阡誓科技有限公司 | 任务处理芯片、方法、装置、计算机设备及存储介质 |
CN114462900A (zh) * | 2022-04-13 | 2022-05-10 | 云智慧(北京)科技有限公司 | 一种业务活动节点的拆分方法、装置及设备 |
CN115408122A (zh) * | 2022-08-01 | 2022-11-29 | 无锡雪浪数制科技有限公司 | 一种去中心化的分布式并行计算框架及计算方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103634347A (zh) * | 2012-08-24 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种并行业务处理方法、设备及系统 |
US20190220209A1 (en) * | 2018-01-15 | 2019-07-18 | Fujitsu Limited | Information processing apparatus, method for control, and non-transitory computer-readable recording medium having stored therein control program |
CN111427453A (zh) * | 2020-03-30 | 2020-07-17 | 上海盛翔信息科技有限公司 | 一种医疗虚拟现实培训场景下多人协同交互与感知的方法 |
-
2020
- 2020-08-07 CN CN202010790764.0A patent/CN111737021A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103634347A (zh) * | 2012-08-24 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种并行业务处理方法、设备及系统 |
US20190220209A1 (en) * | 2018-01-15 | 2019-07-18 | Fujitsu Limited | Information processing apparatus, method for control, and non-transitory computer-readable recording medium having stored therein control program |
CN111427453A (zh) * | 2020-03-30 | 2020-07-17 | 上海盛翔信息科技有限公司 | 一种医疗虚拟现实培训场景下多人协同交互与感知的方法 |
Non-Patent Citations (3)
Title |
---|
WINNXUDONG: ""ES并发冲突问题与悲观锁与乐观锁并发控制"", 《HTTPS://WWW.JIANSHU.COM/P/176BCAFC670D》 * |
屈正庚: ""条件归类的并发控制策略研究"", 《商洛学院学报》 * |
李翠翠: ""基于B/S结构的中学生考试系统的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112381649A (zh) * | 2020-11-17 | 2021-02-19 | 深圳前海微众银行股份有限公司 | 基于区块链的交易共识方法、装置及设备 |
CN113821321A (zh) * | 2021-08-31 | 2021-12-21 | 上海商汤阡誓科技有限公司 | 任务处理芯片、方法、装置、计算机设备及存储介质 |
CN114462900A (zh) * | 2022-04-13 | 2022-05-10 | 云智慧(北京)科技有限公司 | 一种业务活动节点的拆分方法、装置及设备 |
CN114462900B (zh) * | 2022-04-13 | 2022-07-29 | 云智慧(北京)科技有限公司 | 一种业务活动节点的拆分方法、装置及设备 |
CN115408122A (zh) * | 2022-08-01 | 2022-11-29 | 无锡雪浪数制科技有限公司 | 一种去中心化的分布式并行计算框架及计算方法 |
CN115408122B (zh) * | 2022-08-01 | 2023-05-23 | 无锡雪浪数制科技有限公司 | 一种去中心化的分布式并行计算框架及计算方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111737021A (zh) | 并行任务的处理方法、装置、电子设备及存储介质 | |
US10360523B2 (en) | System and method for executing business services and enhancing business performance through a business process modeling notation | |
CN108073684A (zh) | 一种数据处理方法、服务器及计算机可读存储介质 | |
CN108694199A (zh) | 数据同步装置、方法、存储介质及电子设备 | |
US8396968B2 (en) | Information processor and resource scheduling method | |
US9055065B2 (en) | Managing participant order in distributed transactions | |
US8973117B2 (en) | Propagating security identity information to components of a composite application | |
CN103782574A (zh) | 用于数据库事务的幂等性 | |
JP2017514218A (ja) | サードパーティアプリケーションの実行 | |
TW201229795A (en) | Web service patterns for globally distributed service fabric | |
CN107423942B (zh) | 一种业务流转的方法及装置 | |
CN110673933A (zh) | 基于ZooKeeper的分布式异步队列实现方法、装置、设备及介质 | |
CN112235396B (zh) | 内容处理链路调整方法、装置、计算机设备和存储介质 | |
CN106789308A (zh) | 一种微服务架构可自动伸缩的gis服务装置及其控制方法 | |
CN113568981A (zh) | 一种交易数据处理方法、装置、设备以及介质 | |
CN110222535A (zh) | 区块链配置文件的处理装置、方法及存储介质 | |
CN113760976A (zh) | 业务的处理方法、装置、设备及存储介质 | |
CN114780930A (zh) | 权限管理方法、装置、计算机设备和存储介质 | |
CN113778991B (zh) | 一种大数据的资源访问控制的实现方法 | |
CN117632395A (zh) | 工作流处理方法、装置、设备、存储介质和程序产品 | |
CN109901933B (zh) | 业务系统的操作方法及装置、存储介质、电子装置 | |
CN113360251A (zh) | 智能合约执行与跨合约调用方法、装置及存储介质 | |
CN112685142A (zh) | 分布式数据处理系统 | |
CN113448710B (zh) | 基于业务资源的分布式应用系统 | |
Balsamo | Designing a Microservice-oriented application running on a Serverless architecture |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40030094 Country of ref document: HK |
|
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201002 |
|
RJ01 | Rejection of invention patent application after publication |