简体中文 | English
此项目可以结合dtm文档中的 秒杀应用阅读
本项目主要演示了dtm如何应用于秒杀系统,将演示秒杀系统中及时发生进程crash,也能够保证精准的扣减库存并创建精准数量的订单。
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
用户发起这个模拟秒杀活动的请求之后,本例子会做如下事情:
- 重置各项变量:将库存设置为4,将已创建的订单数重置为0
- 发起一个扣减完库存就宕机的请求,然后睡眠0.5s,保证进行下一步前,库存已扣减到3
- 发起10个并发的秒杀请求,然后睡眠0.5s,保证进行下一步前,这10个秒杀请求已处理
- 此时输出已经创建的订单数量为3,这三个订单都是步骤3中产生的
- 大约等待3~5秒,可以看到创建的订单数量变为4,这是因为步骤2里面的全局事务超时检查,最后成功,创建了第4个订单
结论:本示例的方法,可以保证Redis中的库存和数据库中的订单,最终严格一致,无需手动校准数据