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

来自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黑名单

业务相关

预售就开始进行筛选

        

相关推荐

  1. 场景如何设计一个系统

    2024-04-13 21:34:05       16 阅读
  2. 系统架构设计-01

    2024-04-13 21:34:05       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 21:34:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 21:34:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 21:34:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 21:34:05       20 阅读

热门阅读

  1. c++ std::vector介绍

    2024-04-13 21:34:05       19 阅读
  2. docker和宿主机的关系

    2024-04-13 21:34:05       15 阅读
  3. MySQL Ruler mysql 日常开发规范

    2024-04-13 21:34:05       17 阅读
  4. GitHub绑定SSH

    2024-04-13 21:34:05       14 阅读
  5. 依靠ChatGPT打磨优质学术论文的步骤

    2024-04-13 21:34:05       14 阅读
  6. C#:foreach循环

    2024-04-13 21:34:05       14 阅读
  7. vue启动遇到的问题记录

    2024-04-13 21:34:05       16 阅读
  8. WebKit 入门介绍

    2024-04-13 21:34:05       13 阅读
  9. 重发布和路由策略

    2024-04-13 21:34:05       17 阅读