Skip to content

Latest commit

 

History

History
30 lines (21 loc) · 1.56 KB

README-cn.md

File metadata and controls

30 lines (21 loc) · 1.56 KB

简体中文 | English

秒杀应用

此项目可以结合dtm文档中的 秒杀应用阅读

概述

本项目主要演示了dtm如何应用于秒杀系统,将演示秒杀系统中及时发生进程crash,也能够保证精准的扣减库存并创建精准数量的订单。

启动dtm

快速启动dtm

运行本例子

go run main.go

发起订单请求

  • 发起一个正常完成的秒杀请求 curl http://localhost:8081/api/busi/flashSales
  • 发起一个完成库存扣减就crash的秒杀请求 curl http://localhost:8081/api/busi/flashSales-crash 大约等待十多秒之后,订单创建完成,不受影响

模拟秒杀活动

curl http://localhost:8081/api/busi/flashSales-batch

用户发起这个模拟秒杀活动的请求之后,本例子会做如下事情:

  1. 重置各项变量:将库存设置为4,将已创建的订单数重置为0
  2. 发起一个扣减完库存就宕机的请求,然后睡眠0.5s,保证进行下一步前,库存已扣减到3
  3. 发起10个并发的秒杀请求,然后睡眠0.5s,保证进行下一步前,这10个秒杀请求已处理
  4. 此时输出已经创建的订单数量为3,这三个订单都是步骤3中产生的
  5. 大约等待3~5秒,可以看到创建的订单数量变为4,这是因为步骤2里面的全局事务超时检查,最后成功,创建了第4个订单

结论:本示例的方法,可以保证Redis中的库存和数据库中的订单,最终严格一致,无需手动校准数据