Skip to content

Xarth-Mai/GoShop

Repository files navigation

GoShop

Go + Gin + Vue 3 实现的电商交易系统:从商品浏览、购物车、下单、支付、退款到后台运营,完整覆盖 C 端购物链路和 B 端管理链路。

🚀 在线演示: https://shop.lzzz.ink

测试账号:test_user / 123456

接口文档 · 微服务说明 · 部署说明

Go Gin PostgreSQL Valkey NATS Vue Kubernetes

项目亮点

  • 微服务拆分完整落地:9 个 Go 服务独立进程运行,Caddy 统一网关路由,服务各自连接 goshop_* 独立数据库;服务间同步调用为 gRPC-only。
  • 交易一致性闭环:普通订单覆盖价格试算、优惠券锁定、库存预占、支付回调、库存确认、售后退款;订单、支付、售后通过 Outbox/Inbox + NATS JetStream 做跨库最终一致性。
  • 高并发库存链路:秒杀和下单库存预扣走 Valkey/Redis Lua 原子脚本,先在内存层完成库存判断和扣减,避免热点 SKU 直接压垮数据库行锁。
  • 延迟队列释放库存:基于 Valkey ZSet 实现轻量延迟队列,普通订单 30 分钟、秒杀订单 15 秒超时检查,后台调度器自动取消未支付订单并回滚库存。
  • 可运行、可部署、可验证:提供本地依赖 bootstrap、微服务 smoke run、Docker 单镜像和 Go/Vue 回归命令。
  • 前后台产品闭环:Vue 3 前台覆盖商品、购物车、结算、订单详情;后台覆盖商品、订单、退款、财务、用户和技术引擎监控。

系统截图

GoShop 首页 商品详情

后台仪表盘 技术引擎监控

查看完整截图图库(13 张)
前台购物链路 截图
首页 首页
商品详情 商品详情
购物车 购物车
地址弹窗 地址弹窗
结算页 结算页
订单详情 订单详情
后台运营链路 截图
仪表盘 后台仪表盘
商品管理 商品管理
订单管理 订单管理
技术引擎 技术引擎
退款审核 退款审核
财务看板 财务看板
用户管理 用户管理

架构与核心链路

flowchart LR
    Browser[Web / Admin] --> Gateway[Caddy Gateway :8080]
    Gateway --> User[user :8101]
    Gateway --> Product[product :8102]
    Gateway --> Inventory[inventory :8103]
    Gateway --> Promotion[promotion :8104]
    Gateway --> Order[order :8105]
    Gateway --> Payment[payment :8106]
    Gateway --> Aftersale[aftersale :8107]
    Gateway --> Cart[cart :8108]
    Gateway --> Scheduler[scheduler :8109]

    Order <-->|gRPC first| Product
    Order <-->|gRPC first| Inventory
    Order <-->|gRPC first| Promotion
    Payment <-->|gRPC first| Order
    Aftersale <-->|gRPC first| Order
    Scheduler -->|cancel expired pending order| Order

    Inventory --> Valkey[(Valkey / Redis)]
    Scheduler --> Valkey
    User --> PG[(PostgreSQL service DBs)]
    Product --> PG
    Inventory --> PG
    Promotion --> PG
    Order --> PG
    Payment --> PG
    Aftersale --> PG
    Cart --> PG

    Order --> NATS[NATS JetStream]
    Payment --> NATS
    Aftersale --> NATS
Loading

交易主链路

  1. 用户在前台选择 SKU 并提交订单。
  2. checkout 服务读取地址、商品、优惠券候选项,完成价格试算。
  3. order 服务锁定优惠券、调用 inventory 预占库存、创建订单和支付单。
  4. payment 服务接收 mock 支付回调,幂等更新支付状态并发布支付成功事件。
  5. order/inventory 消费事件确认订单和库存状态;超时未支付由 scheduler 触发取消并释放库存。
  6. aftersale 服务处理退款申请和后台审核,退款成功后回补库存并更新订单状态。

技术栈

层级 技术
后端 Go, Gin, GORM, gRPC, zap
数据 PostgreSQL, Valkey/Redis, NATS JetStream
前端 Vue 3, Pinia, Vue Router, Vite, TypeScript
网关与部署 Caddy, Docker, Cloudflare Tunnel 配置样例
工程化 OpenAPI 静态文档、服务 smoke check、Go/Vue 单元测试

本地运行

1. 启动依赖与初始化数据

bash scripts/bootstrap_local_env.sh
./deploy/bootstrap.sh --seed

脚本会按本地环境自动处理 PostgreSQL、Valkey/Redis、NATS JetStream,并基于 config.example.yaml 生成本地配置。

2. 构建前端

cd web
bun install
bun run build
cd ..

3. 构建并启动微服务

./deploy/build.sh
./deploy/smoke_run.sh start
./deploy/smoke_run.sh check

访问:

停止本地服务:

./deploy/smoke_run.sh stop

部署

Docker 单镜像包含 9 个 Go 服务、前端静态资源和 Caddy 网关:

docker build -t ghcr.io/<owner>/goshop:<tag> .
docker push ghcr.io/<owner>/goshop:<tag>

主机部署使用 deploy/Caddyfile.microservicesdeploy/systemd/goshop@.servicedeploy/k8s/ 保留但本轮不处理,本机不要求 K8s 真实或 dry-run 验证。

详细部署顺序、环境变量和 systemd 命令见 docs/deployment.md

验证命令

GOCACHE=/tmp/goshop-go-build go test ./...
cd web && bun run build
./deploy/build.sh
docker build -t goshop:test .
./deploy/smoke_run.sh start
./deploy/smoke_run.sh check
./deploy/smoke_run.sh stop

目录结构

.
├── cmd/                  # 9 个微服务入口
├── api/proto/            # 内部 gRPC 合约
├── core/                 # DB、Redis、NATS、gRPC、鉴权、指标等基础设施
├── handlers/             # HTTP API 控制器
├── internal/             # checkout/order/payment/inventory/outbox 等领域逻辑
├── models/               # GORM 数据模型
├── web/                  # Vue 3 前台与后台
├── deploy/               # Caddy、Docker、systemd、smoke run 脚本
└── docs/                 # OpenAPI、微服务、部署和测试交接文档

扩展文档

About

High-performance e-commerce backend built with Go, PostgreSQL, and Valkey.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Contributors