秒杀问题怎么解决(秒杀问题)
大家好,小东来为大家解答以上问题。秒杀问题怎么解决,秒杀问题很多人还不知道,现在让我们一起来看看吧!
1、 我们遇到的秒杀,一般都是在节假日电商网站举办一些活动或者12306网站抢票的时候遇到的,给我们带来很多苦恼。对于电商网站中一些稀缺或特殊的商品,电商网站一般会在约定时间限量销售,因为这些商品的特殊性,会吸引大量用户抢购,在约定时间在秒杀页面抢购。因为狼多肉少,服务器拥挤,大量客户失败。
2、 解决这个问题一般有五个步骤。第一步是限流:由于只有少部分用户可以杀软成功,所以需要限制大部分流量,只允许少部分流量进入服务后端。
3、 第二步是削峰:对于秒杀系统,会瞬间有大量用户涌入。比如中午会出大量外卖,商家推出满减活动就更火了。所以在冲初期会有一个很高的瞬时峰值。高峰流量是碾压系统的重要原因,所以如何把瞬间的高流量变成一段时间的稳定流量也是设计秒杀系统的重要思路。常见的削峰方法有缓存和消息中间件。
4、 第三步:异步处理:spike系统是一个高并发系统。采用异步处理模式可以大大提高系统的并发性。其实异步处理是实现削峰的一种方式。
5、 第四步:内存缓存:spike系统最大的瓶颈一般是数据库读写。因为数据库读写属于磁盘IO,所以性能很低。如果能将一些数据或业务逻辑转移到内存缓存中,效率会大大提高。充分利用缓存,可以大大提高系统的读写速度。
6、 最后一步可以扩展:当然,如果我们想要支持更多的用户和更大的并发性,最好将系统设计得灵活和可扩展。如果流量来了,就扩充机器。淘宝、JD.COM等双十一活动会增加很多机器来应对交易高峰。消息队列可以削峰,拦截大量并发请求,这也是一个异步处理过程。后台业务根据自身的处理能力,主动从消息队列中拉出请求消息进行业务处理。
7、 可以采用Redis最简单的键-值数据结构,用一个原子变量(AtomicInteger)的值作为键,用用户id作为值,这样库存数量就是原子变量的最大值。对于每个用户的峰值,我们使用RPUSH键值来插入峰值请求。当插入的峰值请求数量达到上限时,所有后续插入都会停止。然后,我们可以在平台上启动多个工作线程,使用LPOP密钥读取秒杀成功的用户id,然后操作数据库进行最终的订单和库存减少操作。
本文到此结束,希望对大家有所帮助。
免责声明:本文由用户上传,如有侵权请联系删除!
猜你喜欢
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
最新文章
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15
- 07-15