- Remove old review reports (keep latest only) - Move docs/ to deploy/docs-backup/ - Move performance-testing/ to deploy/ - Clean up test output files - Organize root directory
19 KiB
19 KiB
Sub2API 模块分析汇总报告
一、项目概述
Sub2API是一个AI API网关平台,用于分发和管理AI产品订阅的API配额。用户通过平台生成的API Key访问上游AI服务(Claude、OpenAI、Gemini等),平台负责认证、计费、负载均衡和请求转发。
二、模块架构总览
┌─────────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + TypeScript) │
├─────────────────────────────────────────────────────────────────┤
│ API Gateway 核心模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 路由分发 │ │ 账号选择 │ │ 请求转发 │ │ 故障转移 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 认证与授权模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ JWT认证 │ │API Key │ │OAuth登录 │ │ TOTP │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 用户与API Key管理模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 用户管理 │ │ API Key │ │ 分组管理 │ │
│ └─────────┘ └─────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 账户管理模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 账号CRUD│ │ 账号测试│ │ 状态管理 │ │ 分组管理 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 计费与配额模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用量记录│ │ 计费计算│ │ 速率限制 │ │ 余额管理 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 调度与负载均衡模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 负载感知│ │ 故障转移│ │ 粘性会话 │ │
│ └─────────┘ └─────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 用量统计与日志模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ 用量记录│ │ 数据分析│ │ 数据导出 │ │
│ └─────────┘ └─────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 订阅与兑换码模块 │
│ ┌─────────┐ ┌─────────┐ │
│ │ 订阅管理│ │ 兑换码 │ │
│ └─────────┘ └─────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 运营与监控模块 │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 系统监控│ │ 告警管理│ │ 运维日志 │ │ 备份恢复 │ │
│ └─────────┘ └─────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Sora与媒体模块 │
│ ┌─────────┐ ┌─────────┐ │
│ │ 视频生成│ │ 媒体存储│ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────────┘
三、模块依赖关系
3.1 详细依赖图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 请求入口 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ /v1/messages│ │/v1/chat/ │ │ /v1beta/ │ │ /sora/ │ │
│ │ (Claude) │ │completions │ │ generateContent│ │ v1/creative│ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
└──────────┼────────────────┼────────────────┼────────────────┼───────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 认证中间件层 │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ api_key_auth.go │ │
│ │ APIKeyService ──► BillingCacheService ──► SubscriptionService │ │
│ │ (Key验证) (余额检查) (订阅验证) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 网关核心层 (gateway_service.go) │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ GatewayService │ │
│ │ │ │
│ │ SelectAccountWithLoadAwareness() ──► ConcurrencyService │ │
│ │ (负载感知选择) (并发槽位控制) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ RecordUsage() ──► BillingService ──► BillingCacheService │ │
│ │ (用量记录) (计费) (缓存) │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ 下游服务层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │BillingService│ │Concurrency │ │Identity │ │RateLimit │ │
│ │ │ │Service │ │Service │ │Service │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────────┘ └──────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │UserRepo │ │AccountRepo │ │Redis Cache │ │HTTPUpstream │ │
│ │(余额/费率) │ │(账号选择) │ │(实时数据) │ │(上游调用) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
3.2 模块依赖矩阵
| 模块 | 被依赖 | 依赖 | 共享数据 |
|---|---|---|---|
| 认证模块 | Gateway | UserRepo | User, APIKey |
| 账户模块 | Gateway, Billing | AccountRepo, GroupRepo | Account, Group |
| 计费模块 | Gateway | BillingService, UserRepo | Balance, Usage |
| 用户模块 | Auth, Gateway | UserRepo, APIKeyRepo | User, APIKey |
| 订阅模块 | APIKey Auth | SubscriptionRepo | Subscription |
| 网关模块 | Handler | 所有服务 | Request Context |
3.3 高风险修改影响
| 修改内容 | 影响模块 | 风险 |
|---|---|---|
APIKeyService.ValidateKey() |
所有 API | 🔴 认证失效 |
BillingService.CalculateCost() |
所有请求 | 🔴 计费错误 |
SelectAccountWithLoadAwareness() |
所有请求 | 🔴 负载不均 |
BillingCacheService.CheckBalance() |
Gateway | 🟡 误拒绝请求 |
ConcurrencyService |
Gateway | 🟡 并发失控 |
四、核心数据流
4.1 请求处理流程
- 请求入口:用户通过API Key发起请求
- 认证验证:验证API Key有效性、权限、配额
- 账号选择:根据负载和策略选择上游账号
- 请求转发:将请求转发到上游AI服务
- 响应处理:接收响应,记录用量,计算费用
- 结果返回:将响应返回给用户
4.2 数据持久化
- PostgreSQL:用户、账号、API Key、订阅、用量日志
- Redis:缓存、实时统计、会话、限流计数
五、安全架构
5.1 认证层
- JWT Token:用户会话认证
- API Key:程序化访问认证
- OAuth:第三方登录(Anthropic、Google、OpenAI、Linux.do)
- TOTP:双因素认证
5.2 授权层
- 分组隔离:用户/账号分组
- 权限控制:角色(用户/管理员/超级管理员)
- IP白名单:API Key级别IP限制
5.3 审计层
- 登录日志
- 操作日志
- 用量日志
六、配置管理
6.1 主要配置项
| 配置类别 | 配置项 |
|---|---|
| 服务 | 端口、模式、信任代理 |
| 数据库 | PostgreSQL连接 |
| 缓存 | Redis连接 |
| 安全 | JWT密钥、TOTP密钥、CORS、URL白名单 |
| 网关 | 重试策略、超时、粘性会话 |
| 计费 | 模型定价、缓存策略 |
| 限流 | 用户/API Key/IP限流规则 |
七、修改与扩展指南
7.1 常见修改场景
-
添加新上游支持
- 添加账号类型常量
- 实现请求转换器
- 注册路由
-
调整计费规则
- 修改定价配置
- 调整限流参数
-
自定义工作流
- 添加中间件
- 实现Hook
7.2 注意事项
- 线程安全:注意并发访问
- 事务一致性:关键操作使用事务
- 配置验证:修改配置需要测试
八、安全审计发现
8.1 已验证的安全措施
- JWT使用HS256/384/512(无none算法漏洞)
- 密码bcrypt哈希存储
- Ent ORM防止SQL注入
- 多级限流防护
- URL白名单保护
8.2 需要注意的问题
-
跨实例使用风险:激活码和API Key未包含系统标识
- 建议:在Key生成时嵌入实例ID
-
配置安全:生产环境需启用所有安全选项
- URL白名单
- HTTPS强制
- 强JWT密钥
九、模块文档索引
| 模块 | 文档 |
|---|---|
| API Gateway | MODULE_01_API_GATEWAY.md |
| 认证与授权 | MODULE_02_AUTH.md |
| 账户管理 | MODULE_03_ACCOUNT.md |
| 用户与API Key | MODULE_04_USER_APIKEY.md |
| 计费与配额 | MODULE_05_BILLING.md |
| 调度与负载均衡 | MODULE_06_SCHEDULING.md |
| 用量统计 | MODULE_07_USAGE.md |
| 订阅与兑换码 | MODULE_08_SUBSCRIPTION.md |
| 运营与监控 | MODULE_09_OPS.md |
| Sora与媒体 | MODULE_10_SORA.md |
| 前端架构 | MODULE_11_FRONTEND.md |
十、部署与问题排查
| 文档 | 说明 |
|---|---|
WINDOWS_DEPLOYMENT_TROUBLESHOOTING.md |
Windows 本地部署问题排查指南 |
MODIFICATION_GUIDE.md |
代码修改准备指南 |
SECURITY_ISSUE_CROSS_INSTANCE.md |
跨实例安全漏洞分析 |
ADMIN_TEST_REPORT.md |
管理后台测试报告(Playwright E2E) |
FULL_TEST_REPORT.md |
全面测试报告(Go + Vitest + Playwright) |
tests/ |
独立测试体系目录(E2E + 集成测试 + 工具脚本) |
十一、审查与更新记录
| 日期 | 版本 | 更新内容 |
|---|---|---|
| 2025-01 | 1.0 | 初始版本 |
| 2026-03-23 | 1.1 | 审查修正:MODULE_01/05/06 文件路径、算法描述、配额检查流程 |
| 2026-03-24 | 1.2 | 添加 Windows 部署问题排查文档 |
| 2026-03-24 | 1.3 | 添加管理后台测试报告(23/23 Playwright E2E 测试通过) |
| 2026-03-24 | 1.4 | 添加全面测试报告(Go 200+测试 / Vitest 301测试 / 通过率 98.5%) |
| 2026-03-24 | 1.5 | 修复前端测试失败用例,建立独立测试体系目录 |
📋 审查报告:
REVIEW_AND_DEPENDENCIES.md- 包含详细的模块交叉依赖分析和修改影响评估 📋 测试报告:
ADMIN_TEST_REPORT.md- Playwright E2E 自动化测试结果FULL_TEST_REPORT.md- 全栈测试结果汇总 📋 测试体系:tests/- 完整的测试框架和工具脚本
文档版本:1.4 最后更新:2026-03-24 分析基于:Sub2API v0.1.104继续