秒杀
一、什么是秒杀
商品秒杀,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。由于商品价格低廉,往往一上架就被抢购一空,时间极短。
二、技术挑战
高并发:时间极短、 瞬间用户量大,而且用户会在开始前不断刷新页面,还会积累一大堆重复请求的问题,请求过多把数据库打宕机了,系统响应失败,导致与这个系统耦合的系统也GG,一挂挂一片。
秒杀器:秒杀前不断刷新页面秒杀页面,知道秒杀开始,抢着下单。
链接暴露:使用漏洞,跳过秒杀页面,直接进入下单页面,下单。
超卖:实际下单数多于抢购限定的商品数量。
数据库:一瞬间的QPS可能导致数据库压力过大而宕机
三、解决方案
1、高并发解决方案
使用nginx做负载均衡,将压力分配到多台服务器
将静态资源放入到CDN服务器中
按钮控制,点击按钮后立刻变为不可点击,n秒后自动恢复
访问频率限制
将消息放入消息中间件,如rabbitmq中,缓解系统压力
2、链接暴露解决方案
防止秒杀接口的url泄露,造成秒杀未开始,商品却卖出去。
在秒杀开始后,动态生成一个加密后的url
3、防止超卖
可以从三个维度触发,乐观锁、悲观锁、redis
4、防止恶意请求(秒杀器)
限制一个用户只能买一件商品。如给用户id和商品id设置联合索引。
5、数据库解决方案
增加redis环境,获取到指定类型的key后,才能进行数据库。这里需要考虑缓存雪崩和缓存穿透的问题。
对数据库进行分库分表处理,并设置多主多从,主库负责写,从库负责读。
评论