/seckill-beego

go语言实现的秒杀业务,用到了RabbitMQ处理下单,redis原子性和乐观锁减库存

Primary LanguageGo

beego 秒杀

项目环境

  • golang语言框架 beego1.12.1
  • 消息队列中间件 RabbitMQ
  • 秒杀商品缓存:Redis
  • 秒杀接口压测工具:JMeter

业务梳理

1. 预热缓存数据,把秒杀商品的 库存和秒杀时间 存入缓存中。
2. 秒杀接口提交地址字段address 和 商品sku sku_id,并进行数据校验
3. 在缓存里校验秒杀商品是否存在、是否有库存、是否在秒杀时间内
4. 在缓存里判断用户是否已经秒杀过
5. 把用户id、sku_id、address写入RabbitMQ的消息队列
6:处理消息使用RabbitMQ的work工作模式,一个生成者多个消费者,用于处理在短时间的HTTP请求中无法处理的复杂任务。
7:处理消息,RabbitMQ消息持久化和重复消息处理
8:校验商品库存 高并发下 redis还在减库存, 这一步再利用redis原子性校验库存,避免库存不足走到数据库操作耗性能。
9:MySQL事务秒杀下单:减库存(乐观锁,防止库存超卖)、订单表、订单子表。
10:更新redis缓存:秒杀商品库存缓存、用户下单缓存

JMeter压测

1:安装JMeter进行压测
2:在进行php-fpm进程数调优、mysql连接数调优、开启opcache, 同等配置情况下还是远远及go版下的秒杀