12-development-roadmap-todo.md 13 KB

GoFrame 重构开发计划 TODO

本文档用于规划 new_sdk 从当前 PHP/ThinkPHP 项目迁移到 GoFrame 技术栈的阶段路线。计划先排 5 个版本,每个版本都要有明确边界,避免一开始就陷入“大重写”。

0. 总体原则

  • 先搭底座,再迁业务。
  • 先做可观测、配置、数据库访问、协议兼容,再做复杂支付。
  • 先做模块化单体,不急着拆微服务。
  • 新系统先兼容老 SDK 协议和老数据表,后续再逐步优化字段、状态和接口。
  • 每个版本都必须可运行、可回滚、可验收。
  • 支付、订单、发货、渠道回调必须有幂等和日志,不允许只靠控制器临时逻辑。

1. 版本总览

版本 名称 核心目标 主要交付
V0.1 技术栈底座版 搭建 GoFrame 基础工程和运行环境 项目骨架、配置、日志、DB、Redis、Docker、基础监控
V0.2 基础账户体系版 跑通前后台基础账号和权限 后台管理员、前台用户、登录、Token、RBAC 雏形
V0.3 SDK 协议与基础业务版 兼容老 SDK API 协议,迁移低风险读取接口 AES/sign/token、游戏配置、版本、公告、礼包查询
V0.4 支付订单核心版 建立订单、支付、回调、发货状态机 下单、支付渠道抽象、回调幂等、Redis Stream、CP 通知
V0.5 渠道与运营闭环版 迁移 complex 渠道、运营能力和观测闭环 渠道适配器、优惠券/礼包、Dashboard、告警、灰度切流

2. V0.1 技术栈底座版

版本目标

搭建一个可运行、可配置、可观测、可部署的 GoFrame 服务底座。这个版本不追求业务完整,只解决工程基础。

V0.1 必须优先采用 GoFrame 官方脚手架和轻量 Docker 镜像策略,避免一开始就做出偏离框架习惯、镜像体积过大、后续维护成本高的工程底座。

技术范围

  • Go 1.26.x
  • GoFrame v2
  • GoFrame CLI:gf initgf gen daogf rungf build
  • MySQL
  • Redis
  • Redis Stream 预留
  • OpenAPI
  • Docker Compose
  • Nginx
  • Prometheus
  • Grafana
  • Loki
  • Tempo
  • OpenTelemetry
  • Grafana Alloy

工程约束

  • 项目必须使用 gf init 初始化,不手写一套偏离 GoFrame 官方习惯的目录。
  • 保留 GoFrame 官方目录结构,再根据业务复杂度补充 domainadapterprovider 等目录。
  • 数据库访问层优先使用 gf gen dao 生成。
  • 核心支付、订单、资产流水等高风险 SQL 可以保留手写 SQL 或独立 repository,不强行全部套 DAO。
  • Docker 必须使用 multi-stage build。
  • 生产镜像不能直接使用 golang 构建镜像。
  • V0.1 初期允许使用 alpine 作为运行镜像,便于排查问题。
  • 稳定后生产候选优先使用 distroless/static-debian12
  • 暂不优先使用 scratch,避免证书、时区、DNS、调试成本过高。
  • 镜像内不放源码、不放编译工具、不放 .env、不放证书私钥和支付密钥。
  • 配置通过环境变量、挂载配置或配置中心注入。
  • Docker Compose 仅用于本地开发和测试,不直接等同于生产部署方案。

TODO

  • 使用 gf init 初始化 GoFrame 项目结构。
  • 固化 GoFrame CLI 版本和 Go 版本。
  • 设计目录结构:apiinternal/controllerinternal/serviceinternal/daointernal/modelinternal/logicinternal/pkg
  • 在官方目录基础上预留:internal/domaininternal/adapterinternal/provider
  • 接入配置系统,区分 localdevprod
  • 接入 MySQL,确认连接池、超时、慢查询日志。
  • 配置 gf gen dao,先生成基础 DAO/Entity/Model。
  • 接入 Redis,确认连接池和 key 前缀。
  • 设计统一响应结构。
  • 设计统一错误码结构。
  • 设计统一日志字段:trace_idrequest_idappiduser_idorder_nochannelroute
  • 接入 OpenAPI 文档生成。
  • 编写 multi-stage Dockerfile。
  • 构建阶段使用 golang:<version>-alpine 或官方 Go 镜像。
  • 运行阶段初期使用 alpine,稳定后评估切换 distroless/static-debian12
  • 确认运行镜像中包含 CA 证书和正确时区。
  • 编写 Docker Compose:Go 服务、MySQL 可选、Redis、Nginx、Prometheus、Grafana、Loki、Tempo、Alloy。
  • 接入 Prometheus 基础指标:请求量、耗时、错误数。
  • 接入 Loki JSON 日志采集。
  • 接入 OpenTelemetry trace_id 生成和透传。
  • 编写健康检查接口:/health/ready

验收标准

  • 本地 docker compose up 后服务可启动。
  • /health 返回正常。
  • Go 服务可以连接 MySQL 和 Redis。
  • Grafana 可以看到基础请求指标。
  • Loki 可以按 trace_id 查询日志。
  • OpenAPI 页面可以访问。
  • Docker 生产候选镜像不包含 Go 编译器。
  • Docker 生产候选镜像不包含项目源码。
  • Docker 镜像体积符合预期,避免直接使用 golang runtime。
  • gf gen dao 可以稳定生成数据库访问层。

暂不做

  • 不迁移支付。
  • 不迁移 complex 渠道。
  • 不改老数据库结构。
  • 不拆微服务。

3. V0.2 基础账户体系版

版本目标

搭建基础前后台账户体系,为后续管理端、运营端、SDK 用户体系迁移做准备。

这里的“前台账户”和“后台账户”要分清:

  • 后台账户:运营/管理人员使用,用于管理游戏、渠道、订单、礼包等。
  • 前台账户:SDK 用户体系,对应玩家登录、注册、实名、子账号等业务。

TODO

  • 梳理当前后台管理员表、角色表、权限表。
  • 梳理当前 SDK 用户表、实名表、设备表、子账号表。
  • 设计后台管理员登录接口。
  • 设计后台 RBAC 权限模型。
  • 设计后台菜单、按钮、接口权限的关系。
  • 设计前台用户基础模型。
  • 设计用户登录 Token 模型。
  • 兼容老 Token 或设计 Token 兼容层。
  • 接入密码加密策略,确认是否兼容老密码算法。
  • 接入登录日志。
  • 接入操作日志。
  • 设计账号封禁、解封、状态变更流程。
  • 编写账户相关单元测试。

交付接口

  • 后台登录。
  • 后台退出。
  • 后台当前用户信息。
  • 后台权限菜单。
  • 前台用户登录雏形。
  • 前台用户 Token 校验。

验收标准

  • 后台账号可以登录并获取权限。
  • 后台接口可以通过中间件校验权限。
  • 前台用户可以完成登录和 Token 校验。
  • 登录日志和操作日志可查。
  • Grafana/Loki 能按用户和请求 ID 查到登录链路。

暂不做

  • 不做完整支付。
  • 不做 complex 渠道登录。
  • 不做复杂运营功能。

4. V0.3 SDK 协议与基础业务版

版本目标

开始承接老 application/api 的基础能力,优先迁移低风险读取接口和 SDK 公共协议层。

TODO

  • 实现 SDK 请求解析中间件。
  • 实现 AES 解密兼容。
  • 实现 MD5 sign 校验兼容。
  • 实现 appid/appkey 配置校验。
  • 实现统一响应加密兼容。
  • 实现 debug 明文请求兼容。
  • 实现 auth_code/token 解析兼容。
  • 整理并迁移游戏基础信息接口。
  • 整理并迁移版本配置接口。
  • 整理并迁移公告接口。
  • 整理并迁移礼包列表/福利查询接口。
  • 整理并迁移区服/角色查询类接口。
  • 为 AES/sign/token 准备 golden tests。
  • 为低风险接口做 PHP/Go 响应对比。

交付接口

  • SDK 加解密协议。
  • SDK 签名校验。
  • 游戏配置读取。
  • 版本信息读取。
  • 公告读取。
  • 礼包/福利读取。
  • 区服/角色基础查询。

验收标准

  • 老 SDK 请求样本在 Go 侧可以正确解析。
  • Go 响应格式与 PHP 兼容。
  • AES/sign/token golden tests 通过。
  • 低风险读取接口可灰度切流。
  • 日志里能按 appidroutetrace_id 追踪请求。

暂不做

  • 不迁移真实支付回调。
  • 不迁移复杂渠道适配器。
  • 不调整客户端协议。

5. V0.4 支付订单核心版

版本目标

建立支付、订单、回调、发货、补单的核心闭环。这个版本是整个重构里风险最高的一版,必须先做状态机和幂等。

TODO

  • 梳理支付相关表:订单表、CP 通知表、平台币表、优惠券表、流水表。
  • 明确订单状态机。
  • 明确支付回调幂等规则。
  • 明确金额单位,统一使用整数分或 decimal。
  • 设计支付渠道接口 PaymentProvider
  • 设计订单服务 OrderService
  • 设计回调服务 NotifyService
  • 设计 CP 通知任务。
  • 接入 Redis Stream,用于 CP 通知、补单、异步任务。
  • 实现支付下单接口。
  • 实现 1 到 2 个低风险支付渠道。
  • 实现支付回调验签。
  • 实现订单状态更新事务。
  • 实现重复回调处理。
  • 实现 CP 通知重试。
  • 实现补单入口。
  • 实现支付相关 Dashboard。
  • 实现支付失败告警。

交付接口/能力

  • 创建订单。
  • 支付参数生成。
  • 支付异步回调。
  • 订单查询。
  • CP 通知。
  • CP 通知重试。
  • 补单。
  • 支付日志和支付指标。

验收标准

  • 重复支付回调不会重复发货。
  • 金额不一致会拒绝并记录告警日志。
  • CP 通知失败不会导致第三方支付回调无限失败。
  • Redis Stream pending 可监控。
  • 支付回调可通过 order_no 查日志和 trace。
  • 支付状态机有单元测试和集成测试。

暂不做

  • 不一次性迁移所有支付渠道。
  • 不在这个版本重构全部历史订单表。
  • 不改变现有 CP 回调协议。

6. V0.5 渠道与运营闭环版

版本目标

迁移 complex 联运渠道能力,并补齐运营类功能和观测闭环。这个版本重点是渠道适配器模式,不允许把渠道逻辑重新堆进大控制器。

TODO

  • 梳理 complex 渠道清单。
  • 按流量和风险给渠道排序。
  • 设计 ComplexAdapter 接口。
  • 设计渠道登录统一结果模型。
  • 设计渠道支付回调统一结果模型。
  • 设计渠道特殊参数扩展点。
  • 优先迁移 3 到 5 个高价值渠道。
  • 为每个渠道准备登录样本和支付回调样本。
  • 实现渠道适配器注册表。
  • 实现渠道级指标:登录成功率、支付成功率、验签失败率。
  • 实现渠道级日志字段:channelgame_idappidorder_no
  • 迁移优惠券基础功能。
  • 迁移礼包码基础功能。
  • 迁移运营查询类接口。
  • 完善后台运营页面接口。
  • 配置渠道异常告警。
  • 设计灰度切流方案。

交付接口/能力

  • complex 渠道登录。
  • complex 渠道支付回调。
  • 渠道特殊参数接口。
  • 优惠券领取/使用。
  • 礼包码领取/核销。
  • 后台运营查询接口。
  • 渠道 Dashboard。

验收标准

  • 每个迁移渠道都有 contract test。
  • 渠道失败率可以在 Grafana 按 channel 查看。
  • 渠道回调可通过 order_no 追踪。
  • 灰度切流时可回退到 PHP。
  • 运营人员可以通过后台查看核心数据。

暂不做

  • 不一次性迁移所有 complex 渠道。
  • 不改第三方渠道协议。
  • 不把运营后台做成完整新产品,只做重构需要的核心闭环。

7. 版本后续预留

V0.6 之后可以考虑:

  • 全量支付渠道迁移。
  • 全量 complex 渠道迁移。
  • 管理后台完整重构。
  • 数据表清理和字段规范化。
  • Redis key 规范化。
  • 服务拆分。
  • Kubernetes 部署。
  • 更完整的风控、防沉迷、实名、数据报表体系。

8. 当前最优先 TODO

在真正进入 V0.1 开发前,还需要完成以下前置工作:

  • 生成 06-database-schema-inventory.md:全量表结构、字段、索引。
  • 生成 07-api-table-access-map.md:API 代码读写表关系。
  • 生成 08-business-domain-data-map.md:业务域和数据表映射。
  • 生成 09-payment-and-order-state-machine.md:支付订单状态机。
  • 确认 GoFrame 项目目录放置位置。
  • 确认是否需要保留 PHP 与 Go 并行灰度。
  • 确认第一版后台是否使用现有管理后台页面,还是新建 Go 后台 API。

9. 推荐执行顺序

先做文档和数据映射
  -> V0.1 技术栈底座
  -> V0.2 账户体系
  -> V0.3 SDK 协议和基础业务
  -> V0.4 支付订单核心
  -> V0.5 渠道和运营闭环

这个顺序的核心原因:支付和渠道是最高风险模块,必须建立在协议、账户、日志、指标、队列、状态机都清楚的基础上。