场景:如何设计一个秒杀系统

来自hollis八股文

设计一个秒杀系统需要考虑以下问题

秒杀系统存在的问题

1. 高并发流量

2. 热点数据

3. 库存正常扣减

4. 重复下单

5. 对普通交易的影响

6. 业务手段

7. 黄牛

高并发流量

将请求链路变短,把一些流量挡在外面

1. 使用CDN服务存储静态资源,降低服务器开销

2. 使用nginx做黑白名单,过滤掉行为不正常的用户

3. 使用本地缓存,redis 替代数据库进行商品库存扣减

热点数据

一般来说秒杀系统会预测到哪个商品是热点数据

1. 将热点数据放入redis中进行预热

2. 解决热key问题

        加入本地缓存,减少缓存请求链路

        做redis集群架构,备份热key

        将热key拆分,比如 淄博001 淄博002,再根据id对key进行映射

库存的正常扣减

为了高并发,将库存放入redis做扣减

1. 利用redis做缓存,抗住并发流量

2. redis发送mq信息给mq client,进行数据库库存扣除

        mq发送会出现,消息丢失问题(少买)

        下订单的时候,进行账单表的统计

        定时去进行对账

重复下单

1. 解决接口幂等性的问题

        一锁二判三更新

2. 

  • 提交表单前,获取token令牌,并将其存储在redis中
  • 提交表单时,一并将token提交并检验和删除,这一步属于原子操作,我们使用lua脚本

3. 订单重复性判断

黄牛

1. 令牌桶或者漏桶 

2. 识别黄牛id、ip 加入nginx黑名单

业务相关

预售就开始进行筛选

        

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值