当前位置: 首页 > news >正文

使用 sponge + dtm 轻松实现秒杀抢购服务(HTTP),彻底解决库存与订单数据不一致的难题

秒杀场景的挑战

秒杀是电商中常见的抢购商品场景,其技术特点是瞬间请求量巨大,对服务的性能和一致性要求极高。即使服务出现崩溃,也必须确保库存扣减和订单生成保持一致,避免出现超卖或超买的现象。通过使用 dtm(分布式事务管理器),可以轻松解决库存与订单数据不一致的问题。


构建秒杀服务

秒杀服务(http)代码由 sponge 自动生成(选择 ⓷基于 protobuf 创建 web 服务),开发者只需在生成的模板代码文件 (例如 internal/handler/flashSale.go) 中填写秒杀相关的业务逻辑。

下图是生成代码的界面:

在这里插入图片描述

解压代码,切换到项目目录(如 flashSale 目录),执行以下命令:

# 生成代码
make proto# 打开 internal/handler/flashSale.go 文件,按照生成的示例代码添加业务逻辑代码。# 编译并启动服务
make run

更详细的 sponge 创建 web 服务的开发文档请参考:sponge Web 开发文档。

这是添加业务逻辑后的flashSale服务代码。


快速开始

  1. 启动 Redis 服务

  2. 启动 dtm 服务

    • 下载 dtm 可执行文件,修改 dtm 默认配置以使用 Redis 作为存储,并启动 dtm 服务:
      dtm -c conf.yml
      
  3. 配置项目

    • 克隆项目代码flashSale到本地,打开配置文件 configs/flashSale.yml,修改 Redis 和 dtm 的配置项,将默认的 IP 地址(如 192.168.3.37 和 192.168.3.90)替换为实际环境中的 IP 地址(如果所有服务在本地运行,填写127.0.0.1即可)。
  4. 编译并启动服务

    • 可以直接使用以下命令编译并运行服务:
      cd cmd/flashSale
      go run main.go
      
    • 或者,如果已安装 sponge,直接运行以下命令启动服务:
      make run
      
  5. 测试秒杀 API

    • 在浏览器中访问 http://localhost:8080/apis/swagger/index.html,通过 Swagger UI 测试秒杀抢购 API。

    在这里插入图片描述

    API 测试示例:

    1. 设置库存 API

      • 请求示例参数:
        {"productID": 1,"stock": 3
        }
        
    2. 秒杀请求 API

      • 请求示例参数:
        {"productID": 1,"amount": 100,"userID": 1
        }
        
      • 如果库存不足,则返回 409 状态码,表示秒杀失败。
  6. 性能压测api

    在进行性能压测时,为避免终端日志输出影响服务性能,建议将服务以后台模式运行。已安装 sponge 的情况下,可使用以下命令在后台启动服务:

    make run-nohup
    

    使用ab、wrk等压测工具进行压测api。


总结

通过结合 sponge 和 dtm,可以快速搭建一个高性能、高可靠的秒杀服务,彻底解决库存与订单数据不一致的问题。该方案不仅简化了开发流程,还能显著提升服务的并发处理能力和稳定性,是构建电商秒杀系统的理想选择。


http://www.mrgr.cn/news/37049.html

相关文章:

  • OpenCV
  • Promise笔记
  • 【数据结构】AVL树相关知识详细梳理
  • ubuntu更换镜像源及巧妙使用Python脚本解决文件编码问题
  • 【学习笔记】网络设备(华为交换机)基础知识7——查看硬件信息 ① display device 命令详解
  • 一个证明-待验证
  • Redis配置文件详解(上)
  • Java文件上传同时传入JSON参数
  • 11. Map和Set
  • RabbitMQ下载安装运行环境搭建
  • 大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据
  • 第18周 3-过滤器
  • 什么是开放式耳机?具有什么特色?非常值得入手的蓝牙耳机推荐
  • Python_list去重复值remove_duplicates
  • 【中级通信工程师】终端与业务(三):电信业务
  • Qt | Linux+QFileSystemWatcher文件夹和文件监视(例如监视U盘挂载目录)
  • ISP下载,IAP,ICP,USB转TTL下载SWIM、DAP-link、CMSIS-DAP、ST-LINK,SPI(通信方式),
  • LeetCode 201. 数字范围按位与
  • 哈希查找算法
  • 六、设计模式-6.2、代理模式