掌桥专利:专业的专利平台
掌桥专利
首页

一种避免竞价异常结束的网络竞价系统及方法

文献发布时间:2023-06-19 18:29:06


一种避免竞价异常结束的网络竞价系统及方法

技术领域

本发明涉及网络竞价技术领域,具体地涉及一种避免竞价异常结束的网络竞价系统及方法。

背景技术

现实世界的竞价(拍卖)场景中,在一位竞买人出价后,拍卖师在校验是有效报价后,会留一段时间给其他竞买人思考是否加价,在这个时间到达之前,如果有人出价,将继续延续一个周期。时间到达,拍卖师落锤宣告竞价结束。但是在极端情况下,可能在拍卖师落锤的过程出现报价,由于拍卖师无法终止落锤,导致这成为最后一手报价,而没有延续一个周期,与竞价规则不一致,即产生了竞价异常结束的事故。

网络竞价和现实的竞价过程十分类似,不过是改为由计算机系统完成拍卖师的工作。由于计算机系统处理数据的过程也存在一定的处理时间,因而也会发生此种事故。

具体而言,在目前的网络竞价活动中,为了让竞价标的(拍品)的价值得以充分体现和增值,通常设置了“自由报价期”和“限时报价期”。其中,自由报价期是所有竞买人都可以自由报价的时段,一般为固定的一段相对长的时间。自由报价期结束后立即进入限时报价期,区别于自由报价期,限时报价期一般周期较短,例如60秒,在此期间有竞买人报价,且系统校验该报价为有效报价,则开始新的一轮限时报价期,以此循环,直到限时报价期内无人做出新的有效报价,则竞价结束,确定最高报价人。

导致竞价异常结束事故的问题就在于限时报价期的循环和结束,在此过程中,系统对每一手报价都需要进行充分的“校验”,以验证竞买人、报价以及竞价标的状态等符合要求,通过全部校验后,才能认为该次报价是有效报价而进行重新记录最高报价、锁定当前报价人保证金、释放前一报价人保证金、重新创建定时器等操作以开始新一轮限时报价期。此过程一般都采用定时器执行,而不是人工触发,并且,定时器的撤销操作由于存在执行时间而不能保证撤销成功,因此一般定时器设计为只新增创建而不撤销。如此一来,若恰好在一次限时报价期结束前若干毫秒时有竞买人报价,系统随即开始校验操作;而在校验并重新记录最高报价后、重新创建定时器前,该次限时报价期已结束,系统立即开始进行“结束”操作,而此结束过程操作更简单、执行时间更短,进而如同现实竞价中“落锤”一样,竞价的结束会早于新一轮限时报价期的开始,即出现前述的异常结束事故。

实际案例中,随着竞价标的数量、场次增长,已累计发生过多次此种事故,并且出现过竞买人利用此种漏洞竞得竞价标的的案例,严重影响竞价规则的公平有效以及竞价标的的保值增值,因而此种现象已成为本行业亟待解决的重要难题。目前一般采用优化缩短系统进行校验等操作的执行时间的方式来进行规避,但由于执行时间并不可能理想地缩短为零,因此现有方式只能降低此种事故出现的概率,而无法彻底解决。

发明内容

本发明所要解决的技术问题在于:提供一种避免竞价异常结束的网络竞价系统及方法,以从根本上杜绝在限时报价期即将结束的一刻报价导致竞价异常结束的事故,确保网络竞价业务公平、安全、可控地进行。

依据本发明的技术方案,本发明提供了一种避免竞价异常结束的网络竞价系统,包括前台、报价锁模块、校验模块、限时结束锁模块、写报价事务模块、定时器模块以及客户端,其中,

客户端:与前台通信连接,用于进行查看和报价;

前台:位于竞价系统的前端,具有多线程,每一线程用于进行一条报价的传输和处理;

报价锁模块:连接于前台之后,用于使报价获取或释放报价锁;

校验模块:连接于报价锁模块之后,用于对获取了报价锁的报价进行校验;

限时结束锁模块:连接于校验模块之后,用于使报价获取或释放限时结束锁;

写报价事务模块:连接于限时结束锁模块之后,用于根据获取了限时结束锁的报价进行写报价;

定时器模块:连接于写报价事务模块之后,用于在写报价成功后创建定时器,并将报价记录为该新创建的定时器的报价参数;

定时器模块中进一步包括:

定时单元:用于在定时器创建后等待一个限时报价期的时间周期,然后立即执行后续操作;

比较单元:用于获取竞价标的当前的最高报价并与该定时器的报价参数进行比较;

锁获取单元:用于以阻塞方式获取限时结束锁;

结束限时报价期单元:用于执行结束限时报价期操作。

本发明还提供一种避免竞价异常结束的网络竞价方法,本发明的避免竞价异常结束的网络竞价系统进行实施,其包括以下步骤:

步骤一,当一竞买人通过客户端发起了一报价,竞价系统通过前台的一线程接收到报价,进入报价处理线程;

步骤二,报价处理线程尝试获取报价锁;若报价锁未被占用则报价处理线程成功获取报价锁;若报价锁此时已被占用则获取报价锁失败,报价处理线程将重新尝试获取报价锁,若重新尝试获取报价锁的持续时间到达超时时间或重试次数到达了设定的最大值,则报价失败,报价处理线程结束;其中,超时时间是指系统设置的可被前台用户容忍的最大报价请求处理时间;

步骤三,当报价处理线程成功获取报价锁后,进行校验操作;若校验未通过,则报价失败,报价处理线程释放报价锁,报价处理线程结束;

步骤四,当校验通过,报价处理线程尝试获取限时结束锁;若限时结束锁未被占用则报价处理线程成功获取限时结束锁;若限时结束锁此时已被占用,则报价失败,报价处理线程释放报价锁,报价处理线程结束;

步骤五,当报价处理线程成功获取限时结束锁后,开启写报价事务执行写报价操作;

步骤六,写报价操作执行完成后,将开启的写报价事务进行提交;若提交事务成功,则报价成功,立即创建一个新的定时器;若提交事务失败,则报价失败,步骤五中进行的写报价事务被自动回滚,恢复到步骤五执行之前的状态,然后报价处理线程释放限时结束锁、释放报价锁,报价处理线程结束;

步骤七,提交事务成功并创建新的定时器时,设置定时器的执行时间为当前时间加上一个限时报价期的时间周期,并传入当前报价作为报价参数记录在该定时器中;创建定时器后,立即释放限时结束锁,释放报价锁,报价处理线程结束;

步骤八,定时器被创建出来后,立即开始等待到达执行时间,到达执行时间后,定时器获取此时竞价标的最高报价;

步骤九,定时器将步骤八中获取的最高报价与报价参数进行比较;若二者不相同,则该定时器直接退出,不进行结束限时报价期操作;若二者相同,则该定时器以阻塞方式获取限时结束锁;

步骤十,当定时器获取限时结束锁后,获取此时竞价标的最高报价,并将此最高报价与报价参数进行比较;若二者不相同,说明此定时器被创建后有其他有效的写报价事务被提交成功,则该定时器直接退出,并释放限时结束锁,不进行结束限时报价期操作;若二者相同,说明此定时器被创建后再没有其他有效的写报价事务被提交成功,则该定时器执行结束限时报价期操作,操作完毕后该定时器退出。

进一步地,在步骤一之后,报价首先要经过认证鉴权子线程,检查发送报价的客户端及竞买人的身份和权限是否允许访问此报价接口;若经认证鉴权子线程检查通过,则进行后续步骤二;若经认证鉴权子线程检查未通过,则报价失败,报价处理线程结束。

在一实施例中,在步骤二中,重新尝试获取报价锁的方法为,将本报价处理线程放入队列,待其前方的报价处理线程释放报价锁后,本报价处理线程获取报价锁;重新尝试获取报价锁的过程中,如果持续时间到达了超时时间,则报价失败,报价处理线程结束;如果未到达超时时间,则继续在队列中等待再次尝试获取报价锁,直至到达超时时间或成功获取报价锁。

在另一实施例中,在步骤二中,重新尝试获取报价锁的方法为,将本报价处理线程休眠一段时间后再进行重试;重新尝试获取报价锁的过程中,如果持续时间到达了超时时间,或者重试次数到达了设定的最大值,则报价失败,本报价处理线程结束;如果未到达超时时间,且重试次数未达到设定的最大值,则继续重复休眠一段时间后再进行重试,直至报价失败或成功获取报价锁。

进一步地,在步骤三中,校验操作包括以下任意一项或多项:

验证报价的竞买人是本竞价标的的竞买人;

验证报价的竞买人和上一次报价的不是同一个人;

验证竞价标的当前状态为竞价中;

验证报价的竞买人有足够的未冻结的保证金;

验证报价金额符合本竞价的加价规则。

进一步地,在步骤五中,写报价操作包括以下任意一项或多项:

记录本报价为本竞价标的最高报价并写入报价记录;

锁定本报价的竞买人的保证金;

释放上一次报价的竞买人的保证金。

进一步地,在步骤九中,定时器以阻塞方式获取限时结束锁是指,如果限时结束锁处于未被占用状态,则立即获取限时结束锁;如果限时结束锁处于已被占用状态,则等待限时结束锁释放后立即获取。

进一步地,在步骤十中,结束限时报价期操作包括以下任意一项或多项:

检查竞价标的当前状态为竞价中;

将竞价标的状态设置为结束;

生成报价记录单;

将冻结的最后一个竞买人的保证金状态设为扣除。

进一步地,当在任一步骤中出现报价失败,均将报价失败信息及报价失败的原因传输至前台,再由前台将报价失败信息和/或报价失败的原因发送至对应的客户端。

与现有技术相比,本发明的有益技术效果如下:

1、本发明在不明显降低效率的前提下,从根本上解决了竞价异常结束事故的问题,确保了网络竞价业务公平、安全、可控地进行。

2、本发明中设置有报价锁和限时结束锁,实现了线程间的竞争互斥,解决了现有技术方案中限时报价期的循环开始和结束是两个独立线程的问题。

附图说明

图1是本发明一实施例的系统结构示意图。

图2是本发明一实施例的报价处理线程的方法流程示意图。

图3是图2中定时器线程部分的方法流程示意图。

具体实施方式

本发明提供一种避免竞价异常结束的网络竞价系统及方法,将低概率导致竞价事故的问题,在不明显降低效率的前提下根本解决。主要原理在于结合使用悲观锁,来实现资源的抢占;并且采用创建异步定时器机制,来确保写报价执行成功后,延续一个限时报价周期;从而满足竞价业务公平处理限时报价期最后一刻报价的问题。

如前文背景技术中所述,目前的网络竞价通常设置有自由报价期和限时报价期,在有优先权人参与的竞价中,一般还需设置加价期和行权期。当该次竞价存在法律规定或合同约定的优先权人时,在限时报价期结束后,立即进入加价期,最高报价人可以选择进行加价,以提高优先权人行权成本。然后进入行权期,优先权人可以选择是否行权以最终的最高报价竞得竞价标的;若放弃行权,则最高报价人竞得竞价标的。自由报价期、加价期和行权期的开始和结束条件都很明确,不存在异常结束问题,因此本发明的改进主要在于限时报价期部分的处理方式,其余竞价阶段的工作过程及整体竞价系统所需的其他本文并未提及的部分,沿用现有可行的技术方案即可。

请参阅图1,本发明的一种避免竞价异常结束的网络竞价系统,包括前台1、报价锁模块2、校验模块3、限时结束锁模块4、写报价事务模块5、定时器模块6,以及客户端7,其中,

客户端7:与前台1通信连接,用于进行查看和报价;

前台1:位于竞价系统的前端,具有多线程,每一线程用于进行一条报价的传输、处理及给客户端7进行反馈;

报价锁模块2:连接于前台1之后,用于使报价获取或释放报价锁;

校验模块3:连接于报价锁模块2之后,用于对获取了报价锁的报价进行校验;

限时结束锁模块4:连接于校验模块3之后,用于使报价获取或释放限时结束锁;

写报价事务模块5:连接于限时结束锁模块4之后,用于根据获取限时结束锁的报价进行写报价;

定时器模块6:连接于写报价事务模块5之后,用于在写报价成功后创建定时器,并将报价记录为该新创建的定时器的报价参数;

定时器模块6中进一步包括:

定时单元61:用于在定时器创建后等待一个限时报价期的时间周期,然后立即执行后续操作;

比较单元62:用于获取竞价标的当前的最高报价并与该定时器的报价参数进行比较;

锁获取单元63:用于以阻塞方式获取限时结束锁;

结束限时报价期单元64:用于执行结束限时报价期操作。

进一步地,还包括认证鉴权单元,用于检查发送报价的客户端及竞买人的身份和权限是否允许访问此报价接口。

上述避免竞价异常结束的网络竞价系统用于实施本发明的避免竞价异常结束的网络竞价方法,请参阅图1,为限时报价期中一次报价的报价处理线程。

步骤一S1,当一竞买人通过客户端发起了一次报价,竞价系统的后端处理系统通过前台的一线程接收到本次报价,进入报价处理线程。首先报价要经过认证鉴权子线程,检查发送报价的客户端及竞买人的身份和权限是否允许访问此报价接口。认证鉴权子线程与本发明的改进点无关,采用现有技术方案即可。若经认证鉴权子线程检查通过,则进行后续步骤;若经认证鉴权子线程检查未通过,则报价失败,本次报价为无效报价,认证鉴权子线程将报价失败信息及报价失败的原因(例如“无访问权限”)传输至前台,再由前台反馈至该客户端,本条报价处理线程结束。

步骤二S2,本条报价处理线程尝试获取报价锁。由于在一次限时报价期内,可能出现多个线程几乎同时接收到请求的情况,因此需要在校验之前就争抢报价锁。若此时报价锁处于未被占用的状态,则本次报价成功获取报价锁(竞价系统的报价锁模块将报价锁的信息更新为本次报价对应信息、将状态更新为已被占用状态)。

若此时报价锁处于已被占用状态,说明有其他线程的报价在先抢占到了报价锁,正在执行后续操作,则本次报价获取报价锁失败,获取报价锁失败后本次报价将重新尝试获取报价锁。

例如在实施例一中,重新尝试获取报价锁的方法为,将本次报价放入队列,待其前方的报价被校验认定为无效报价、释放报价锁后,本次报价获取报价锁;重新尝试获取报价锁的过程中,如果持续时间到达了重试的超时时间,则报价失败,将报价失败的原因(例如“他人已抢先报价”)反馈至该客户端,本条报价处理线程结束;如果未到达重试超时时间,就继续在队列中等待再次尝试获取报价锁,直至到达超时时间或成功获取报价锁。其中,超时时间是指系统设置的可被前台用户容忍的最大报价请求处理时间,超时时间根据经验一般可设置为200-500毫秒。

再如在实施例二中,重新尝试获取报价锁的方法为,将本次报价的线程休眠一段时间(如若干毫秒)后再进行重试;重新尝试获取报价锁的过程中,如果持续时间到达了重试的超时时间,或者重试次数到达了设定的最大值,则报价失败,将报价失败的原因(例如“他人已抢先报价”)反馈至该客户端,本条报价处理线程结束;如果未到达重试超时时间,或者重试次数未达到设定的最大值,就继续重复休眠一段时间后再尝试获取,直至到达上述报价失败条件或成功获取报价锁。

步骤三S3,当本次报价成功获取报价锁后,竞价系统的校验模块进行校验操作。校验的具体步骤例如包括:

1、验证报价的竞买人是本竞价标的的竞买人;

2、验证报价的竞买人和上一次报价的不是同一个人;

3、验证本竞价标的当前状态为竞价中;

4、验证报价的竞买人有足够的未冻结的保证金;

5、验证报价金额符合本竞价的加价规则(例如报价的金额大于上一次有效报价且加价金额大于加价规则中规定的最小加价幅度)。

如果校验的项目中有任何一项未通过,都说明本次报价为无效报价,报价失败,本条报价处理线程释放报价锁(竞价系统将报价锁中本次报价信息清除、将状态更新为未被占用),将报价失败的原因(例如“您未报名参加本次竞价”等,与校验中未通过的项目相对应)反馈至该客户端,本条报价处理线程结束。

步骤四S4,校验的所有项目均通过后,本条报价处理线程尝试获取限时结束锁。本发明的方案在进行写报价操作之前增加了获取限时结束锁的步骤,目的就是为了实现和定时器竞争。若此时限时结束锁处于已被占用状态,说明此时已经有定时器正在验证并执行结束限时报价期任务,本次报价已经来迟了,不能获取限时结束锁,并将之前已经获取的报价锁释放,将报价失败的原因(例如“本次竞价已结束”)反馈至该客户端,本条报价处理线程结束。若此时限时结束锁处于未被占用状态,说明此时尚未有定时器正在验证并执行结束限时报价期任务,本次报价成功获取限时结束锁,继续后续写报价步骤。本发明方案设计为在校验通过之后再抢限时结束锁,因而无效报价不应影响或阻止定时器的执行。

步骤五S5,本条报价处理线程获取限时结束锁后,开启写报价事务,执行写报价操作。写报价操作的具体步骤例如包括:

1、在竞价系统中记录(更新)本次报价为本竞价标的最高报价并写入报价记录;

2、锁定本次报价的竞买人的保证金;

3、释放前一次记录的报价的竞买人的保证金。

步骤六S6,所有写报价操作执行完成后,将开启的写报价事务进行提交。提交这一步骤本身是现有技术,但提交的结果是本发明的改进点。

若提交事务成功,则报价成功,立即创建一个新的定时器;若提交事务失败,说明本次报价没有写入成功,写报价事务会被自动回滚,步骤五S5中进行的写报价步骤均被撤销,恢复到步骤五执行之前的状态(保证本次报价未被写入),然后释放限时结束锁,释放报价锁,将报价失败信息(例如“报价失败,请重试”)和/或报价失败的原因(例如“数据库事务处理失败”)反馈至该客户端,本条报价处理线程结束。

步骤七S7,提交事务成功并创建新的定时器时,设置定时器的执行时间为当前时间加上一个限时报价期的时间周期,并传入当前报价作为报价参数记录在该定时器中;以便定时器执行时,可以通过比较报价金额的方式,确定是否要执行结束限时报价期操作;创建定时器后,随即释放限时结束锁,然后再释放报价锁,将报价成功信息反馈至该客户端,本条报价处理线程结束(而创建的定时器继续进行定时器线程的工作)。

由此可见,无论上述操作是否成功,最后都要先释放限时结束锁,再释放报价锁,实现了线程间的竞争互斥。

由于本发明对于定时器部分做了优化,在执行结束限时报价期操作前不再需要先重新获取竞价标的最后报价时间,再通过当前时间减去该最后报价时间是否大于等于一个限时报价期的时间周期来决定是否执行结束限时报价期操作;而是改为定时器在创建时,就被传入了是在等待一特定报价到达该次限时报价期的结束时间,所有的判断改为通过价格判断。请参阅图2,定时器线程的工作过程如下。

步骤八S8,定时器被创建出来之后,立即开始自旋等待到达执行时间(即一个限时报价期的时间周期),到达执行时间后,定时器获取此时竞价标的最高报价。由于竞价标的当前的最高报价是被前述步骤中报价锁和限时结束锁双重保护的,因此一定是被串行化执行更改的,所以此刻获得到的竞价标的当前的最高报价,就是已经成功进行记录、提交事务的价格。

步骤九S9,定时器将步骤八S8中获取的最高报价与报价参数进行比较。若二者不相同(步骤八S8中获取的最高报价大于报价参数),说明已经有更新的有效报价被写入并提交成功,且已经创建了新的定时器,则当前的定时器直接退出,不进行结束限时报价期操作。

若二者相同,说明尚未有新的报价被提交,则该定时器立即以阻塞方式获取限时结束锁。其中,定时器以阻塞方式获取限时结束锁是指,如果限时结束锁处于未被占用状态,则立即获取限时结束锁;如果限时结束锁处于已被占用状态,则等待限时结束锁释放后立即获取(如果有其他线程尝试获取,则必须等待之前的锁释放)。等待限时结束锁释放的等待超时时间,要大于限时结束锁的最大占用时间,最大占用时间是指系统设置的可被前台用户容忍的最大报价请求处理时间减去对报价请求参数校验及写数据库等操作的时间,最大占用时间根据经验一般可设置为100-200毫秒,这样设置可以必定获得到限时结束锁。

步骤十S10,当定时器获取限时结束锁后,再次获取此时竞价标的最高报价,并将此最高报价与报价参数进行比较。

若二者不相同(此步骤中新获取的最高报价大于报价参数),说明已经有更新的有效报价被写入并提交成功,且已经创建了新的定时器,当前定时器直接退出,并释放限时结束锁,不进行结束限时报价期操作;若二者相同,说明没有更新的有效报价被写入并提交成功,则当前定时器执行结束限时报价期操作,操作完毕后该定时器退出,线程结束。

结束限时报价期操作例如包括:

1、检查竞价标的当前状态为竞价中;

2、将竞价标的状态设置为结束;

3、生成报价记录单;

4、将冻结的最后一个竞买人的保证金状态设为扣除。

写入到报价记录的限时结束时间和启动后续加价期的时间(如果有的话),应都以此定时器的开始执行结束限时报价期操作的时间为准。

需要说明的是,本发明中的报价锁和限时结束锁都是以固定前缀加上竞价标的作为键的,因此不同竞价标的之间的锁不存在竞争关系,即使同时进行多场竞价,彼此之间也不会相互影响。本发明中的报价锁和限时结束锁具体技术实现包括但不限于使用内存数据库(例如redis)、关系型数据库(例如MySQL)或各类编程语言(java)内置锁技术等,属于现有技术,本文不再赘述。本发明经分析和验证,可适用于单机情况,当使用外部内存数据库(例如redis)时,也可适用于集群、微服务等分布式情况。

综上所述,本发明提供的一种避免竞价异常结束的网络竞价系统及方法,在不明显降低效率的前提下,从根本上解决了竞价异常结束事故的问题,确保了网络竞价业务公平、安全、可控地进行。

技术分类

06120115586939