本文档引用的文件
配额管理系统是音频生成平台的核心基础设施,负责管理用户的各类使用配额和限制。该系统实现了多层次的配额控制机制,包括Token余额、音频生成时长、并发处理能力等多种类型的配额规则,并提供了完整的配额计算算法、扣减流程、恢复机制和监控报表功能。
系统采用模块化设计,通过中间件和控制器分离关注点,确保配额管理逻辑与业务逻辑的解耦。同时集成了多种限流策略,包括基于Redis的分布式限流和基于内存的本地限流,以适应不同的部署场景。
配额管理系统主要分布在以下模块中:
graph TB
subgraph "配额管理核心"
A[subscription.service.ts<br/>配额服务层]
B[subscription.controller.ts<br/>配额控制器]
C[usageLimit.ts<br/>使用限制中间件]
D[rate-limiter.ts<br/>速率限制中间件]
end
subgraph "类型定义"
E[index.ts<br/>类型定义]
F[errorHandler.ts<br/>错误处理]
end
subgraph "业务模块"
G[tts.service.ts<br/>TTS服务]
H[book-generator.service.ts<br/>书籍生成服务]
I[payment.service.ts<br/>支付服务]
end
subgraph "配置文件"
J[支付集成指南.md<br/>支付文档]
K[订阅系统使用说明.md<br/>使用说明]
end
A --> B
B --> C
B --> D
C --> E
D --> F
G --> A
H --> A
I --> A
J --> A
K --> A
图表来源
章节来源
系统实现了三层配额管理体系:
Token配额系统提供灵活的余额管理机制:
音频时长配额系统针对音频生成的特殊需求:
并发处理配额系统控制系统的吞吐能力:
章节来源
配额管理系统的整体架构采用分层设计:
graph TB
subgraph "客户端层"
A[前端应用]
B[移动应用]
C[第三方集成]
end
subgraph "API网关层"
D[认证中间件]
E[配额检查中间件]
F[速率限制中间件]
end
subgraph "业务逻辑层"
G[配额服务层]
H[TTS服务层]
I[书籍生成服务层]
end
subgraph "数据持久层"
J[用户表]
K[Token余额表]
L[订阅计划表]
M[使用记录表]
end
subgraph "缓存层"
N[Redis缓存]
O[内存缓存]
end
A --> D
B --> D
C --> D
D --> E
E --> F
F --> G
G --> H
G --> I
G --> J
G --> K
G --> L
G --> M
N --> G
O --> G
图表来源
Token余额计算采用实时更新机制:
flowchart TD
A[获取用户Token余额] --> B{余额类型检查}
B --> |有限余额| C[计算剩余Token = 总Token - 已使用Token]
B --> |无限余额| D[设置剩余Token = ∞]
C --> E[返回余额信息]
D --> E
E --> F{余额检查}
F --> |余额充足| G[允许生成]
F --> |余额不足| H[拒绝生成]
图表来源
音频时长计算基于文本长度和语速配置:
flowchart TD
A[输入文本长度] --> B[计算音频分钟数 = ceil(文本长度 / 语速)]
B --> C[获取用户套餐等级]
C --> D[查询月度配额限制]
D --> E[计算剩余配额 = 月度配额 - 已使用时长]
E --> F{是否超出配额}
F --> |否| G[配额内分钟数 = 音频分钟数]
F --> |是| H[配额内分钟数 = 剩余配额]
G --> I[超额分钟数 = 0]
H --> J[超额分钟数 = 音频分钟数 - 配额内分钟数]
I --> K[计算费用]
J --> K
K --> L[返回计算结果]
图表来源
并发处理采用滑动窗口限流算法:
sequenceDiagram
participant Client as 客户端
participant Limiter as 限流器
participant Redis as Redis缓存
participant User as 用户
Client->>Limiter : 请求处理
Limiter->>User : 获取用户ID
Limiter->>Redis : 检查用户限流状态
Redis-->>Limiter : 返回当前使用次数
Limiter->>Limiter : 计算剩余配额
alt 配额充足
Limiter->>Redis : 增加使用计数
Limiter-->>Client : 允许处理
else 配额不足
Limiter-->>Client : 拒绝请求
end
图表来源
章节来源
生成前检查确保用户具备足够的配额:
flowchart TD
A[开始生成请求] --> B[验证用户身份]
B --> C[检查Token配额]
C --> D{Token充足?}
D --> |否| E[返回错误: Token不足]
D --> |是| F[检查音频时长配额]
F --> G{音频时长充足?}
G --> |否| H[返回错误: 音频时长不足]
G --> |是| I[检查并发配额]
I --> J{并发充足?}
J --> |否| K[返回错误: 并发限制]
J --> |是| L[允许生成]
E --> M[结束]
H --> M
K --> M
L --> N[开始生成]
N --> O[执行生成任务]
O --> P[更新使用记录]
P --> Q[结束]
图表来源
实时扣减确保资源使用的准确性:
sequenceDiagram
participant Service as 服务层
participant DB as 数据库
participant Log as 日志系统
Service->>DB : 查询用户余额
DB-->>Service : 返回当前余额
Service->>Service : 计算所需配额
Service->>DB : 扣减Token余额
DB-->>Service : 更新成功
Service->>DB : 记录使用日志
DB-->>Service : 日志记录成功
Service->>Log : 发送使用通知
Log-->>Service : 通知发送成功
Service-->>Service : 返回扣减结果
图表来源
章节来源
系统支持多种过期释放策略:
购买补充通过支付系统实现:
flowchart TD
A[用户发起购买] --> B[创建订单]
B --> C[支付处理]
C --> D{支付成功?}
D --> |否| E[返回支付失败]
D --> |是| F[更新Token余额]
F --> G[重置Token重置日期]
G --> H[发送确认通知]
H --> I[返回购买成功]
E --> J[结束]
I --> J
图表来源
管理员可以通过管理界面手动调整用户配额:
章节来源
系统提供多维度的使用趋势分析:
异常告警通过多种渠道通知:
章节来源
系统提供完整的配额查询API:
| 接口 | 方法 | 描述 |
|---|---|---|
/api/subscription/balance |
GET | 获取用户Token余额 |
/api/subscription/audio-balance |
GET | 获取用户音频时长余额 |
/api/subscription/quota |
GET | 获取用户配额信息 |
/api/subscription/check-quota |
POST | 检查Token配额 |
/api/subscription/check-quota-words |
POST | 检查字数配额 |
| 接口 | 方法 | 描述 |
|---|---|---|
/api/subscription/plans |
GET | 获取套餐列表 |
/api/subscription/plans/:id |
GET | 获取套餐详情 |
/api/subscription/usage |
GET | 获取使用记录 |
/api/subscription/book-generation-quota |
GET | 检查书籍生成配额 |
章节来源
配额管理系统采用松耦合设计:
graph TB
subgraph "低耦合模块"
A[配额服务层]
B[中间件层]
C[类型定义层]
end
subgraph "高内聚模块"
D[Token管理]
E[音频时长管理]
F[并发控制]
end
subgraph "外部依赖"
G[Redis缓存]
H[MySQL数据库]
I[支付系统]
end
A --> D
A --> E
A --> F
B --> A
C --> A
D --> G
E --> H
F --> G
A --> I
图表来源
配额管理的数据流遵循严格的控制流程:
flowchart LR
A[用户请求] --> B[认证中间件]
B --> C[配额检查中间件]
C --> D[业务逻辑处理]
D --> E[数据库操作]
E --> F[响应返回]
G[定时任务] --> H[配额重置]
H --> I[数据库更新]
I --> J[缓存同步]
K[支付回调] --> L[余额更新]
L --> M[使用记录]
M --> N[通知发送]
图表来源
章节来源
系统采用多层缓存策略提升性能:
并发处理通过以下机制保证性能:
数据库层面的优化措施:
当出现配额检查失败时,首先检查:
当遇到限流错误时:
Token余额异常的排查步骤:
章节来源
配额管理系统通过精心设计的架构和算法,为音频生成平台提供了完善的资源管理能力。系统支持多种配额类型,具有灵活的计算算法和完整的生命周期管理。
关键优势包括:
未来可以进一步优化的方向:
| 配额类型 | 默认值 | 说明 |
|---|---|---|
| 免费用户每日生成次数 | 3次 | 无限制为-1 |
| 免费用户单次字数限制 | 5000字 | 无限制为-1 |
| 专业用户每日生成次数 | 20次 | 无限制为-1 |
| 专业用户单次字数限制 | 50000字 | 无限制为-1 |
| 企业用户每日生成次数 | -1 | 无限制 |
| 企业用户单次字数限制 | -1 | 无限制 |