java秒杀项目练习二-秒杀流程

java秒杀项目练习二-秒杀流程

fork大神项目的来练习,自己搭建在线环境,用来学习代码。本项目地址: https://github.com/luozijing/...

云环境地址:http://42.192.183.193:9080/lo...

进行账号注册(随便注册体验)体验秒杀功能

秒杀主流程

java秒杀项目练习二-秒杀流程_第1张图片

粗略的秒杀过程流程,秒杀主要解决的问题是高并发下的对数据库的压力,以及库存超卖,还有就是接口的吞吐能力(能支撑的秒杀事务)。针对以上几点,秒杀中常见的方法是:

  1. 有效控制过滤无效秒杀事务 -> 采用本地内存标记商品库存 -> redis分布式锁让统一用户排队(限流)-> redis原子递减库存
  2. 库存超卖 -> redis::decr原子性接口来递减预热的库存(购买接口,失败需要补偿incr) -> 数据库更新时带判断库存大于0(下单接口)
  3. 接口吞吐 -> zookeeper 通知服务更新库存是否买完 -> mq异步生成订单

    总结起来就是异步 解耦 削峰

存在的问题及优化

  1. 订单和库存事务一致性问题,需要有事务补偿机制。
  2. 统计接口访问频率
  3. 完成虚拟支付

对应的问题会在下一期中解决。。。。

你可能感兴趣的