分布式并发交易校验方法、装置和计算机存储介质与流程

文档序号:16672384发布日期:2019-01-18 23:40阅读:222来源:国知局
分布式并发交易校验方法、装置和计算机存储介质与流程

本发明涉及中间件技术领域,尤其涉及一种分布式并发交易校验方法、装置和计算机存储介质。



背景技术:

随着网购的流行,越来越多的人倾向于在网上购物,既方便,又比较实惠,且质量也有一定的保障。比如:唯品会,深受大部分女性的喜爱。由于购物网站每天的访问量非常大,当用户在同一时刻或者短时间内重复触发支付或退还操作,或者系统异常导致同一时刻或短时间内触发重试机制,可能会造成并发情况下,因为数据库事务可见性不同出现无法预知的系统异常,并有可能造成数据错乱,对系统的稳定性有着极大的影响。

目前,常用的解决方案有如下几种:

每个请求带一个本次请求唯一的标识token,通过校验token来判断该请求是否有效。该方案依赖对接的业务系统,且针对不同的对接业务系统需要做相应的调整,如此,不具备通用性,增加开发成本而且浪费宝贵的网络io资源。

在每个请求进来时给db(关系型数据库)中插入一条当前操作记录,当其他请求进来时会先去db校验该用户的该行为的状态,从而确定本次请求是否应该执行。该方案不足之处在于大部分db在应对海量请求的情况下会因为锁争用导致吞吐量表现一般,而且随着数据量的增多执行效率变的更低。



技术实现要素:

本发明的主要目的在于提供一种分布式并发交易校验方法、装置和计算机存储介质,旨在解决传统的分布式并发交易校验存在不可移植性且效率低的技术问题。

为实现上述目的,本发明提供一种分布式并发交易校验方法,所述分布式并发交易校验方法包括步骤:

在检测到并发交易的待校验请求时,基于所述待校验请求所属的服务选择对应的校验维度策略,并获取所述服务的参数用以设置所述待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发;

将所述待校验请求写入数据库,并返回结果值;

若所述结果值为第一预设值,则判定校验通过,将预设时间写入所述数据库作为所述待校验请求的最大锁定时间并响应所述请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间。

优选地,所述校验维度策略为不同的接入服务提供不同的校验维度策略模板。

优选地,所述数据库为redis数据库。

优选地,所述将所述待校验请求写入数据库,并返回结果值的步骤包括:

调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入所述redis数据库;

若所述redis数据库没有所述交易类型对应的关键字段,则写入数据成功并返回所述第一预设值;

若所述redis数据库存在所述交易类型对应的关键字段,则写入数据失败并返回所述第二预设值。

优选地,所述分布式并发交易校验方法还包括:

若所述结果值为第二预设值,则获取所述待校验请求写入redis数据库的时间点和所述redis数据库已存在的请求记录的写入时间点之间的时间差,并根据所述时间差确定待执行的操作。

优选地,所述获取所述待校验请求写入redis数据库的时间点和所述redis数据库已存在的请求记录的写入时间点之间的时间差,并根据所述时间差确定待执行的操作的步骤包括:

获取所述redis数据库已存在的所述交易类型对应的关键字段的写入时间点,并与所述当前时间点比较得到时间差;

在所述时间差大于所述预设时间时,删除所述redis数据库已存在的所述交易类型对应的关键字段相关的请求记录,并返回执行所述调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入redis数据库的步骤;

在所述时间差小于所述预设时间时,返回执行所述调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入redis数据库的步骤。

优选地,所述分布式并发交易校验方法还包括:

在检测到所述待检验请求已响应完成时,删除所述数据库中所述待校验请求相关的请求记录。

此外,为实现上述目的,本发明还提供一种分布式并发交易校验装置,所述分布式并发交易校验装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如以上所述的分布式并发交易校验方法的步骤。

此外,为实现上述目的,本发明还提供一种计算机存储介质,所述计算机存储介质上存储有分布式并发交易校验程序,所述分布式并发交易校验程序被所述处理器执行时实现如以上所述的分布式并发交易校验方法的步骤。所述计算机存储介质作为通用中间件组件与各业务系统接口对接,实现分布式并发交易校验。

本发明提出的分布式并发交易校验方法、装置和计算机存储介质,在检测到并发交易的待校验请求时,基于待校验请求所属的服务选择对应的校验维度策略,并获取该服务的参数用以设置待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发,然后将待校验请求写入数据库,并返回结果值,若结果值为第一预设值,则判定校验通过,将预设时间写入数据库作为待校验请求的最大锁定时间并响应该请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间,实现不需与业务系统交互且高效校验并发交易。

附图说明

图1为本发明实施例方案涉及的硬件运行环境的终端结构示意图;

图2为本发明分布式并发交易校验方法第一实施例的流程示意图;

图3为图2中将所述待校验请求写入数据库并返回结果值的步骤的细化流程示意图;

图4为本发明分布式并发交易校验方法第二实施例的流程示意图;

图5为本发明分布式并发交易校验方法第三实施例的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例的主要解决方案是:

在检测到并发交易的待校验请求时,基于所述待校验请求所属的服务选择对应的校验维度策略,并获取所述服务的参数用以设置所述待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发;

将所述待校验请求写入数据库,并返回结果值;

若所述结果值为第一预设值,则判定校验通过,将预设时间写入所述数据库作为所述待校验请求的最大锁定时间并响应所述请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间。

由于现有技术中,校验并发交易需要与对接的业务系统进行交互,且在应对海量校验请求时,效率很低。

本发明提供一种解决方案,在检测到并发交易的待校验请求时,基于待校验请求所属的服务选择对应的校验维度策略,并获取该服务的参数用以设置待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发,然后将待校验请求写入数据库,并返回结果值,若结果值为第一预设值,则判定校验通过,将预设时间写入数据库作为待校验请求的最大锁定时间并响应该请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间,实现不需与业务系统交互且高效校验并发交易。

如图1所示,图1是本发明实施例方案涉及的硬件运行环境的终端结构示意图。

本发明实施例终端是pc或服务器。

如图1所示,该终端可以包括:处理器1001,例如cpu,网络接口1004、用户接口1003、存储器1005和通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及分布式并发交易校验程序。

在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的分布式并发交易校验程序,并执行以下操作:

在检测到并发交易的待校验请求时,基于所述待校验请求所属的服务选择对应的校验维度策略,并获取所述服务的参数用以设置所述待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发;

将所述待校验请求写入数据库,并返回结果值;

若所述结果值为第一预设值,则判定校验通过,将预设时间写入所述数据库作为所述待校验请求的最大锁定时间并响应所述请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间。

进一步地,处理器1001可以调用存储器1005中存储的分布式并发交易校验程序,还执行以下操作:

所述校验维度策略为不同的接入服务提供不同的校验维度策略模板。

进一步地,处理器1001可以调用存储器1005中存储的分布式并发交易校验程序,还执行以下操作:

所述数据库为redis数据库。

进一步地,处理器1001可以调用存储器1005中存储的分布式并发交易校验程序,还执行以下操作:

调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入所述redis数据库;

若所述redis数据库没有所述交易类型对应的关键字段,则写入数据成功并返回所述第一预设值;

若所述redis数据库存在所述交易类型对应的关键字段,则写入数据失败并返回所述第二预设值。

进一步地,处理器1001可以调用存储器1005中存储的分布式并发交易校验程序,还执行以下操作:

若所述结果值为第二预设值,则获取所述待校验请求写入redis数据库的时间点和所述redis数据库已存在的请求记录的写入时间点之间的时间差,并根据所述时间差确定待执行的操作。

进一步地,处理器1001可以调用存储器1005中存储的分布式并发交易校验程序,还执行以下操作:

获取所述redis数据库已存在的所述交易类型对应的关键字段的写入时间点,并与所述当前时间点比较得到时间差;

在所述时间差大于所述预设时间时,删除所述redis数据库已存在的所述交易类型对应的关键字段相关的请求记录,并返回执行所述调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入redis数据库的步骤;

在所述时间差小于所述预设时间时,返回执行所述调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入redis数据库的步骤。

进一步地,处理器1001可以调用存储器1005中存储的分布式并发交易校验程序,还执行以下操作:

在检测到所述待检验请求已响应完成时,删除所述数据库中所述待校验请求相关的请求记录。

参照图2,图2为本发明分布式并发交易校验方法第一实施例的流程示意图;

本实施例提出一种分布式并发交易校验方法,该分布式并发交易校验方法包括步骤:

步骤s10,在检测到并发交易的待校验请求时,基于所述待校验请求所属的服务选择对应的校验维度策略,并获取所述服务的参数用以设置所述待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发;

本发明是一种校验分布式系统各个节点上的并发交易请求是否可被响应的方法,以避免响应相同的请求,造成数据混乱或系统异常。其优点在于不需要跟各对接的业务系统进行业务交互,移植性强,方便做成通用组件支持各方业务,对各业务系统来说,该组件是透明的。为便于理解,将应用本发明的组件定义为服务端。在该服务端检测到并发交易的请求时,比如,交易类型为支付操作,在同一时刻或者短时间内某个节点下发同一个用户的多次支付操作请求,此时,需要通过校验以避免响应所有的这些支付操作请求。

本实施例中,服务端提供校验维度策略,该校验维度策略可以具体理解为是为不同的接入服务提供的不同的校验维度策略模板。在服务端检测到并发交易的待校验请求时,基于待校验请求所属的服务选择对应的校验维度策略,再获取该服务的参数用以具体设置对应的待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道。如此,可以灵活配置校验对象,交易类型,交易渠道的各种策略组合。例如:可以设置的一个策略为,不允许同一个用户同时或短时间内通过手机端和电脑端支付同一个订单。此外,该校验维度策略里也可设置校验时间或其他。可以理解的是,该策略相当于一个规则,涉及的参数可以根据业务需求进行变更,或增加或减少。校验的维度可以为用户,也可以为业务层。

步骤s20,将所述待校验请求写入数据库,并返回结果值;

图3为图2中步骤s20的细化流程示意图;

步骤s21,调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入所述redis数据库;

步骤s22,判断所述redis数据库是否存在所述交易类型对应的关键字段;

步骤s23,若所述redis数据库没有所述交易类型对应的关键字段,则写入数据成功并返回所述第一预设值;

步骤s24,若所述redis数据库存在所述交易类型对应的关键字段,则写入数据失败并返回所述第二预设值。

本实施例中,基于redis数据库实现分布式系统下的并发交易校验,redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。使用redis做数据存储,吞吐量大,在面对海量请求的情况下表现良好,通常单机就可以支持10万/秒的请求。setnx是setifnotexists的简称,主要有两个参数setnx(key,value),setnx方法是redis的原子操作,如果key不存在,则设置当前key成功,返回1;如果当前key已经存在,则设置当前key失败,返回0。概括来说,setnx方法做了两个动作,一个是将key和value写入redis数据库,另一个是返回结果值。此处,key为待校验请求中标识交易类型的关键字段,value为写操作的当前时间点,1为第一预设值,0为第二预设值。需要说明的是,通过key可以判定一个待校验请求与其他待校验请求是否为同一个请求。

步骤s30,若所述结果值为第一预设值,则判定校验通过,将预设时间写入所述数据库作为所述待校验请求的最大锁定时间并响应所述请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间。

本实施例中,设置待校验请求的最大锁定时间,可以理解为若响应待校验请求的时间超过了这个时间,则待校验请求就会被无效,是为了防止资源永远被占用的情况出现。在往数据库成功写入数据后,判定校验通过,然后将预设的待校验请求的最大锁定时间写入数据库作为该待校验请求的最大锁定时间并响应所述请求。此处的预设时间根据业务的具体情况而定。

本实施例提出的分布式并发交易校验方法,在检测到并发交易的待校验请求时,基于待校验请求所属的服务选择对应的校验维度策略,并获取该服务的参数用以设置待校验请求的校验维度策略,其中,所述校验维度策略的参数包括校验对象、交易类型、交易渠道,所述并发交易由分布式系统的各个节点下发,然后将待校验请求写入数据库,并返回结果值,若结果值为第一预设值,则判定校验通过,将预设时间写入数据库作为待校验请求的最大锁定时间并响应该请求,其中,所述预设时间为预设的所述待校验请求的最大锁定时间,实现不需与业务系统交互且高效校验并发交易。

进一步地,参照图4,基于第一实施例提出本发明分布式并发交易校验方法第二实施例,在本实施例中,所述分布式并发交易校验方法还包括:

步骤s40,若所述结果值为第二预设值,则获取所述redis数据库已存在的所述交易类型对应的关键字段的写入时间点,并与所述当前时间点比较得到时间差;

步骤s50,判断所述时间差是否小于所述预设时间;

步骤s60,在所述时间差大于或等于所述预设时间时,删除所述redis数据库已存在的所述交易类型对应的关键字段相关的请求记录,并返回执行所述调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入redis数据库的步骤;

步骤s21,在所述时间差小于所述预设时间时,返回执行所述调用setnx方法将所述待校验请求中所述交易类型对应的关键字段以及当前时间点写入redis数据库的步骤。

本实施例中,介绍往redis数据库写入数据失败的情况,此时,数据库已存在key和value,已存在的key与当前写入数据库中的key是一样的。这里先获取已存在的key对应的value,以及当前的时间点,求得两者的时间差,再将该时间差与预设时间比较,若时间差小于预设时间,说明已存在的key相关的校验请求还未到达最大锁定时间,此时,再次执行往该数据库写入key和value的操作,其目的相当于再等一段时间,等已存在的请求校验通过或被无效删除。若时间差大于或等于预设时间,说明已存在的key相关的校验请求已到达最大锁定时间,此时,先删除该超时的请求记录,然后执行往该数据库写入key和value的操作。

本实施例公开的技术方案中,通过将预设的最大锁定时间与相邻两条数据记录写入数据库的时间差进行比较,可以知道已存在的校验请求是否已超时,从而确定对应的操作,如此,可以保证在数据库中的数据不冗余的情况下,快速高效的写入新的数据,以达到利用redis数据库的特点高效校验并发交易的效果。

进一步地,参照图5,基于第一至第二实施例任一实施例提出本发明分布式并发交易校验方法第三实施例,在本实施例中,所述分布式并发交易校验方法还包括:

步骤s70,在检测到所述待检验请求已响应完成时,删除所述数据库中所述待校验请求相关的请求记录。

本实施例公开的技术方案中,在待校验请求校验通过且该请求响应完成时,删除数据库中该请求相关的记录数据,如此,释放了占用的数据库资源,同时,若后续有相同的请求进来,则可以直接判定该校验请求通过,加快了校验流程,提升了校验速度。

此外,本发明实施例还提出一种分布式并发交易校验装置,所述分布式并发交易校验装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上实施例所述的分布式并发交易校验方法的步骤。

此外,本发明实施例还提出一种计算机存储介质,所述计算机存储介质上存储有分布式并发交易校验程序,所述分布式并发交易校验程序被所述处理器执行时实现如上实施例所述的分布式并发交易校验方法的步骤。所述计算机存储介质作为通用中间件组件与各业务系统接口对接,实现分布式并发交易校验。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,云端服务器,空调器,或者网络设备等)执行本发明各个实施例的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1