Files
ai-paas-comparison/docs/02-系统架构设计.md
T
qyyfw d9a8a0e93c docs: 补全基础设施文档 (DB设计/API规范/MiMoCode配置)
- 03-数据库设计.md: ER图 + 12张表定义 + Redis数据结构 + Migration策略
- 04-API接口规范.md: OpenAPI 3.0 约定 + 全部接口定义 (Auth/APIKey/LLM/Billing/Registry/Skills/IM/Admin)
- 05-AGENTS-MiMoCode配置.md: MiMo Code 核心配置文件,包含项目结构/技术栈/开发规范/模块说明

至此 docs/ 目录包含完整的6份基础设计文档,可作为 MiMo Code 的上下文输入
2026-06-27 10:51:13 +00:00

454 lines
31 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI PaaS 商业平台 — 系统架构设计
> 版本: 1.0 | 日期: 2026-06-27
> 基于: 5 平台交叉验证共识 + 方案二(稳扎稳打)
---
## 1. 架构总览
### 1.1 分层架构图
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 用户入口层 (Access) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│
│ │ Web UI │ │ REST API │ │ WebSocket│ │ CLI │ │ IM Bot ││
│ │ (React) │ │ │ │ (SSE) │ │ (Phase5) │ │ (Phase4) ││
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘│
└───────┼──────────────┼──────────────┼──────────────┼──────────────┼──────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ API Gateway (Apache APISIX 3.15+) │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
│ │jwt-auth │ │key-auth │ │limit- │ │api- │ │ proxy-rewrite │ │
│ │JWT验证 │ │Key验证 │ │count │ │breaker │ │ + CORS │ │
│ │ │ │ │ │限流 │ │熔断 │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────────────┘ │
│ │
│ 路由表: │
│ /api/v1/auth/* → auth-service:8081 │
│ /api/v1/capabilities/* → registry-service:8082 │
│ /v1/chat/completions → openapi-gateway:8083 │
│ /api/v1/billing/* → billing-service:8084 │
│ /api/v1/skills/* → skills-service:8085 │
│ /api/v1/admin/* → admin-service:8086 │
│ /api/v1/im/* → im-gateway:8087 │
│ /api/v1/mcp/* → mcp-proxy:8088 │
│ /api/v1/agent/* → agent-proxy:8089 │
└─────────────────────────────┬───────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 核心业务层 (Core Services) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────────┐ │
│ │ auth-service │ │ billing-svc │ │ registry-service │ │
│ │ Go :8081 │ │ Go :8084 │ │ Go :8082 │ │
│ │ │ │ │ │ │ │
│ │ • JWT 验证 │ │ • Credit 扣费│ │ • 能力注册/注销 │ │
│ │ • API Key │ │ • 余额查询 │ │ • 版本管理 │ │
│ │ • RBAC 角色 │ │ • 流水记录 │ │ • 服务发现 │ │
│ │ • 租户上下文 │ │ • 订阅管理 │ │ • 状态管理 │ │
│ │ • 注册/登录 │ │ • 充值 │ │ • gRPC + REST │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────────┬───────────────┘ │
│ │ │ │ │
│ ┌──────┴───────┐ ┌──────┴───────┐ ┌─────────────┴───────────────┐ │
│ │openapi-gw │ │ metering-svc │ │ skills-service │ │
│ │Go :8083 │ │ Go :8090 │ │ Go :8085 │ │
│ │ │ │ │ │ │ │
│ │• OpenAI API │ │• Kafka消费 │ │• 技能发布/审核 │ │
│ │• 请求拦截链 │ │• PG持久化 │ │• 市场浏览/搜索 │ │
│ │• 流式 SSE │ │• 预聚合 │ │• 购买/分成 │ │
│ │• 用量上报 │ │• 用量查询 │ │• 全文搜索 │ │
│ └──────┬───────┘ └──────────────┘ └─────────────────────────────┘ │
│ │ │
│ ┌──────┴───────┐ ┌──────────────┐ ┌─────────────────────────────┐ │
│ │llm-router │ │im-gateway │ │ admin-service │ │
│ │Go :8091 │ │ Go :8087 │ │ Go :8086 │ │
│ │ │ │ │ │ │ │
│ │• 多平台适配 │ │• 微信/QQ/钉钉│ │• 用户管理 │ │
│ │• 智能路由 │ │• 会话管理 │ │• 租户管理 │ │
│ │• 故障转移 │ │• 消息收发 │ │• 能力审核 │ │
│ │• 连接池 │ │• 上下文注入 │ │• 系统配置 │ │
│ └──────────────┘ └──────────────┘ └─────────────────────────────┘ │
└─────────────────────────────┬───────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ AI 能力层 (AI Capabilities) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐│
│ │ LangFlow │ │ mcp-hub │ │ Milvus │ │ vLLM ││
│ │ [开源] │ │ [开源] │ │ [开源] │ │ [开源] ││
│ │ Agent 编排 │ │ MCP 服务管理 │ │ 向量数据库 │ │ 模型推理 ││
│ │ :7860 │ │ :3001 │ │ :19530 │ │ :8000 ││
│ └──────────────┘ └──────────────┘ └──────────────┘ └────────────┘│
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 外部 LLM 平台 (External LLM) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐│
│ │ DeepSeek │ │ 千问 │ │ 豆包 │ │ 智谱 │ │ 百度/元宝 ││
│ │ API │ │ API │ │ API │ │ API │ │ API ││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────────┘│
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 基础设施层 (Infrastructure) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐│
│ │PostgreSQL│ │ Redis 7 │ │ Kafka │ │ Keycloak │ │ Prometheus ││
│ │ 16 │ │ │ │ 3.x │ │ 25+ │ │ + Grafana ││
│ │ 主数据库 │ │ 缓存+Lua │ │ 事件总线 │ │ 认证 │ │ 监控 ││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────────┘│
└─────────────────────────────────────────────────────────────────────────┘
```
---
## 2. 核心数据流
### 2.1 LLM 调用 + 计费完整流程
```
用户代码 APISIX openapi-gw billing-svc
│ │ │ │
│ POST /v1/chat/completions │ │ │
│ Authorization: Bearer xxx │ │ │
├──────────────────────────→│ │ │
│ │ jwt-auth 验证 │ │
│ │ 提取 tenant_id │ │
│ │ 注入 X-Tenant-Id │ │
│ ├───────────────────→│ │
│ │ │ │
│ │ │ 1. API Key 验证 │
│ │ │ (→ auth-svc) │
│ │ │ │
│ │ │ 2. 余额检查 │
│ │ │ GET /balance │
│ │ ├───────────────────→│
│ │ │ balance: 12580 │
│ │ │←───────────────────│
│ │ │ │
│ │ │ 3. 路由到 LLM │
│ │ │ Router │
│ │ │ │
│ │ │ llm-router │
│ │ │ ├─选择 DeepSeek │
│ │ │ ├─调用 API │
│ │ │ └─返回 + usage │
│ │ │ │
│ │ │ 4. 计费扣减 │
│ │ │ POST /meter │
│ │ │ {tokens: 1280} │
│ │ ├───────────────────→│
│ │ │ Redis Lua 扣费 │
│ │ │ balance: 12580 │
│ │ │ → 11300 │
│ │ │←───────────────────│
│ │ │ │
│ │ │ 5. 异步上报用量 │
│ │ │ → Kafka │
│ │ │ │
│ {choices: [...], │ │ │
│ usage: { │ │ │
│ prompt_tokens: 800, │ │ │
│ completion_tokens: 480│ │ │
│ }} │ │ │
│←──────────────────────────│←───────────────────│ │
│ │ │ │
```
### 2.2 流式 SSE 响应流程
```
用户浏览器 APISIX openapi-gw llm-router
│ │ │ │
│ POST /v1/chat/completions │ │ │
│ stream: true │ │ │
├──────────────────────────→│───────────────────→│───────────────────→│
│ │ │ │
│ │ │ HTTP 200 │
│ │ │ Content-Type: │
│ │ │ text/event-stream │
│←──────────────────────────│←───────────────────│←───────────────────│
│ │ │ │
│ data: {"choices":[{ │ │ │
│ "delta":{"content":"你"}}│ │ │
│←──────────────────────────│←───────────────────│←───────────────────│
│ │ │ │
│ data: {"choices":[{ │ │ │
│ "delta":{"content":"好"}}│ │ │
│←──────────────────────────│←───────────────────│←───────────────────│
│ │ │ │
│ data: [DONE] │ │ │
│←──────────────────────────│←───────────────────│←───────────────────│
│ │ │ │
│ │ │ 4. 计费扣减 │
│ │ │ 5. 上报用量 │
```
---
## 3. 服务间通信
### 3.1 同步调用(HTTP/gRPC)
| 调用方 | 被调用方 | 协议 | 说明 |
|--------|---------|------|------|
| APISIX | 所有后端服务 | HTTP | 路由转发 |
| openapi-gw | auth-service | HTTP | JWT 验证 |
| openapi-gw | billing-svc | HTTP | 余额检查+扣费 |
| openapi-gw | llm-router | HTTP | LLM 调用 |
| openapi-gw | registry-service | gRPC | 能力查询(内部) |
| skills-service | billing-svc | HTTP | 购买扣费 |
| im-gateway | llm-router | HTTP | LLM 调用 |
| registry-service | mcp-hub | HTTP | MCP 同步 |
| registry-service | langflow | HTTP | Agent 同步 |
### 3.2 异步通信(Kafka)
| 生产者 | Topic | 消费者 | 说明 |
|--------|-------|--------|------|
| openapi-gw | usage.events | metering-svc | LLM 用量上报 |
| billing-svc | billing.events | metering-svc | 计费事件 |
| registry-svc | capability.events | mcp-hub, langflow | 能力变更通知 |
### 3.3 缓存策略(Redis)
| Key 模式 | 类型 | TTL | 说明 |
|----------|------|-----|------|
| auth:session:{token} | Hash | 24h | 用户会话 |
| auth:apikey:{key_hash} | Hash | 1h | API Key 缓存 |
| billing:balance:{tenant_id} | String | - | Credit 余额(毫 Credit) |
| billing:idempotency:{tenant_id}:{key} | Hash | 24h | 幂等键 |
| billing:daily:{tenant_id}:{YYYY-MM-DD} | Hash | 7d | 每日统计 |
| billing:subscription:{tenant_id} | Hash | - | 订阅信息 |
| ratelimit:{tenant_id}:{window} | String | 60s | 限流计数 |
| im:session:{platform}:{user_id} | Hash | 24h | IM 会话上下文 |
---
## 4. 数据库架构
### 4.1 PostgreSQL Schema 概览
```
┌─────────────────────────────────────────────────────────┐
│ PostgreSQL 16 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────────┐ │
│ │ tenants │ │ users │ │ capabilities │ │
│ │ (租户) │←─│ (用户) │ │ (能力) │ │
│ └──────┬──────┘ └─────────────┘ └───────┬────────┘ │
│ │ │ │
│ ┌──────┴──────┐ ┌─────────────┐ ┌───────┴────────┐ │
│ │ subscriptions│ │ api_keys │ │ cap_versions │ │
│ │ (订阅) │ │ (API密钥) │ │ (能力版本) │ │
│ └─────────────┘ └─────────────┘ └────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────────┐ │
│ │credit_trans │ │ token_usage │ │ skills │ │
│ │(Credit流水) │ │ (Token用量) │ │ (技能) │ │
│ │ 不可变 │ │ 按月分区 │ │ │ │
│ └─────────────┘ └─────────────┘ └───────┬────────┘ │
│ │ │
│ ┌─────────────┐ ┌─────────────┐ ┌───────┴────────┐ │
│ │skill_purchases│ │ im_sessions │ │ im_messages │ │
│ │(技能购买) │ │ (IM会话) │ │ (IM消息) │ │
│ └─────────────┘ └─────────────┘ └────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ All tables have RLS policies based on tenant_id │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
### 4.2 RLS 策略
```sql
-- 所有表启用 RLS
ALTER TABLE tenants ENABLE ROW LEVEL SECURITY;
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
ALTER TABLE capabilities ENABLE ROW LEVEL SECURITY;
-- ... 所有表
-- 通用策略: 基于 tenant_id 隔离
CREATE POLICY tenant_isolation ON capabilities
USING (tenant_id = current_setting('app.tenant_id')::uuid);
-- 管理员可以看所有数据
CREATE POLICY admin_full_access ON capabilities
USING (current_setting('app.user_role') = 'admin');
```
---
## 5. 安全架构
### 5.1 认证流程
```
┌──────────────┐
│ Keycloak │
│ (认证中心) │
└──────┬───────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户登录 │ │ API Key │ │ 服务间 │
│ JWT 签发 │ │ Hash验证 │ │ Client │
│ │ │ │ │ Credentials│
└──────────┘ └──────────┘ └──────────┘
JWT Payload:
{
"sub": "user-uuid",
"tenant_id": "tenant-uuid",
"role": "developer",
"exp": 1719552000,
"iat": 1719548400
}
```
### 5.2 API Key 安全
```
用户创建 Key:
明文 Key: aip_xxxxxxxxxxxxxxxxxxxxxxxx (仅展示一次)
存储: SHA-256(aip_xxx) → db
用户调用:
Header: Authorization: Bearer aip_xxxxxxxxxxxxxxxxxxxxxxxx
验证: SHA-256(bearer_token) → 查 DB 匹配
```
### 5.3 敏感数据加密
| 数据 | 加密方式 | 说明 |
|------|---------|------|
| API Key 明文 | 不存储 | 仅展示一次 |
| API Key 哈希 | SHA-256 | 用于验证 |
| LLM API Key | AES-256-GCM | 存储在 DB |
| 用户密码 | bcrypt | Keycloak 管理 |
| Credit 余额 | 明文(整数) | 需要原子操作 |
---
## 6. 部署架构
### 6.1 开发环境 (Docker Compose)
```yaml
# docker-compose.yml 核心服务
services:
# 基础设施
postgresql: # :5432
redis: # :6379
kafka: # :9092
keycloak: # :8080
apisix: # :9080 (HTTP) / :9443 (HTTPS)
etcd: # :2379
# 自研服务
auth-service: # :8081
registry-service: # :8082
openapi-gateway: # :8083
billing-service: # :8084
skills-service: # :8085
admin-service: # :8086
im-gateway: # :8087
metering-service: # :8090
llm-router: # :8091
# 前端
web: # :3000 (React Dev Server)
admin: # :3001 (React Dev Server)
# 开源 AI 服务
langflow: # :7860
mcp-hub: # :3001
milvus: # :19530
# 监控
prometheus: # :9090
grafana: # :3002
```
### 6.2 生产环境 (Kubernetes)
```
┌─────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌────────────────────────────────────────────┐ │
│ │ Namespace: aipaaS-prod │ │
│ │ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ APISIX │ │ APISIX │ │ APISIX │ │ │
│ │ │ Pod x3 │ │ Pod x3 │ │ Pod x3 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ auth-svc│ │billing │ │registry │ │ │
│ │ │ x2 │ │ x2 │ │ x2 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │llm-route│ │openapi │ │skills │ │ │
│ │ │ x2 │ │ x2 │ │ x2 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │
│ │ HPA: CPU > 70% 时自动扩容 │ │
│ │ PDB: 至少保留 1 个 Pod 可用 │ │
│ └────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────┐ │
│ │ Namespace: aipaaS-data │ │
│ │ PostgreSQL (Primary + Replica) │ │
│ │ Redis (Sentinel) │ │
│ │ Kafka (3 Brokers) │ │
│ │ Milvus (Standalone) │ │
│ └────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────┐ │
│ │ Namespace: aipaaS-monitor │ │
│ │ Prometheus + Grafana + Loki │ │
│ └────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
```
---
## 7. 技术栈汇总
| 层级 | 技术 | 版本 | 许可证 | 用途 |
|------|------|------|--------|------|
| **前端** | React + TypeScript | 18+ / 5+ | MIT | Web UI |
| **UI 框架** | Ant Design Pro | 6+ | MIT | 组件库 |
| **图表** | ECharts | 5+ | Apache 2.0 | 数据可视化 |
| **后端** | Go | 1.22+ | BSD-3 | 核心服务 |
| **AI 服务** | Python | 3.11+ | PSF | LangFlow/MCP |
| **数据库** | PostgreSQL | 16+ | PostgreSQL | 主存储 |
| **缓存** | Redis | 7+ | BSD-3 | 缓存+Lua计费 |
| **消息队列** | Kafka | 3.x+ | Apache 2.0 | 事件总线 |
| **向量库** | Milvus | 2.x+ | Apache 2.0 | RAG |
| **认证** | Keycloak | 25+ | Apache 2.0 | SSO |
| **网关** | Apache APISIX | 3.15+ | Apache 2.0 | API Gateway |
| **Agent** | LangFlow | latest | MIT | 工作流编排 |
| **MCP** | mcp-hub | latest | MIT | MCP 管理 |
| **监控** | Prometheus+Grafana | latest | Apache 2.0 | 可观测性 |
| **开发工具** | MiMo Code | latest | Apache 2.0 | AI 编程 |
---
*文档结束*