一种高性能的提单抢购方法及其系统技术方案

技术编号:29311970 阅读:25 留言:0更新日期:2021-07-17 02:22
本发明专利技术提供了一种高性能的提单抢购方法,所述方法为:步骤S1、商品详情页设置成静态化页面;步骤S2、采用令牌桶限流器算法,设置一个限流阈值,对服务器接口进行限流;步骤S3、对单个IP短时间内的大量抢购请求予以限流;步骤S4、从服务器的缓存判断商品库存;步骤S5、将预抢购状态的订单加入到一消息队列中;步骤S6、异步处理消息队列,顺序执行扣减,更新订单;步骤S7、商品详情页前端定时循环查询订单状态,并将抢购结果反馈给用户;步骤S8、用户支付抢购成功的订单;异步检测超时未付款订单,并归还商品库存至数据库;保证了抢购的数据正确性。性。性。

【技术实现步骤摘要】
一种高性能的提单抢购方法及其系统


[0001]本专利技术涉及计算机通讯
,特别是一种高性能的提单抢购方法及其系统。

技术介绍

[0002]秒杀系统主要解决三大问题:一、瞬时的高并发访问。抢购和普通的电商销售有所不同,普通的电商销售,流量是比较平均的,虽然有波峰波谷,但不会特别突出。而抢购是在特定时间点进行的推销活动,抢购开始前,用户不断刷新页面,以获得购买按钮;抢购开始的一瞬间,集中并发购买。二、数据正确性。抢购毕竟是一种购买行为,需要购买、扣减库存、支付等复杂的流程,在此过程中,要保证数据的正确性,防止超卖(卖出量超过库存)的发生。三、防作弊。无论是火车票的购买,还是低价商品的促销,肯定不希望某些客户买到所有的商品,应尽量保证公平性。通过购票插件购买火车票,阿里巴巴抢月饼事件等,需要限制技术性用户绕过网站的限制,通过技术手段获得不良收益。
[0003]秒杀抢购是热点扣减里一个最具代表性的使用场景,秒杀带来的瞬间请求量非常大,上百万人同时在线抢购同一商品,此时就带来了超大的并发量。秒杀对于扣减的准确性要求高,在绝大部分场景里是一种营销手段,亏本出售,吸引用户,达到拉新引流等目的。如果出现了大面积的超卖,将是重大的损失。令牌桶算法机制:当网络设备衡量流量是否超过额定带宽时,需要查看令牌桶,而令牌桶中会放置一定数量的令牌,一个令牌允许接口发送或接收1bit数据(有时是1 Byte数据),当接口通过1bit数据后,同时也要从桶中移除一个令牌。当桶里没有令牌的时候,任何流量都被视为超过额定带宽,只有当桶中有令牌时,数据才可以通过接口。令牌桶中的令牌不仅仅可以被移除,同样也可以往里添加,所以为了保证接口随时有数据通过,就必须不停地往桶里加令牌,由此可见,往桶里加令牌的速度,就决定了数据通过接口的速度。因此,通过控制往令牌桶里加令牌的速度从而控制用户流量的带宽。而设置的这个用户传输数据的速率被称为承诺信息速率(CIR),通常以秒为单位。比如设置用户的带宽为1000bit每秒,只要保证每秒钟往桶里添加1000个令牌即可。

技术实现思路

[0004]为克服上述问题,本专利技术的目的是提供一种高性能的提单抢购方法,能够支持高并发的秒杀场景,并且可保护库存不会超发,保证数据正确。
[0005]本专利技术采用以下方案实现:一种高性能的提单抢购方法,所述方法包括如下步骤:步骤S1、商品详情页设置成静态化页面;步骤S2、采用令牌桶限流器算法,设置一个限流阈值,对服务器接口进行限流;步骤S3、对单个IP短时间内的大量抢购请求予以限流;步骤S4、从服务器的缓存判断商品库存;步骤S5、将预抢购状态的订单加入到一消息队列中;步骤S6、异步处理消息队列,顺序执行扣减,更新订单;
步骤S7、商品详情页前端定时循环查询订单状态,并将抢购结果反馈给用户;步骤S8、用户支付抢购成功的订单;异步检测超时未付款订单,并归还商品库存至数据库。
[0006]进一步的,所述步骤S1和步骤S2之间还包括一步骤S11、按概率随机丢弃抢购请求,即根据抢购活动预估的访问量,商品库存如果仅占用户人数的1%,则随机丢弃一定比例的请求;该比例设定为40%

50%;由于热门商品的抢购常常会被人用程序手段进行非人为的抢购,如果全部都按照先后顺序进行下单,则通过程序手段进行抢购的一定会比正常用户来的快,因此要随机丢弃一定比例的请求。
[0007]进一步的,所述步骤S5和步骤S6之间还包括一步骤S51、将预抢购状态的订单信息,先返回商品详情页显示用户抢购中,使得商品详情页前端能进行轮询查询抢购结果。
[0008]进一步的,所述步骤S4进一步具体为:进行库存的判断,从服务器redis缓存里读取商品库存,如果商品库存不足则返回用户库存不足,请稍后尝试捡漏;如果抢购成功的用户没有在限期内付款,则会归还库存,用户能继续下单;如果服务器redis缓存的库存足够,不代表一定抢购成功,要进行顺序执行扣减库存后才确定是否抢购成功,则这边用户有抢购到的暂定为预抢购状态。
[0009]进一步的,所述步骤S6进一步具体为:开启一个线程,异步消费消息队列里的订单,从数据库里读取真实库存数据,逐一扣减库存,扣减成功的修改订单状态为抢购成功,并且更新redis库存;如果库存不足,则更新余下消息队列里的订单为抢购失败。
[0010]本专利技术还提供了一种高性能的提单抢购系统,所述系统包括页面设置模块、接口限流模块、IP请求限流模块、库存判断模块、消息队列创建模块、消息队列处理模块、状态查询模块、以及库存更新模块;所述页面设置模块,用于将商品详情页设置成静态化页面;所述接口限流模块,采用令牌桶限流器算法,设置一个限流阈值,对服务器接口进行限流;所述IP请求限流模块,对单个IP短时间内的大量抢购请求予以限流;所述库存判断模块,从服务器的缓存判断商品库存;所述消息队列创建模块,将预抢购状态的订单加入到一消息队列中;所述消息队列处理模块,用于异步处理消息队列,顺序执行扣减,更新订单;所述状态查询模块,通过商品详情页前端定时循环查询订单状态,并将抢购结果反馈给用户;所述库存更新模块,用户支付抢购成功的订单;异步检测超时未付款订单,并归还商品库存至数据库。
[0011]进一步的,所述页面设置模块和接口限流模块之间还包括请求丢弃模块,所述请求丢弃模块,按概率随机丢弃抢购请求,即根据抢购活动预估的访问量,商品库存如果仅占用户人数的1%,则随机丢弃一定比例的请求;该比例设定为40%

50%;由于热门商品的抢购常常会被人用程序手段进行非人为的抢购,如果全部都按照先后顺序进行下单,则通过程序手段进行抢购的一定会比正常用户来的快,因此要随机丢弃一定比例的请求。
[0012]进一步的,所述消息队列创建模块和消息队列处理模块之间还包括订单状态显示模块,该订单状态显示模块,将预抢购状态的订单信息,先返回商品详情页显示用户抢购
中,使得商品详情页前端能进行轮询查询抢购结果。
[0013]进一步的,所述库存判断模块的实现方式进一步具体为:进行库存的判断,从服务器redis缓存里读取商品库存,如果商品库存不足则返回用户库存不足,请稍后尝试捡漏;如果抢购成功的用户没有在限期内付款,则会归还库存,用户能继续下单;如果服务器redis缓存的库存足够,不代表一定抢购成功,要进行顺序执行扣减库存后才确定是否抢购成功,则这边用户有抢购到的暂定为预抢购状态。
[0014]进一步的,所述消息队列处理模块的实现方式进一步具体为:开启一个线程,异步消费消息队列里的订单,从数据库里读取真实库存数据,逐一扣减库存,扣减成功的修改订单状态为抢购成功,并且更新redis库存;如果库存不足,则更新余下消息队列里的订单为抢购失败。
[0015]本专利技术的有益效果在于:1、把要进行抢购的商品详情页做成静态化,页面减少动态数据的读取,可以加快详情页的访问速度;2、进行接口限流和用户IP请求限流,减小了服务器的压力;能够支持高并发的秒杀场景;3、通过消息队列进行异步处理保本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种高性能的提单抢购方法,其特征在于:所述方法包括如下步骤:步骤S1、商品详情页设置成静态化页面;步骤S2、采用令牌桶限流器算法,设置一个限流阈值,对服务器接口进行限流;步骤S3、对单个IP短时间内的大量抢购请求予以限流;步骤S4、从服务器的缓存判断商品库存;步骤S5、将预抢购状态的订单加入到一消息队列中;步骤S6、异步处理消息队列,顺序执行扣减,更新订单;步骤S7、商品详情页前端定时循环查询订单状态,并将抢购结果反馈给用户;步骤S8、用户支付抢购成功的订单;异步检测超时未付款订单,并归还商品库存至数据库。2.根据权利要求1所述的一种高性能的提单抢购方法,其特征在于:所述步骤S1和步骤S2之间还包括一步骤S11、按概率随机丢弃抢购请求,即根据抢购活动预估的访问量,商品库存如果仅占用户人数的1%,则随机丢弃一定比例的请求,该比例设定为40%

50%;由于热门商品的抢购常常会被人用程序手段进行非人为的抢购,如果全部都按照先后顺序进行下单,则通过程序手段进行抢购的一定会比正常用户来的快,因此要随机丢弃一定比例的请求。3.根据权利要求1所述的一种高性能的提单抢购方法,其特征在于:所述步骤S5和步骤S6之间还包括一步骤S51、将预抢购状态的订单信息,先返回商品详情页显示用户抢购中,使得商品详情页前端能进行轮询查询抢购结果。4.根据权利要求1所述的一种高性能的提单抢购方法,其特征在于:所述步骤S4进一步具体为:进行库存的判断,从服务器redis缓存里读取商品库存,如果商品库存不足则返回用户库存不足,请稍后尝试捡漏;如果抢购成功的用户没有在限期内付款,则会归还库存,用户能继续下单;如果服务器redis缓存的库存足够,不代表一定抢购成功,要进行顺序执行扣减库存后才确定是否抢购成功,则这边用户有抢购到的暂定为预抢购状态。5.根据权利要求1所述的一种高性能的提单抢购方法,其特征在于:所述步骤S6进一步具体为:开启一个线程,异步消费消息队列里的订单,从数据库里读取真实库存数据,逐一扣减库存,扣减成功的修改订单状态为抢购成功,并且更新redis库存;如果库存不足,则更新余下消息队列里的订单为抢购失败。6.一种高性能的提单抢购系统,其特征在于:所述系统包括页面设置模块、接口限流模块、IP请求限流模块、库存判断模块、消息队列创建模块、消息队列处理模块、状态查询模块、以及...

【专利技术属性】
技术研发人员:刘德建叶伟陈宏展
申请(专利权)人:福建天晴在线互动科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1