如何设计一个秒杀系统

1、问题抽象:并发读、并发写、稳准快
2、4要1不要:数据要尽量少、请求数要尽量少、路径要尽量短、依赖要尽量少(服务分级)、不要有单点
3、秒杀思路:秒杀系统独立部署、热点数据进缓存、答题环节、动静分离、本地缓存、限流
4、动静分离
 1)做法:
  a、把静态数据缓存到离用户最近的地方:浏览器、CDN、服务端Cache
  b、静态化改造,直接缓存HTTP连接
  c、代理层缓存
 2)动静分离架构方案
  a、实体机单机部署
  b、统一Cache层
  c、上CDN
5、热点数据&&热点操作
 1)发现静态热点数据(能提前预测):活动标识、大数据
 2)发现动态热点数据(不能提前预测):日志聚合分析回写
 3)处理热点数据:优化(缓存)、限制(分桶)、隔离(业务隔离->活动,系统隔离->独立部署,数据隔离->单独cache、db)
6、削峰:
 1)排队:消息队列
 2)答题:增加复杂度,从而防秒杀器、延缓请求
 3)分层过滤:CDN、前台读系统、后台写系统、DB
 4)业务活动引流
7、性能:QPS
 1)RT:减少CPU的执行时间
  a、发现瓶颈:jstack、jprofiler、yourkit
  b、解决方式:减少编码、减少序列化、Java极致优化、并发读优化(集中Cache->LocalCache)
 2)线程数:增加线程数,会增加切换,数量需考虑均衡
8、减库存
 1)方案:
  a、下单减库存:恶意下单问题
  b、付款减库存:库存超卖问题
  c、预扣库存
 2)防止恶意下单:恶意用户标识、限制购买数量
 3)减库存处理
  a、Cache中减库存
  b、数据库中减库存:incr where 库存>0
  c、并发锁问题:应用层排队、数据库层排队
9、降级、限流、熔断
10、缓存失效:
 1)被动失效:过期时间
 2)主动失效:改库删缓存、失效中心监控数据表binlog来删缓存

参考:https://time.geekbang.org/column/intro/127

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值