Files
geo/docs/claude_architecture_review_4.md
T
root de30497f59 feat: add tenant and user management with migrations, handlers, and tests
- Implemented tenant and user management features including:
  - Tenant creation and management with associated migrations.
  - User creation and management with associated migrations.
  - Tenant membership management with associated migrations.
  - Platform user roles management with associated migrations.
  - Quota management with associated migrations.
  - Article and template management with associated migrations.
- Added HTTP handlers for templates and workspaces.
- Created tests for protected and public routes.
- Introduced a script to check tenant scope in SQL queries.
- Documented task plan for backend completion and frontend foundation.
2026-04-01 00:58:42 +08:00

10 KiB
Raw Blame History

GEO 平台技术架构 V1 综合审查报告(第四轮)

以大厂技术架构师视角,综合前三轮 Claude 审查结论,对 geo-platform-ops-admin-tech-architecture-v1.md 进行终审,聚焦 可实施性运维简单性


一、前三轮审查问题收敛确认

第一轮 → 第二轮(功能闭环修复)

# 问题 状态
1 定时调度器缺失 已补齐 cmd/scheduler
2 Prompt 规则管理缺失 已补齐模块 + 表
3 模板管理缺失 已补齐 article_templates
4 数据库 Schema 缺失 已补齐 30+ 张表
5 GEO 指标采集方案缺失 已补齐问题驱动监控
6-12 版本管理 / 插件协议 / SSE / 路由 全部修复

第二轮 → 第三轮(5 万并发 + 一致性修复)

# 问题 状态
1 Gateway 扩展方案 §13.13.1 补充了 HPA + L7 负载均衡
2 SSE 连接策略 §13.10.3 改为默认轮询 + 按需 SSE
3 Scheduler 故障恢复 §13.13.2 补充了恢复策略
4 PostgreSQL 分区 §13.13.3 补充了审计/监控表分区
5 限流 + 熔断 §13.13.4 补充了租户级令牌桶 + Worker 并发池
6 配置管理方案 §13.13.6 补充了三级配置
7 Sponge 使用原则 §13.13.7 明确仅作脚手架
8 Migration 策略 §13.13.8 补充了 golang-migrate
9 租户隔离保障 §13.13.9 补充了 TenantScope

第三轮提出的残留问题

# 问题 当前状态
1 RAG 检索未纳入主架构图 §13.5.1 修订图已补 WG → QD 箭头;§5.5.2 新增 shared/retrieval
2 media-binding 接口不一致 ⚠️ 仍残留 — media-binding-v1.md 未同步更新
3 数据追踪 Schema 字段不一致 §13.11.6 已与监控方案对齐
4 knowledge_chunks_meta 表缺失 §13.11.4 已补充
5 retrieval_logs 落地策略 §13.11.4 末尾明确 V1 写文件日志
6 kol 角色权限不清 §6.2.3 补充了权限矩阵
7 article_templates.scope §13.11.2 已补充 scope 字段
8 LLM 超时 / 限流 / 并发池 §13.13.4 明确 30s 超时 + semaphore 50
9 事务边界 §13.13.9 明确了关键事务边界
10 额度预扣/退还策略 §13.7.3 明确了预扣 + 失败退还 + 对账

Tip

三轮审查共计约 40 项问题,当前仅剩 1 项残留(media-binding 文档未同步)。架构整体完成度非常高。


二、当前架构总体评价

2.1 架构复杂度评级

维度 现状 评价
进程数量 gateway + 2 API + scheduler + 4 worker = 8 个 ⚠️ 偏多但合理
中间件 PG + Redis + RabbitMQ + Qdrant + OSS = 5 个 ⚠️ 每个都必要,无冗余
数据库表 30+ 张 职责单一,不算过度
前端应用 2 后台 + 1 插件 合理
部署形态 Docker Compose(开发)+ K8s(生产) 标准

2.2 可实施性判断

Important

结论:可实施。 文档已覆盖从页面路由 → API → 数据模型 → 异步链路 → 部署的完整闭环。8 个功能页全部具备"可开发"条件。

但有以下前提条件:

  1. 团队至少需要 2 名 Go 后端 + 1 名前端 + 1 名 DevOps
  2. LLM/Embedding 供应商的限频和成本需提前确认
  3. 首版上线建议先控制在 1000 并发 内验证,而非直接冲 5 万

三、本轮发现的问题与建议

以下是前三轮未充分覆盖、但作为架构师我认为必须关注的问题:

🔴 必须修正(影响运维简单性或可实施性)

问题 1:V1 阶段 Gateway 存在过度设计的嫌疑

当前方案 cmd/gateway 作为独立进程做路由分发。但 V1 只有 2 个下游(tenant-api、platform-api),且 gateway 只做鉴权 + 路由转发。

运维影响:多一个进程 = 多一套部署/监控/日志/重启策略。

建议

  • V1 简化方案:将 gateway 的鉴权中间件合并到 tenant-apiplatform-api 中,由 Nginx/Ingress 按 /api/tenant/*/api/platform/* 做 L7 路由分发
  • 省掉 1 个进程,运维直接减负
  • V1.5 如果需要统一限流/审计注入,再独立出 gateway

Warning

如果选择保留 gateway,则必须确保它"足够薄"——只做路由 + 鉴权 + 限流,绝不放业务逻辑。否则它会变成系统的"上帝对象"。

我的想法是保留的,但第一版,只做路由 + 鉴权 + 限流

问题 28 个进程的运维负担

生产环境需要管理 8 个独立二进制(gateway + tenant-api + platform-api + scheduler + 4 worker),每个都需要:

  • 独立的 Dockerfile
  • 独立的 K8s Deployment + Service
  • 独立的日志采集
  • 独立的健康检查

建议

  • 4 个 Worker 在 V1 阶段考虑合并为 2 个 Worker 二进制
    • worker-main:消费 generate + knowledge + analytics 队列(按 routing key 区分)
    • worker-callback:消费 publish-callback 队列
  • 代码层面保持模块隔离(internal/jobs/ 下仍然分独立 package),只是 cmd/ 入口合并
  • 部署从 8 个进程降为 5 个tenant-api + platform-api + scheduler + worker-main + worker-callback

审核员想法: 不采纳,合并后系统用户体验会变差会更慢

问题 3viewer 角色仍未恢复

§6.2.2 中只有 tenant_admin / editor / kol。PRD 明确定义了"只读成员"。

审核员意图:viewer 角色没用,删除;kol其实也只是用户,但是这个角色比普通用户要更会写 prompt,别人可以直接使用她的分享码,使用她分享的prompt(其中主要信息,比如公司名啊,地址啊,还是得用户填)


🟡 建议优化(提升运维效率)

问题 4:缺少统一的错误码规范

文档定义了 40+ 个 API 接口,但没有统一的错误码体系。前后端联调时会出现:

  • 后端返回 {"error": "xxx"} 格式不统一
  • 前端无法区分"额度不足"和"LLM 超时"和"参数错误"

建议:定义统一错误响应和错误码段:

{
  "code": 40301,
  "message": "quota_insufficient",
  "detail": "生成额度不足,请升级套餐"
}
错误码段 含义
400xx 参数校验
401xx 认证
403xx 权限/额度
404xx 资源不存在
409xx 状态冲突
500xx 内部错误
503xx 下游不可用(LLM/Qdrant

问题 5:缺少日志规范与链路追踪

8 个进程的分布式架构,单个请求可能跨 gateway → API → MQ → Worker。排查问题需要:

  • 统一的 request_id / trace_id 贯穿全链路
  • 结构化日志(JSON 格式)
  • 日志级别规范

internal/shared/observability 模块已定义在目录结构中,但文档中没有展开。

建议

  • 所有进程使用统一日志库(如 zap
  • gateway 生成 request_id,全链路透传
  • MQ 消息 header 中携带 trace_id
  • 使用 Jaeger

问题 6Docker Compose 本地开发的启动顺序和依赖

5 个中间件 + 8 个服务的本地开发环境,docker-compose up 时:

  • PG 未就绪时 API 连接失败
  • RabbitMQ 未初始化队列时 Worker 报错
  • Qdrant 启动慢导致知识库功能不可用

建议

  • docker-compose.yml 中只放中间件(PG/Redis/RabbitMQ/Qdrant/MinIO
  • Go 服务本地 go run 开发,用 MakefileTask 统一启动
  • 提供一键初始化脚本:make dev-init(创建队列、运行 migration、创建 bucket

问题 7media-binding-v1.md 仍与主架构不一致

第三轮审查已指出,至今未同步。

建议:以主架构 §13.8 的插件会话模型为准,更新 media-binding-v1.md 的接口定义。


🟢 小问题(不阻塞但建议修正)

# 问题 说明
1 §8 旧交互图与 §13.5.1 修订图并存 建议删除旧图或标注"以 §13 为准"
2 §9 后端结构图缺 scheduler 节点 与实际设计不符
3 §5.5.9 platform/audit 只有标题无内容 已在 §13 补齐,建议填充或删除旧节
4 Vite 8 版本号存疑 §2.2 提到 Vite 8,截至 2026.3 Vite 最新稳定版需确认

四、运维简单性终审

4.1 运维维度打分

维度 评分 说明
部署复杂度 8 个进程偏多,建议合并 Worker
监控难度 有 observability 模块但未展开
故障排查 缺少 trace_id + 结构化日志规范
扩容简易度 gateway/API 无状态,HPA 就绪
配置管理 三级配置合理
数据库运维 分区策略已定义,缺归档自动化

4.2 V1 运维简化建议清单

# 简化措施 效果
1 合并 4 Worker 为 2 个 减少 2 个部署单元
2 合并 Gateway 到 Ingress 路由 减少 1 个部署单元
3 统一日志 + request_id 大幅降低排查成本
4 提供 make dev-init 新人 10 分钟启动开发环境
5 自动化 migration CI 避免手动 DDL 事故
6 审计/监控表自动归档脚本 避免磁盘满

五、最终结论

Important

可实施性: 通过

文档已从"宏观方案"演进为可直接进入开发的"闭环方案"。8 个功能页全部具备路由 → API → 模型 → 异步 → 存储 → 状态回传的完整链路。

运维简单性:⚠️ 有优化空间

当前 8 个进程 + 5 个中间件 对小团队偏重。建议 V1 合并 Worker、考虑去掉独立 Gateway,将运维实体控制在 5 个进程 以内。

如果只改三件事:

  1. 合并 Worker:4 个 Worker 二进制合并为 2 个(-2 部署单元)
  2. 统一日志与 trace:所有进程使用 zap + request_id 贯穿全链路
  3. 恢复 viewer 角色PRD 强制要求,不能漏

其余问题(错误码、旧图清理、media-binding 同步等)可在开发过程中逐步完善。