Skip to content

何时新增微服务(决策清单)

architecture.md 配套。网关扩展步骤见仓库根目录 backend/MICROSERVICES.md(勿在本文写相对链接,否则 VitePress 构建会报 dead link)。TaskFlow 当前 Phase 1 为 Gateway + Sys + Acc;新增下游须改 GATEWAY_UPSTREAM_SERVICES、代理路由、部署与 Knife4j 分组,有固定工程成本。

已拆对的边界:Sys / Acc

维度SysAcc
业务域认证、用户、站点、权限、个人 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.mdGATEWAY_UPSTREAM_SERVICES、代理 @AllSYS_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 目标

相关文档

TaskFlow 内部文档 Released under the MIT License.