Appearance
何时新增微服务(决策清单)
与 architecture.md 配套。网关扩展步骤见仓库根目录 backend/MICROSERVICES.md(勿在本文写相对链接,否则 VitePress 构建会报 dead link)。TaskFlow 当前 Phase 1 为 Gateway + Sys + Acc;新增下游须改 GATEWAY_UPSTREAM_SERVICES、代理路由、部署与 Knife4j 分组,有固定工程成本。
已拆对的边界:Sys / Acc
| 维度 | Sys | Acc |
|---|---|---|
| 业务域 | 认证、用户、站点、权限、个人 C 端(记账等) | 站点进销存、生产、结算 |
| 数据 | 用户/角色/权限;mini_* 个人表 | 单据、库存、siteId 贯穿 |
| 发布与扩缩 | 登录、权限改造 | 现场写操作、重查询 |
按 业务域 + 数据边界 + 变更节奏 拆分,属于合理微服务划分。
五条决策(≥3 条为「是」再立项新进程)
| # | 问题 | 是 → 倾向拆服务 |
|---|---|---|
| 1 | 新业务能否单独画一张架构图,且与 Sys/Acc 几乎不共享写模型? | 独立域(支付、数仓、推送中心) |
| 2 | 是否需要 独立扩缩容(有监控/容量数据)? | 高峰与主 API 分离 |
| 3 | 是否 不同团队、不同发布周期,且接口契约稳定? | 组织边界 |
| 4 | 是否必须 分库 / 合规隔离,且接受无跨库事务? | 数据主权 |
| 5 | 是否必须 技术栈或运行时隔离(非 Nest 主进程、长任务 Worker)? | 异构运行时 |
多数新功能只满足 0~1 条(例如小程序「日常打卡」)→ 用 同进程内的 Nest 模块(apps/sys/modules/...),不要为单功能起端口。
不适合单独起服务的情况
- 只是功能变多(记账、清单计价、日常打卡同属 个人 C 端)。
- 仅为代码目录清晰(
modules/daily-check-in已足够)。 - 强依赖 Sys 用户与 JWT
sub,拆出仍要网关验签 + 共享库或反复调 Sys。 - 单模块就起第三进程(运维、健康检查、CI、文档成本高于收益)。
- 需要与 Sys/Acc 同一事务 写库(拆服务后更难)。
个人 C 端 / 首页「常用」怎么放
| 能力 | 当前 | 建议 |
|---|---|---|
| 个人记账 | POST /sys/bookkeeping/* | P0 保持 Sys 模块 |
| 清单计价 | POST /sys/config-quote/* | 同上 |
| 日常打卡(规划) | — | P0:POST /sys/daily-check-in/*,见 miniapp-daily-check-in.md |
约束:miniapp-bookkeeping-user-scope(openid 即用、无 siteId)。打卡与记账共用同一产品规则,扩展 rule 路径即可,不必先拆服务。
可选 Phase 2:整块迁到 personal 服务
当 整块个人域 同时满足:独立团队/发布、C 端流量需单独扩容、接口已稳定,再考虑 一个 新下游(勿「打卡一个服务、记账一个服务」):
text
/api/sys/* → Sys(认证、站点、RBAC、mobile-shell 站点入口)
/api/acc/* → Acc
/api/personal/* → Personal(bookkeeping、config-quote、daily-check-in)| 项 | 建议 |
|---|---|
| 鉴权 | 仍在 Gateway 校验 JWT;Personal 只读 x-user-id 等网关头 |
| 数据库 | 首期可 同 MySQL 实例、mini_* 表不变,仅进程分离;真分库后置 |
| 工程 | 见 backend/MICROSERVICES.md:GATEWAY_UPSTREAM_SERVICES、代理 @All、SYS_SERVICE_URL 同级 env |
立项前用本文 五条决策 评审;未通过则维持 Sys 模块。
工程 checklist(新增下游时)
- [ ]
gateway-services.config.ts注册上游与pathSegment - [ ]
gateway-proxy.controller.ts增加/api/<name>/*、/api/no-check/<name>/* - [ ] 环境变量、Docker/compose、
backend/.env.example - [ ] 健康检查
POST /api/no-check/<name>/health/page - [ ] Knife4j 网关分组(若暴露文档)
- [ ]
check:route-registry/ 权限 seed(若有路由 Guard) - [ ] 发版与
pnpm run check流水线增加 build/start 目标
相关文档
- miniapp-daily-check-in.md — 日常打卡 P0(Sys 模块)
- roadmap-four-tracks.md — Track 3 C 端与 Personal 服务排队
- track3-bookkeeping-phase2.md — 记账 Phase 2 清单