281 lines
19 KiB
Markdown
281 lines
19 KiB
Markdown
|
|
# 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 请求处理流程
|
|||
|
|
|
|||
|
|
1. **请求入口**:用户通过API Key发起请求
|
|||
|
|
2. **认证验证**:验证API Key有效性、权限、配额
|
|||
|
|
3. **账号选择**:根据负载和策略选择上游账号
|
|||
|
|
4. **请求转发**:将请求转发到上游AI服务
|
|||
|
|
5. **响应处理**:接收响应,记录用量,计算费用
|
|||
|
|
6. **结果返回**:将响应返回给用户
|
|||
|
|
|
|||
|
|
### 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 常见修改场景
|
|||
|
|
|
|||
|
|
1. **添加新上游支持**
|
|||
|
|
- 添加账号类型常量
|
|||
|
|
- 实现请求转换器
|
|||
|
|
- 注册路由
|
|||
|
|
|
|||
|
|
2. **调整计费规则**
|
|||
|
|
- 修改定价配置
|
|||
|
|
- 调整限流参数
|
|||
|
|
|
|||
|
|
3. **自定义工作流**
|
|||
|
|
- 添加中间件
|
|||
|
|
- 实现Hook
|
|||
|
|
|
|||
|
|
### 7.2 注意事项
|
|||
|
|
|
|||
|
|
1. 线程安全:注意并发访问
|
|||
|
|
2. 事务一致性:关键操作使用事务
|
|||
|
|
3. 配置验证:修改配置需要测试
|
|||
|
|
|
|||
|
|
## 八、安全审计发现
|
|||
|
|
|
|||
|
|
### 8.1 已验证的安全措施
|
|||
|
|
|
|||
|
|
- JWT使用HS256/384/512(无none算法漏洞)
|
|||
|
|
- 密码bcrypt哈希存储
|
|||
|
|
- Ent ORM防止SQL注入
|
|||
|
|
- 多级限流防护
|
|||
|
|
- URL白名单保护
|
|||
|
|
|
|||
|
|
### 8.2 需要注意的问题
|
|||
|
|
|
|||
|
|
1. **跨实例使用风险**:激活码和API Key未包含系统标识
|
|||
|
|
- 建议:在Key生成时嵌入实例ID
|
|||
|
|
|
|||
|
|
2. **配置安全**:生产环境需启用所有安全选项
|
|||
|
|
- 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*继续
|