写点什么

秒杀

用户头像
李广富
关注
发布于: 2020 年 08 月 05 日

一、什么是秒杀

商品秒杀,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。由于商品价格低廉,往往一上架就被抢购一空,时间极短。



二、技术挑战

  • 高并发:时间极短、 瞬间用户量大,而且用户会在开始前不断刷新页面,还会积累一大堆重复请求的问题,请求过多把数据库打宕机了,系统响应失败,导致与这个系统耦合的系统也GG,一挂挂一片。

  • 秒杀器:秒杀前不断刷新页面秒杀页面,知道秒杀开始,抢着下单。

  • 链接暴露:使用漏洞,跳过秒杀页面,直接进入下单页面,下单。

  • 超卖:实际下单数多于抢购限定的商品数量。

  • 数据库:一瞬间的QPS可能导致数据库压力过大而宕机



三、解决方案

1、高并发解决方案

  • 使用nginx做负载均衡,将压力分配到多台服务器

  • 将静态资源放入到CDN服务器中

  • 按钮控制,点击按钮后立刻变为不可点击,n秒后自动恢复

  • 访问频率限制

  • 将消息放入消息中间件,如rabbitmq中,缓解系统压力



2、链接暴露解决方案

  • 防止秒杀接口的url泄露,造成秒杀未开始,商品却卖出去。

  • 在秒杀开始后,动态生成一个加密后的url



3、防止超卖

可以从三个维度触发,乐观锁、悲观锁、redis



4、防止恶意请求(秒杀器)

限制一个用户只能买一件商品。如给用户id和商品id设置联合索引。



5、数据库解决方案

  • 增加redis环境,获取到指定类型的key后,才能进行数据库。这里需要考虑缓存雪崩和缓存穿透的问题。

  • 对数据库进行分库分表处理,并设置多主多从,主库负责写,从库负责读。

用户头像

李广富

关注

还未添加个人签名 2019.11.12 加入

还未添加个人简介

评论

发布
暂无评论
秒杀