业务的处理方法、装置、设备及存储介质

文档序号:1937346 发布日期:2021-12-07 浏览:3次 >En<

阅读说明:本技术 业务的处理方法、装置、设备及存储介质 (Service processing method, device, equipment and storage medium ) 是由 王文明 于 2020-09-23 设计创作,主要内容包括:本发明实施例提供一种业务的处理方法、装置、设备及存储介质,该方法包括:接收业务请求,所述业务请求包括入参;根据所述入参,确定所述业务请求对应的唯一标识;对所述唯一标识进行分级幂等校验处理,获得第一校验结果,分级幂等校验包括至少两级幂等校验;若所述第一校验结果为通过,则根据所述业务请求进行业务处理,获得待落库数据;对所述待落库数据进行落库处理。可以有效拦截调用的进一步穿透,层层递进式的校验,既保证高并发的性能,又保证调用的幂等性。(The embodiment of the invention provides a service processing method, a device, equipment and a storage medium, wherein the method comprises the following steps: receiving a service request, wherein the service request comprises access parameters; determining a unique identifier corresponding to the service request according to the access parameter; carrying out hierarchical power check processing on the unique identifier to obtain a first check result, wherein the hierarchical power check comprises at least two-level power check; if the first check result is passed, performing service processing according to the service request to obtain database to be dropped; and performing database dropping processing on the database to be dropped. Further penetration of calling can be effectively intercepted, and progressive verification is performed layer by layer, so that high concurrency performance and calling idempotency are guaranteed.)

业务的处理方法、装置、设备及存储介质

技术领域

本发明涉及计算机技术领域,尤其涉及一种业务的处理方法、装置、设备及存储介质。

背景技术

在分布式软件系统中,有很多风险场景需要进行幂等处理。幂等是指任意多次执行所产生的影响均与一次执行的影响相同。例如在电商领域对订单特定状态的监听,在网络不稳定的情况下可能会在很短的时间内收到大量重复的业务请求,比如秒杀场景下,用户若一次点击没有反应可能会连续多次点击,从而产生多次相同的业务请求。

针对这种情况,现有技术中通常是基于数据库索引表或唯一键形式进行幂等校验,即接收到业务请求后,通过索引表或唯一键进行校验,对于索引表形式,校验通过后根据业务请求处理数据,在落库时维护索引表,对于唯一键形式,在处理完数据后的提交过程中,若发生了唯一键冲突说明幂等校验未通过。

现有的校验方式,在高并发场景下,最终的压力还是落在了数据库上,对数据库的冲击非常大,从而导致系统整体性能下降。

发明内容

本发明实施例提供一种业务的处理方法、装置、设备及存储介质,以解决现有技术高并发场景下性能较低等缺陷。

第一个方面,本发明实施例提供一种业务的处理方法,包括:

接收业务请求,所述业务请求包括入参;

根据所述入参,确定所述业务请求对应的唯一标识;

对所述唯一标识进行分级幂等校验处理,获得第一校验结果,所述分级幂等校验包括至少两级幂等校验;

若所述第一校验结果为通过,则根据所述业务请求进行业务处理,获得待落库数据;

对所述待落库数据进行落库处理。

可选地,所述对所述唯一标识进行分级幂等校验处理,获得第一校验结果,包括:

对所述唯一标识进行第一级幂等校验,获得第二校验结果,所述第一级幂等校验为实例本地缓存校验;

若所述第二校验结果为通过,对所述唯一标识进行第二级幂等校验,获得所述第一校验结果,所述第二级幂等校验为缓存服务校验。

可选地,所述对所述唯一标识进行第一级幂等校验,获得第二校验结果,包括:

将所述唯一标识与响应所述业务请求的第一实例的本地缓存进行匹配;

若所述第一实例的本地缓存中存在所述唯一标识,且缓存状态为完成,则所述第二校验结果为失败;

若所述第一实例的本地缓存中不存在所述唯一标识,则所述第二校验结果为通过。

可选地,所述方法还包括:

若所述第一实例的本地缓存中存在所述唯一标识,且缓存状态为锁定,则判断是否需要返回落库执行结果;

若需要返回落库执行结果,则进入自旋,等待落库执行结果并返回;

若不需要返回落库执行结果,则结束所述业务请求。

可选地,所述对所述唯一标识进行第二级幂等校验,获得所述第一校验结果,包括:

将所述唯一标识与其他实例的本地缓存进行匹配,若已有任意一个其他实例的本地缓存中存在所述唯一标识,且缓存状态为完成,则所述第一校验结果为失败;

若所有其他实例的本地缓存中均不存在所述唯一标识,则所述第一校验结果为通过。

可选地,若所述第二校验结果和/或所述第一校验结果为失败,则结束所述业务请求。

可选地,所述根据所述业务请求进行业务处理之前,所述方法还包括:

若所述第一校验结果为通过,采用异步处理方式分别将所述唯一标识进行实例本地缓存和缓存服务缓存,并更新实例本地缓存状态和缓存服务缓存状态为锁定;

所述根据所述业务请求进行业务处理,获得待落库数据,包括:

若实例本地缓存和缓存服务缓存均缓存成功,则根据所述业务请求进行业务处理,获得待落库数据;

在落库成功之后,所述方法还包括:

更新所述唯一标识的缓存状态为完成;

若需要返回落库执行结果,则缓存落库执行结果。

可选地,在接收业务请求之后,所述方法还包括:

获取并记录所述业务请求的请求时间,所述请求时间用于判断所述业务请求的唯一标识的缓存时间是否超时,以在缓存超时时对所述唯一标识进行删除。

可选地,在获得待落库数据之后,所述方法还包括:

基于所述待落库数据进行终级幂等校验,获得第三校验结果;

所述对所述待落库数据进行落库处理,包括:

若所述第三校验结果为通过,将所述待落库数据进行落库。

上述发明中的一个实施例具有如下优点或者有益效果:

通过实例本地缓存校验和缓存服务校验,结合数据库终级校验,有效拦截调用的进一步穿透,层层递进式校验,既有效保证高并发场景下性能,又保证了调用的绝对幂等性。

上述发明中的另一个实施例具有如下优点或者有益效果:

通过自旋流程,有效保证缓存过程中的并发情况的有效正确执行。

第二个方面,本发明实施例提供一种业务的处理装置,包括:

接收模块,用于接收业务请求,所述业务请求包括入参;

确定模块,用于根据所述入参,确定所述业务请求对应的唯一标识;

校验模块,用于对所述唯一标识进行分级幂等校验处理,获得第一校验结果,所述分级幂等校验包括至少两级幂等校验;

处理模块,用于若所述第一校验结果为通过,则根据所述业务请求进行业务处理,获得待落库数据;

执行模块,用于对所述待落库数据进行落库处理。

可选地,所述校验模块,具体用于:

对所述唯一标识进行第一级幂等校验,获得第二校验结果,所述第一级幂等校验为实例本地缓存校验;

若所述第二校验结果为通过,对所述唯一标识进行第二级幂等校验,获得所述第一校验结果,所述第二级幂等校验为缓存服务校验。

可选地,所述校验模块,具体用于:

将所述唯一标识与响应所述业务请求的第一实例的本地缓存进行匹配;

若所述第一实例的本地缓存中存在所述唯一标识,且缓存状态为完成,则所述第二校验结果为失败;

若所述第一实例的本地缓存中不存在所述唯一标识,则所述第二校验结果为通过。

可选地,所述校验模块,还用于:

所述方法还包括:

若所述第一实例的本地缓存中存在所述唯一标识,且缓存状态为锁定,则判断是否需要返回落库执行结果;

若需要返回落库执行结果,则进入自旋,等待落库执行结果并返回;

若不需要返回落库执行结果,则结束所述业务请求。

可选地,所述校验模块,具体用于:

将所述唯一标识与其他实例的本地缓存进行匹配,若已有任意一个其他实例的本地缓存中存在所述唯一标识,且缓存状态为完成,则所述第一校验结果为失败;

若所有其他实例的本地缓存中均不存在所述唯一标识,则所述第一校验结果为通过。

可选地,所述校验模块,还用于:

若所述第二校验结果和/或所述第一校验结果为失败,则结束所述业务请求。

可选地,所述校验模块,还用于:若所述第一校验结果为通过,采用异步处理方式分别将所述唯一标识进行实例本地缓存和缓存服务缓存;

所述处理模块,具体用于:若实例本地缓存和缓存服务缓存均缓存成功,则根据所述业务请求进行业务处理,获得待落库数据;

所述处理模块,还用于:

在落库成功之后,更新所述唯一标识的缓存状态为完成;

若需要返回落库执行结果,则缓存落库执行结果。

可选地,在接收业务请求之后,所述确定模块,还用于获取并记录所述业务请求的请求时间,所述请求时间用于判断所述业务请求的唯一标识的缓存时间是否超时,以在缓存超时时对所述唯一标识进行删除。

可选地,所述执行模块,还用于基于所述待落库数据进行终级幂等校验,获得第三校验结果;

所述执行模块,具体用于:

若所述第三校验结果为通过,将所述待落库数据进行落库。

第三个方面,本发明实施例提供一种电子设备,包括:至少一个处理器和存储器;

所述存储器存储计算机执行指令;

所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一个方面以及第一个方面各种可能的设计所述的方法。

第四个方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一个方面以及第一个方面各种可能的设计所述的方法。

本发明实施例提供的业务的处理方法、装置、设备及存储介质,通过基于业务请求的唯一标识进行分级幂等校验,可以有效拦截调用的进一步穿透,层层递进式的校验,既保证高并发的性能,又保证调用的幂等性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例基于的处理系统的架构示意图;

图2为本发明一实施例提供的业务的处理方法的流程示意图;

图3为本发明另一实施例提供的业务的处理方法的流程示意图;

图4为本发明一实施例提供的多实例场景示意图;

图5为本发明一实施例提供的幂等校验整体流程框图;

图6为本发明一实施例提供的业务的处理装置的结构示意图;

图7为本发明一实施例提供的电子设备的结构示意图;

图8为本发明一实施例提供的一种电子设备的示例性框图。

通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

首先对本发明所涉及的名词进行解释:

事务:事务是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。事务将占用数据库的连接资源。

幂等:幂等状态是指任意多次执行所产生的影响均与一次执行的影响相同。

自旋:按照指定频率对状态进行循环重复校验,直到状态变更为预期状态后结束循环重复校验。这里的循环重复对状态的校验,称之为自旋。

数据指纹:数据指纹是数据包的MD5校验码;或者是几个入参的联合哈希码;或者是入参中的某个特定参数,比如订单号等。是幂等性校验的KEY。

数据落库:执行数据库的新增、修改或删除并提交事务成功后,即为数据落库。

在分布式软件系统中,有很多风险场景需要进行幂等处理。例如在电商领域对订单特定状态的监听,在网络不稳定的情况下可能会在很短的时间内收到大量重复的业务请求,比如秒杀场景下,用户若一次点击没有反应可能会连续多次点击,从而产生多次相同的业务请求。针对这种情况,现有技术中通常是基于数据库索引表或唯一键形式进行幂等校验,即接收到业务请求后,通过索引表或唯一键进行校验,对于索引表形式,校验通过后根据业务请求处理数据,在落库时维护索引表,对于唯一键形式,在处理完数据后的提交过程中,若发生了唯一键冲突说明幂等校验未通过。这些校验方式,在高并发场景下,最终的压力还是落在了数据库上,对数据库的冲击非常大,校验效率低,从而导致系统整体性能下降。为了应对高并发场景,出现了将索引表迁移到缓存中进行幂等校验的方式,缓存手段有的是本地缓存,有的是缓存服务(即分布式缓存),但其本质上还是基于索引表校验方式,且缓存的数据量和缓存周期有限,在很多场景下,还是会失效,导致高并发再次穿透到数据库上,从而导致风险出现。

针对现有技术存在的上述问题,发明人进行了创造性的研究,在研究中发现,现有技术基于缓存的幂等校验,只是将数据库索引表迁移到了缓存中,实质上还是相当于索引表形式的校验,在高并发场景下,还是容易穿透到数据库上,对数据库造成很大冲击,为了能够解决上述问题,发明人创造性地发现对于高并发场景,采用数据打包和消息中间件的形式进行削峰,通过消息中间件传递调用者的消息(即业务请求),在接收到消息中间件发送的业务请求时,根据业务请求包括的入参确定该业务请求对应的唯一标识(也可称为数据指纹),基于数据指纹进行分级幂等校验,分级幂等校验可以包括至少两级校验,均为基于缓存的幂等校验,且在最终落库时还可以再采用现有的索引表或唯一键形式的校验,实现终级校验,有效保证幂等性。因此本发明实施例提供一种业务的处理方法,通过基于数据指纹进行分级幂等校验,有效地拦截调用者的进一步穿透,层层递进式的校验,既保证高并发的性能,又保证调用的绝对幂等性。

本发明实施例提供的业务的处理方法,适用于需要进行幂等处理的应用场景,比如电商平台对订单特定状态的监听场景,秒杀场景等高并发场景,当然也适用于其他非高并发场景,具体可以根据实际需求设置。如图1所示,为本发明实施例基于的处理系统的架构示意图。该处理系统可以包括,至少一个用户终端、消息中间件、服务端。服务端可以是单个服务器也可以是分布式服务器集群。服务端可以包括至少一个实例、缓存服务和数据库。用户通过用户终端发送业务请求,业务请求可以是任意可能的请求,比如用户在活动界面对任意活动产品的购买请求。用户的业务请求可以是发送到消息中间件进行排队,由消息中间件发送给服务端。服务端接收到业务请求后,可以提取入参,还可以记录该业务请求的请求时间,根据入参确定该业务请求对应的唯一标识,也即该业务请求对应的数据指纹,对数据指纹进行分级幂等校验处理,获得第一校验结果,分级幂等校验为基于缓存的幂等校验,可以包括至少两级幂等校验,具体来说,比如可以包括实例本地缓存幂等校验(也即实例本地缓存校验)和缓存服务幂等校验(也即缓存服务校验),实例本地缓存校验即查询实例本地缓存中是否已缓存该数据指纹,实例是指实现某一功能微服务的机器(可以为实体机也可以是虚拟机)。缓存服务校验是示例本地缓存校验的升级校验,即缓存服务监控实例,当某个实例本地缓存校验通过后,再进行缓存服务校验,即缓存服务可以确定其他实例是否缓存有该数据指纹。若有任意一个实例已经缓存有该数据指纹,且缓存状态为完成,则表示该业务请求已被处理过,第一校验结果为失败,可以结束该业务请求,若需要返回落库执行结果,也可以从相应的缓存中获取落库执行结果返回。若任意的实例中都没有缓存有该数据指纹,则表示该业务请求还未被处理过,则第一校验结果为成功(或称通过),则可以根据该业务请求进行业务处理,比如对数据进行组装和处理后,提交到事务方法进行落库。基于业务请求的数据指纹进行分级幂等校验,可以有效拦截调用的进一步穿透,层层递进式的校验,既保证高并发的性能,又保证调用的幂等性。可选地,在落库时可以再进行数据库层面的终级幂等校验,进一步保证绝对幂等性。

可选地,可以是基于分布式集群及微服务实现上述方法,各实例可以是具有相同或不同服务功能的服务器,业务请求被分发到相应的实例(集群中具有相应服务功能的服务器),比如第一实例,在第一实例中进行数据指纹提取及实例本地缓存校验,校验通过后,缓存服务校验可以由具有相应服务功能的服务器(可以称为缓存服务器)实现,数据指纹发送到缓存服务器,缓存服务器判断其他实例(可以是与第一实例具有相同功能的实例)是否处理过该业务请求,即是否缓存有该数据指纹。

可选地,也可以是基于容器或虚拟机等技术在一个服务器中实现上述方法。

需要说明的是,本发明实施例中涉及的数据指纹即指唯一标识,后续不再赘述。

此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。

下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。

本发明一实施例提供一种业务的处理方法,用于需要幂等校验的业务处理过程。本实施例的执行主体为业务的处理装置,该装置可以设置在服务器中或者设置在服务器集群中。

如图2所示,为本实施例提供的业务的处理方法的流程示意图,该方法包括:

步骤101,接收业务请求,业务请求包括入参。

具体的,业务请求可以是任意可能的请求,比如用户在活动界面对任意活动产品的购买请求。用户的业务请求可以是发送到消息中间件进行排队,由消息中间件发送给服务端。服务端接收到业务请求后,可以提取入参,还可以记录该业务请求的请求时间。入参可以是指定参数也可以是数据包,具体可以根据实际需求设置。

步骤102,根据入参,确定业务请求对应的唯一标识。

具体的,提取入参后,可以根据入参确定该业务请求对应的唯一标识,也即数据指纹,比如可以通过入参提取一个唯一标识。

示例性的,数据指纹可以是入参的MD5校验码,也可以是入参的联合哈希码,还可以是入参中的某个特定参数,比如订单号等,只要是能够唯一标识一个调用即可,调用是指响应该业务请求需要调用接口来实现。

步骤103,对唯一标识进行分级幂等校验处理,获得第一校验结果,分级幂等校验包括至少两级幂等校验。

其中,分级幂等校验为基于缓存的幂等校验。

具体的,在确定了数据指纹后,则可以对数据指纹进行分级幂等校验,实质即基于数据指纹对该业务请求进行分级幂等校验,分级幂等校验至少包括两级幂等校验,分级幂等校验为基于缓存的幂等校验,具体来说可以包括实例本地缓存幂等校验(也即实例本地缓存校验)和缓存服务幂等校验(也即缓存服务校验),实例本地缓存校验即查询实例本地缓存中是否已缓存该数据指纹,实例是指实现某一功能微服务的机器(可以为实体机也可以是虚拟机)。缓存服务校验是示例本地缓存校验的升级校验,即缓存服务监控实例,当某个实例本地缓存校验通过后,再进行缓存服务校验,即缓存服务可以确定其他实例是否缓存有该数据指纹。若有任意一个实例已经缓存有该数据指纹,且缓存状态为完成,则表示该业务请求已被处理过,第一校验结果为失败,可以结束该业务请求,若需要返回落库执行结果,也可以从相应的缓存中获取落库执行结果返回。若任意的实例中都没有缓存有该数据指纹,则表示该业务请求还未被处理过,则第一校验结果为成功(或称通过)。

步骤104,若第一校验结果为通过,则根据业务请求进行业务处理,获得待落库数据。

具体的,若第一校验结果为同,则可以进行相应的业务处理,比如对数据进行组装和处理后,获得待落库数据,可以提交到事务方法进行落库。

步骤105,对待落库数据进行落库处理。

具体的,在获得待落库数据后,可以提交到事务方法进行落库。

可选地,在落库时可以再进行数据库层面的终级幂等校验,进一步保证幂等性,比如基于数据库索引表的幂等校验、基于唯一键的幂等校验等。

本实施例提供的业务的处理方法,通过基于业务请求的数据指纹进行分级幂等校验,可以有效拦截调用的进一步穿透,层层递进式的校验,既保证高并发的性能,又保证调用的幂等性。

本发明另一实施例对上述实施例提供的方法做进一步补充说明。

如图3所示,为本实施例提供的业务的处理方法的流程示意图。

作为一种可实施的方式,在上述实施例的基础上,可选地,基于数据指纹进行分级幂等校验处理,获得第一校验结果,具体包括:

步骤2011,对唯一标识进行第一级幂等校验,获得第二校验结果,第一级幂等校验为实例本地缓存校验。

具体的,实例本地缓存校验即查询实例本地缓存中是否已缓存该数据指纹,若已缓存,则表示该实例已处理过该业务请求。

示例性的,如图4所示,为本实施例提供的多实例场景示意图。消息中间件中的消息(即业务请求)根据具体的需求被分发到相应的实例,在实例中进行实例本地缓存校验,获得第二校验结果。若该业务请求之前已被该实例处理过,则该实例本地应缓存有该业务请求对应的数据指纹,若未被该实例处理过,则后续会将该数据指纹在该实例进行缓存,以便后续相同的业务请求再发起时,可以通过幂等校验进行拦截。具体缓存的时机可以根据实际需求设置。

步骤2012,若第二校验结果为通过,对唯一标识进行第二级幂等校验,获得第一校验结果,第二级幂等校验为缓存服务校验。

具体的,若第二校验结果通过,即响应该业务请求的实例(比如称为第一实例)未处理过该业务请求。由于可能会有多个与第一实例相同功能的实例(可称为其他实例),为了保证幂等性,则可以对数据指纹再进行第二级幂等校验,获得第一校验结果。第二级幂等校验即为缓存服务校验,缓存服务监控各实例,在确定第一实例的实例本地缓存校验通过后,还需要确定是否有其他实例处理过该业务请求,缓存服务校验即监控其他实例是否处理过该业务请求,若其他实例也都没有处理过该业务请求,则可以确定第一校验结果为通过,若有任意其他实例处理过该业务请求,则本次业务请求即为重复请求,则需要拦截。缓存服务对于各其他实例的判断过程与上述第一实例的处理过程类似,在此不再赘述。对于一个实例是否处理过某业务请求的具体判断方式为,判断该业务请求对应的数据指纹在该实例中是否有缓存,以及缓存状态。在每次进行业务处理,各实例均维护有个业务请求的数据指纹以及缓存状态(示例本地缓存状态)。各缓存服务也维护有数据指纹及缓存状态(缓存服务缓存状态)。

可选地,对数据指纹进行第一级幂等校验,获得第二校验结果,包括:

步骤20111,将唯一标识与响应业务请求的第一实例的本地缓存进行匹配。

步骤20112,若第一实例的本地缓存中存在唯一标识,且缓存状态为完成,则第二校验结果为失败。

步骤20113,若第一实例的本地缓存中不存在唯一标识,则第二校验结果为通过。

可选地,该方法还包括:

步骤2021,若第一实例的本地缓存中存在唯一标识,且缓存状态为锁定,则判断是否需要返回落库执行结果;

步骤2022,若需要返回落库执行结果,则进入自旋,等待落库执行结果并返回;若不需要返回落库执行结果,则结束业务请求。

具体的,在缓存中存在该业务请求对应的数据指纹的情况下,缓存状态可以包括完成和锁定,若缓存状态为完成表示该业务请求被处理过,若缓存状态为锁定,则表示该业务请求可能正在被处理,可以返回冲突,若该调用需要返回落库执行结果,则可以进入自旋,等待处理完毕至缓存状态变为完成,并返回落库执行结果。若不需要返回落库执行结果则可以直接结束该业务请求。

可选地,对数据指纹进行第二级幂等校验,获得第一校验结果,包括:

步骤2031,将唯一标识与其他实例的本地缓存进行匹配。

步骤2032,若已有任意一个其他实例的本地缓存中存在唯一标识,且缓存状态为完成,则第一校验结果为失败;若所有其他实例的本地缓存中均不存在唯一标识,则第一校验结果为通过。

可选地,该方法还包括:

步骤2041,若第二校验结果和/或第一校验结果为失败,则结束业务请求。

具体的,若第二校验结果失败,即表示实例本地缓存有该业务请求的数据指纹且缓存状态为完成,则可以直接结束该业务请求,不需要后续处理,若第二校验结果通过,第一校验结果失败,则表示其他实例中缓存有该数据指纹,且缓存状态为完成,则可以直接结束该业务请求。若需要返回落库执行结果,则可以直接获取已缓存的落库执行结果进行返回。也即对于需要返回落库执行结果的业务请求,在落库完成后可以将落库执行结果进行缓存,以便后续重复请求时,可以直接返回该落库执行结果。

可选地,第一校验结果通过,表示该业务请求不是重复请求,那么在校验通过后,需要将该业务请求对应的数据指纹进行实例本地缓存和缓存服务缓存,以便于后续的幂等校验。基于在缓存服务缓存业务请求的数据指纹,即对于各实例已处理过的业务请求的数据指纹在缓存服务中均有缓存,后续缓存服务校验时,可以基于缓存服务缓存的数据指纹情况及缓存状态来进行校验,无需再与其他实施例缓存进行匹配。具体可以根据实际需求设置。

可选地,根据业务请求进行业务处理之前,该方法还包括:

步骤2051,若第一校验结果为通过,采用异步处理方式分别将唯一标识进行实例本地缓存和缓存服务缓存,并更新实例本地缓存状态和缓存服务缓存状态为锁定。

具体的,第一校验结果通过,表示该业务请求不是重复请求,那么在校验通过后,需要将该业务请求对应的数据指纹进行实例本地缓存和缓存服务缓存,以便于后续的幂等校验。基于在缓存服务缓存业务请求的数据指纹,即对于各实例已处理过的业务请求的数据指纹在缓存服务中均有缓存,后续缓存服务校验时,可以基于缓存服务缓存的数据指纹情况及缓存状态来进行校验,无需再与其他实施例缓存进行匹配。为了避免在本次处理过程中有重复调用,在本次落库完成之前,需要更新缓存状态为锁定状态,即要更新实例本地缓存状态和缓存服务缓存状态均为锁定,在有重复调用到达时,可以根据缓存状态获知该调用正在处理中,可以结束重复调用。

相应的,根据业务请求进行业务处理,获得待落库数据,包括:

步骤2052,若实例本地缓存和缓存服务缓存均缓存成功,则根据业务请求进行业务处理,获得待落库数据。

相应的,该方法还包括:

步骤2061,在落库成功之后,更新唯一标识的缓存状态为完成;

步骤2062,若需要返回落库执行结果,则缓存落库执行结果。

具体的,为了便于确定校验结果,数据指纹的缓存状态可以包括完成和锁定两种状态,在落库完成后,更新数据指纹的缓存状态为完成,可以包括实例本地缓存状态和缓存服务缓存状态。在落库完成之前,缓存服务校验通过后,实例本地缓存状态和缓存服务缓存状态更新为锁定,以保证在缓存过程中并发情况下的有效缓存。具体来说,在缓存过程中,有可能存在一个实例上的多个线程或者多个实例同时进行缓存,期间缓存服务会只允许一个缓存成功,其他的则可以返回缓存冲突。实例本地缓存和缓存服务缓存只要有一个发生了冲突,校验过程则进入自旋状态,若两个全部缓存成功,则进入一下步。

可选地,对于需要缓存落库执行结果的情况,考虑到对内存的占用情况,若落库执行结果数据较大,还可以将落库执行结果直接存入对象存储,在索引表的结果字段中只存储一个映射地址即可。

作为另一种可实施的方式,在上述实施例的基础上,可选地,在接收业务请求之后,该方法还包括:

步骤2071,获取并记录业务请求的请求时间,请求时间用于判断唯一标识的缓存时间是否超时,以在缓存超时时对唯一标识进行删除。

具体的,由于缓存具有时效性,因此在创建缓存时,可以根据实际情况设置缓存的超时时间,而通常幂等校验场景,都是在极短时间内发生大量的调用,因此,缓存超时可以适当设置短些,而对于个别延迟调用的到来,可以结合最兜底的数据库层面的终级幂等校验来保证调用的绝对幂等性。因此缓存超时可以综合考虑应用场景来设置,保证数据库层面终级校验的数据量在可控范围内。

作为另一种可实施的方式,在上述实施例的基础上,可选地,在获得待落库数据之后,该方法还包括:

步骤2081,基于待落库数据进行终级幂等校验,获得第三校验结果。

相应的,对待落库数据进行落库处理,包括:

步骤2082,若第三校验结果为通过,将待落库数据进行落库。

具体的,可以通过数据的唯一索引(或称唯一键)或者数据库层面的索引表,对待落库数据进行终级幂等校验,获得第三校验结果,当第三校验结果通过,则可以将待落库数据进行落库,并可以获得落库执行结果。若第三校验结果为失败则落库失败,结束该业务请求。

示例性的,对于采用索引表的形式来保证唯一性,应该先维护索引表,若冲突则直接回滚事务并结束,从而可以缩短对事务的占用时间。

基于数据的唯一索引(或称唯一键)或者数据库层面的索引表,对待落库数据进行终级幂等校验的具体操作原理为现有技术,在此不再赘述。

作为一种示例性的实施方式,如图5所示,为本实施例提供的幂等校验整体流程框图。该整体流程具体如下:

1、当一个调用(或称消息,亦或业务请求)到达后,可以通过入参提取该调用的唯一标识(即数据指纹),并获取当前的时间戳,作为后续缓存有效期和数据处理与存储的基础时间。

2、实例缓存校验

在获得数据指纹后,可以直接用该数据指纹通过实例的本地缓存进行幂等校验(即第一级幂等校验),发现实例缓存(即实例本地缓存)中存在并且缓存状态为完成,则本次调用可以直接结束。从而拦截了本次调用对数据库的进一步穿透。

若实例缓存中存在且缓存状态为锁定,说明该调用正在本实例中处理,若需要得到结果(即落库执行结果),则进入自旋状态,否则可以直接结束本次调用。

若实例缓存中不存在,则进入下一步。

3、缓存服务校验

若实例缓存中不存在,还需要校验其他实例是否已经处理或者在处理中。若缓存服务校验结果为不存在,在进入下一步。

4、异步缓存阶段

本阶段对本次调用进行实例本地缓存和缓存服务缓存,优选采用异步处理,也可以根据实际需求选择采用同步还是异步。

在缓存的过程中,有可能存在一个实例上的多个线程或者多个实例同时进行缓存,期间缓存服务会只允许一个缓存成功,其他的则可以返回缓存冲突。具体可以通过设置缓存状态为锁定(即缓存状态为进行中)来实现。实例本地缓存和缓存服务缓存只要有一个发生了冲突,校验过程则进入自旋状态,若两个全部缓存成功,则进入一下步。

对于需要缓存落库执行结果的情况,考虑到对内存的占用情况,若落库执行结果数据较大,还可以将落库执行结果直接存入对象存储,在索引表的结果字段中只存储一个映射地址即可。

由于缓存具有时效性,因此在创建缓存时,可以根据实际情况设置缓存的超时时间,而通常幂等校验场景,都是在极短时间内发生大量的调用,因此,缓存超时可以适当设置短些,而对于个别延迟调用的到来,可以结合最兜底的数据库层面的终级幂等校验来保证调用的绝对幂等性。因此缓存超时可以综合考虑应用场景来设置,保证数据库层面终级校验的数据量在可控范围内。

5、处理数据

在缓存服务校验通过后,根据具体业务请求的入参提取数据或者调用接口,对数据进行组装和处理后,获得待落库数据,提交到事务方法。

6、数据落库

可以通过数据的唯一索引或者数据库层面的索引表,彻底保证数据幂等性。比如采用索引表的形式来保证唯一性,应该先维护索引表,若冲突则可以直接回滚事务并结束,从而缩短对事务的占用时间。

7、更新缓存状态

在落库完成后,需要更新缓存状态为完成,即将实例本地缓存状态和缓存服务缓存状态从锁定更新为完成,若有需要,还应缓存落库执行结果,以便其他的重复调用可以拿到结果并结束调用,而不会再次进行业务处理。

需要说明的是,对于上述的调用进入自旋状态,只是为了最终拿到落库执行结果,若调用不存在落库执行结果的话,可以直接结束调用。

示例性的,如表1所示,为本实施例提供的索引表的字段定义示例。

表1

需要说明的是,本实施例中各可实施的方式可以单独实施,也可以在不冲突的情况下以任意组合方式结合实施本发明不做限定。

本实施例提供的业务的处理方法,通过实例本地缓存校验和缓存服务校验,结合数据库终级校验,有效拦截调用的进一步穿透,层层递进式校验,既有效保证高并发场景下性能,又保证了调用的绝对幂等性。通过自旋状态,有效保证缓存过程中的并发情况的有效正确执行。

本发明再一实施例提供一种业务的处理装置,用于执行上述实施例的方法。

如图6所示,为本实施例提供的业务的处理装置的结构示意图。该业务的处理装置30包括接收模块31、确定模块32、校验模块33、处理模块34和执行模块35。

其中,接收模块,用于接收业务请求,业务请求包括入参;确定模块,用于根据入参,确定业务请求对应的唯一标识;校验模块,用于对唯一标识进行分级幂等校验处理,获得第一校验结果,分级幂等校验包括至少两级幂等校验;处理模块,用于若第一校验结果为通过,则根据业务请求进行业务处理,获得待落库数据;执行模块,用于对待落库数据进行落库处理。

关于本实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

需要说明的是,对于基于分布式服务器集群实现上述方法的情况,上述各模块可以根据功能划分为不同的子模块设置在集群中不同的服务器中,比如校验模块,对于实例本地缓存校验部分可以第一校验子模块设置在各实例中,对于缓存服务校验部分可以第二校验子模块设置在缓存服务器中,具体可以根据实际需求设置,本发明实施例不做限定。

根据本实施例提供的业务的处理装置,通过基于业务请求的唯一标识进行分级幂等校验,可以有效拦截调用的进一步穿透,层层递进式的校验,既保证高并发的性能,又保证调用的幂等性。

本发明又一实施例对上述实施例提供的装置做进一步补充说明。

作为一种可实施的方式,在上述实施例的基础上,可选地,校验模块,具体用于:

对唯一标识进行第一级幂等校验,获得第二校验结果,第一级幂等校验为实例本地缓存校验;

若第二校验结果为通过,对唯一标识进行第二级幂等校验,获得第一校验结果,第二级幂等校验为缓存服务校验。

可选地,校验模块,具体用于:

将唯一标识与响应业务请求的第一实例的本地缓存进行匹配;

若第一实例的本地缓存中存在唯一标识,且缓存状态为完成,则第二校验结果为失败;

若第一实例的本地缓存中不存在唯一标识,则第二校验结果为通过。

可选地,校验模块,还用于:

方法还包括:

若第一实例的本地缓存中存在唯一标识,且缓存状态为锁定,则判断是否需要返回落库执行结果;

若需要返回落库执行结果,则进入自旋,等待落库执行结果并返回;

若不需要返回落库执行结果,则结束业务请求。

可选地,校验模块,具体用于:

将唯一标识与其他实例的本地缓存进行匹配,若已有任意一个其他实例的本地缓存中存在唯一标识,且缓存状态为完成,则第一校验结果为失败;

若所有其他实例的本地缓存中均不存在唯一标识,则第一校验结果为通过。

可选地,校验模块,还用于:

若第二校验结果和/或第一校验结果为失败,则结束业务请求。

可选地,校验模块,还用于:若第一校验结果为通过,采用异步处理方式分别将唯一标识进行实例本地缓存和缓存服务缓存,并更新实例本地缓存状态和缓存服务缓存状态为锁定;

处理模块,具体用于:若实例本地缓存和缓存服务缓存均缓存成功,则根据业务请求进行业务处理,获得待落库数据;

处理模块,还用于:

在落库成功之后,更新唯一标识的缓存状态为完成;

若需要返回落库执行结果,则缓存落库执行结果。

作为另一种可实施的方式,在上述实施例的基础上,可选地,在接收业务请求之后,确定模块,还用于获取并记录业务请求的请求时间,请求时间用于判断唯一标识的缓存时间是否超时,以在缓存超时时对唯一标识进行删除。

作为另一种可实施的方式,在上述实施例的基础上,可选地,执行模块,还用于基于待落库数据进行终级幂等校验,获得第三校验结果;

执行模块,具体用于:

若第三校验结果为通过,将待落库数据进行落库。

关于本实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

需要说明的是,本实施例中各可实施的方式可以单独实施,也可以在不冲突的情况下以任意组合方式结合实施本发明不做限定。

根据本实施例的业务的处理装置,通过实例本地缓存校验和缓存服务校验,结合数据库终级校验,有效拦截调用的进一步穿透,层层递进式校验,既有效保证高并发场景下性能,又保证了调用的绝对幂等性。通过自旋状态,有效保证缓存过程中的并发情况的有效正确执行。

本发明再一实施例提供一种电子设备,用于执行上述实施例提供的方法。

如图7所示,为本实施例提供的电子设备的结构示意图。该电子设备50包括:至少一个处理器51和存储器52;

存储器存储计算机执行指令;至少一个处理器执行存储器存储的计算机执行指令,使得至少一个处理器执行如上任一实施例提供的方法。

根据本实施例的电子设备,通过实例本地缓存校验和缓存服务校验,结合数据库终级校验,有效拦截调用的进一步穿透,层层递进式校验,既有效保证高并发场景下性能,又保证了调用的绝对幂等性。通过自旋状态,有效保证缓存过程中的并发情况的有效正确执行。

在示例性实施例中,如图8所示,为本实施例提供的一种电子设备的示例性框图,该电子设备800可以是服务器。

电子设备800可以包括以下一个或多个组件:处理组件801,存储器802,电源组件803,通信组件804,等等。

处理组件801通常控制电子设备800的整体操作。处理组件801可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件801可以包括一个或多个模块,便于处理组件801和其他组件之间的交互。

存储器802被配置为存储各种类型的数据以支持在电子设备800的操作。这些数据的示例包括用于在电子设备800上操作的任何应用程序或方法的指令。存储器802可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

电源组件803为电子设备800的各种组件提供电力。电源组件803可以包括电源管理系统,一个或多个电源,及其他与为电子设备800生成、管理和分配电力相关联的组件。

通信组件804被配置为便于电子设备800和其他设备之间有线或无线方式的通信。

在示例性实施例中,电子设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器802,上述指令可由电子设备800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

本发明又一实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当处理器执行计算机执行指令时,实现如上任一实施例提供的方法。

根据本实施例的计算机可读存储介质,通过实例本地缓存校验和缓存服务校验,结合数据库终级校验,有效拦截调用的进一步穿透,层层递进式校验,既有效保证高并发场景下性能,又保证了调用的绝对幂等性。通过自旋状态,有效保证缓存过程中的并发情况的有效正确执行。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

25页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种信息查询方法、装置、设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!