# 服务基础设施

<cite>
**本文引用的文件**
- [server/src/app.ts](file://server/src/app.ts)
- [server/src/services/redis.service.ts](file://server/src/services/redis.service.ts)
- [server/src/services/oss.service.ts](file://server/src/services/oss.service.ts)
- [server/src/services/queue.service.ts](file://server/src/services/queue.service.ts)
- [server/src/services/sentry.service.ts](file://server/src/services/sentry.service.ts)
- [server/src/services/websocket.service.ts](file://server/src/services/websocket.service.ts)
- [server/src/services/storage.service.ts](file://server/src/services/storage.service.ts)
- [server/src/services/memory-queue.ts](file://server/src/services/memory-queue.ts)
- [server/src/modules/book-generator/book-queue.processor.ts](file://server/src/modules/book-generator/book-queue.processor.ts)
- [server/src/middleware/auth.ts](file://server/src/middleware/auth.ts)
- [server/src/middleware/errorHandler.ts](file://server/src/middleware/errorHandler.ts)
- [server/src/middleware/security.ts](file://server/src/middleware/security.ts)
- [server/src/middleware/performance.ts](file://server/src/middleware/performance.ts)
- [server/src/middleware/rate-limiter.ts](file://server/src/middleware/rate-limiter.ts)
- [server/src/config/index.ts](file://server/src/config/index.ts)
- [server/src/types/index.ts](file://server/src/types/index.ts)
- [server/src/models/index.ts](file://server/src/models/index.ts)
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本文件面向AI有声书生成平台的服务基础设施，系统性梳理支撑业务模块运行的基础服务组件与中间件体系，覆盖以下主题：
- 队列服务：基于Bull的异步任务处理与降级策略
- 缓存服务：Redis缓存管理与连接健康检查
- 存储服务：阿里云OSS与本地存储的统一抽象
- 日志与监控：Sentry错误监控与性能追踪
- WebSocket服务：实时事件推送
- 中间件体系：认证、错误处理、安全、性能监控、限流
- 类型定义与配置管理
- 服务启动流程与优雅关闭

## 项目结构
后端采用Koa应用，按“服务层、中间件、控制器、配置与类型”分层组织；基础设施组件以“服务单例”的形式注入应用生命周期。

```mermaid
graph TB
subgraph "应用层"
APP["Koa 应用<br/>server/src/app.ts"]
ROUTER["路由注册<br/>server/src/app.ts"]
end
subgraph "基础设施服务"
REDIS["Redis 服务<br/>server/src/services/redis.service.ts"]
QUEUE["队列服务(Bull)<br/>server/src/services/queue.service.ts"]
MEMQ["内存队列(Fallback)<br/>server/src/services/memory-queue.ts"]
OSS["OSS 服务<br/>server/src/services/oss.service.ts"]
STORE["存储服务(统一封装)<br/>server/src/services/storage.service.ts"]
WS["WebSocket 服务<br/>server/src/services/websocket.service.ts"]
SENTRY["Sentry 监控<br/>server/src/services/sentry.service.ts"]
end
subgraph "中间件"
AUTH["认证中间件<br/>server/src/middleware/auth.ts"]
ERR["错误处理中间件<br/>server/src/middleware/errorHandler.ts"]
SEC["安全中间件<br/>server/src/middleware/security.ts"]
PERF["性能监控中间件<br/>server/src/middleware/performance.ts"]
RL["限流中间件<br/>server/src/middleware/rate-limiter.ts"]
end
subgraph "业务与配置"
CFG["配置管理<br/>server/src/config/index.ts"]
TYPES["类型定义<br/>server/src/types/index.ts"]
MODELS["数据库连接<br/>server/src/models/index.ts"]
BOOKQ["书籍生成队列处理器<br/>server/src/modules/book-generator/book-queue.processor.ts"]
end
APP --> ROUTER
APP --> AUTH
APP --> ERR
APP --> SEC
APP --> PERF
APP --> RL
ROUTER --> STORE
ROUTER --> QUEUE
ROUTER --> WS
ROUTER --> SENTRY
STORE --> OSS
STORE --> REDIS
QUEUE --> REDIS
QUEUE --> MEMQ
WS --> APP
SENTRY --> APP
BOOKQ --> QUEUE
BOOKQ --> MEMQ
CFG --> APP
TYPES --> APP
MODELS --> APP
```

图表来源
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
- [server/src/services/redis.service.ts:1-274](file://server/src/services/redis.service.ts#L1-L274)
- [server/src/services/oss.service.ts:1-256](file://server/src/services/oss.service.ts#L1-L256)
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/services/websocket.service.ts:1-136](file://server/src/services/websocket.service.ts#L1-L136)
- [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113)
- [server/src/services/memory-queue.ts:1-119](file://server/src/services/memory-queue.ts#L1-L119)
- [server/src/modules/book-generator/book-queue.processor.ts:1-124](file://server/src/modules/book-generator/book-queue.processor.ts#L1-L124)
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/middleware/performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110)
- [server/src/middleware/rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
- [server/src/types/index.ts:1-124](file://server/src/types/index.ts#L1-L124)
- [server/src/models/index.ts:1-15](file://server/src/models/index.ts#L1-L15)

章节来源
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)

## 核心组件
- 队列服务（Bull + Redis/Fallback）：负责任务排队、并发控制与状态跟踪，支持Redis队列与内存队列双通道降级。
- 缓存服务（Redis）：提供键值、Hash、计数器等操作，具备连接健康检查与重试策略。
- 存储服务（OSS + 本地）：统一抽象上传/下载/删除/签名URL能力，支持OSS与本地存储无缝切换。
- 日志与监控（Sentry）：初始化错误监控与性能剖析，提供Koa错误处理中间件。
- WebSocket服务：提供升级握手、客户端连接管理与事件广播，用于实时推送生成结果。
- 中间件体系：认证、错误处理、安全防护、性能监控、限流。
- 配置与类型：集中管理模型配置、JWT、端口、上传目录等；定义用户、音频、订单、分页等类型。

章节来源
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/redis.service.ts:1-274](file://server/src/services/redis.service.ts#L1-L274)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113)
- [server/src/services/websocket.service.ts:1-136](file://server/src/services/websocket.service.ts#L1-L136)
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/middleware/performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110)
- [server/src/middleware/rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
- [server/src/types/index.ts:1-124](file://server/src/types/index.ts#L1-L124)

## 架构总览
下图展示服务启动与组件交互的关键路径，包括启动顺序、依赖注入与优雅关闭流程。

```mermaid
sequenceDiagram
participant Boot as "应用启动<br/>server/src/app.ts"
participant Sentry as "Sentry 初始化<br/>server/src/services/sentry.service.ts"
participant DB as "数据库连接<br/>server/src/models/index.ts"
participant Redis as "Redis 连接<br/>server/src/services/redis.service.ts"
participant Store as "存储服务<br/>server/src/services/storage.service.ts"
participant WS as "WebSocket 初始化<br/>server/src/services/websocket.service.ts"
participant Q as "队列处理器<br/>server/src/modules/book-generator/book-queue.processor.ts"
Boot->>Sentry : 初始化错误监控
Boot->>DB : 连接数据库
Boot->>Redis : 测试连接
Boot->>Store : 测试存储连接
Boot->>WS : 初始化WebSocket
Boot->>Q : 启动书籍生成队列处理器
Boot-->>Boot : 注册路由与中间件
Boot-->>Boot : 监听端口并输出启动信息
Boot->>Q : 恢复中断任务
Boot->>Boot : 注册SIGTERM/SIGINT优雅关闭
```

图表来源
- [server/src/app.ts:133-192](file://server/src/app.ts#L133-L192)
- [server/src/services/sentry.service.ts:7-43](file://server/src/services/sentry.service.ts#L7-L43)
- [server/src/models/index.ts:5-13](file://server/src/models/index.ts#L5-L13)
- [server/src/services/redis.service.ts:246-255](file://server/src/services/redis.service.ts#L246-L255)
- [server/src/services/storage.service.ts:252-272](file://server/src/services/storage.service.ts#L252-L272)
- [server/src/services/websocket.service.ts:102-133](file://server/src/services/websocket.service.ts#L102-L133)
- [server/src/modules/book-generator/book-queue.processor.ts:48-83](file://server/src/modules/book-generator/book-queue.processor.ts#L48-L83)

## 详细组件分析

### 队列服务（Bull + Redis/Fallback）
- 设计原则：单一职责，仅负责排队与并发控制；失败重试与超时由上层容错与LLM服务处理。
- 关键能力：
  - 任务类型枚举与状态映射
  - Redis队列创建与事件监听（完成/失败/错误）
  - 任务添加与回退到内存队列
  - 进度更新与回调管理
  - 统计与暂停/恢复/清空队列
- 书籍生成队列处理器：
  - 优先使用Redis队列，最大并发3
  - 失败时更新书籍状态为failed
  - 启动时恢复中断任务（根据数据库状态）

```mermaid
classDiagram
class QueueService {
-queues : Map
-progressCallbacks : Map
-queueAvailable : boolean
+isQueueAvailable() boolean
+addTask(queueType, data, options) Promise<string|null>
+addAudioGenerationTask(data) Promise<string|null>
+addVideoGenerationTask(data) Promise<string|null>
+addBookGenerationTask(data) Promise<string|null>
+getTaskStatus(queueType, jobId) Promise
+updateProgress(queueType, jobId, progress, data) Promise<void>
+onProgress(jobId, callback) void
+clearQueue(queueType) Promise<void>
+pauseQueue(queueType) Promise<void>
+resumeQueue(queueType) Promise<void>
+closeAll() Promise<void>
}
class MemoryQueue {
-jobs : Map
-waitingJobs : Array
-processing : Set
-concurrency : number
+add(name, data) Promise<string>
+process(concurrency, handler) void
+hasPendingJobs() boolean
+close() Promise<void>
}
class BookQueueProcessor {
+initBookGenerationQueue() void
+resumeInterruptedTasks() Promise<void>
}
QueueService --> MemoryQueue : "回退"
BookQueueProcessor --> QueueService : "使用"
BookQueueProcessor --> MemoryQueue : "回退"
```

图表来源
- [server/src/services/queue.service.ts:48-342](file://server/src/services/queue.service.ts#L48-L342)
- [server/src/services/memory-queue.ts:17-116](file://server/src/services/memory-queue.ts#L17-L116)
- [server/src/modules/book-generator/book-queue.processor.ts:16-83](file://server/src/modules/book-generator/book-queue.processor.ts#L16-L83)

章节来源
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/memory-queue.ts:1-119](file://server/src/services/memory-queue.ts#L1-L119)
- [server/src/modules/book-generator/book-queue.processor.ts:1-124](file://server/src/modules/book-generator/book-queue.processor.ts#L1-L124)

### 缓存服务（Redis）
- 连接与健康：支持重试策略、连接/错误/关闭事件监听；提供可用性检测。
- 基础操作：字符串、JSON、Hash、计数器、过期、存在性检查。
- 批量操作：支持通配符批量删除。
- 断线保护：在不可用时返回空/失败，避免阻塞主流程。

```mermaid
flowchart TD
Start(["调用缓存方法"]) --> CheckAvail["检查连接可用性"]
CheckAvail --> |不可用| ReturnNull["返回空/失败"]
CheckAvail --> |可用| OperSel{"选择操作类型"}
OperSel --> Get["GET/GET JSON"]
OperSel --> Set["SET/SETEX/SET JSON"]
OperSel --> Del["DEL/DEL Pattern"]
OperSel --> HGet["HGET/HGETALL/HSET"]
OperSel --> Incr["INCR/EXPIRE/EXISTS"]
Get --> Done(["返回结果"])
Set --> Done
Del --> Done
HGet --> Done
Incr --> Done
```

图表来源
- [server/src/services/redis.service.ts:43-255](file://server/src/services/redis.service.ts#L43-L255)

章节来源
- [server/src/services/redis.service.ts:1-274](file://server/src/services/redis.service.ts#L1-L274)

### 存储服务（OSS + 本地）
- 统一接口：上传音频/视频/封面、通用文件上传、Buffer上传、删除、目录删除、下载、签名URL、测试连接。
- 存储切换：通过环境变量STORAGE_TYPE在OSS与本地之间切换；OSS模式下支持CDN域名与签名URL。
- 本地模式：文件写入uploads目录，返回静态URL。

```mermaid
classDiagram
class StorageService {
-storageType : StorageType
+setStorageType(type) void
+getStorageType() StorageType
+uploadAudio(localPath, audioId) Promise<string>
+uploadVideo(localPath, videoId) Promise<string>
+uploadCover(localPath, bookId) Promise<string>
+uploadFile(localPath, category, id) Promise<string>
+uploadBuffer(buffer, objectKey, contentType) Promise<string>
+deleteFile(url) Promise<void>
+deleteDirectory(prefix, id) Promise<void>
+downloadFile(url) Promise<Buffer>
+getSignedUrl(url, expires) Promise<string>
+testConnection() Promise<boolean>
}
class OSSService {
+uploadFile(localPath, objectKey) Promise<string>
+uploadBuffer(buffer, objectKey, contentType) Promise<string>
+uploadAudio(localPath, audioId) Promise<string>
+uploadVideo(localPath, videoId) Promise<string>
+uploadCover(localPath, bookId) Promise<string>
+deleteFile(objectKey) Promise<void>
+deleteDirectory(prefix) Promise<void>
+getSignedUrl(objectKey, expires) Promise<string>
+downloadFile(objectKey) Promise<Buffer>
+getFileUrl(objectKey) string
+testConnection() Promise<boolean>
}
StorageService --> OSSService : "OSS模式委托"
```

图表来源
- [server/src/services/storage.service.ts:13-277](file://server/src/services/storage.service.ts#L13-L277)
- [server/src/services/oss.service.ts:13-256](file://server/src/services/oss.service.ts#L13-L256)

章节来源
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/services/oss.service.ts:1-256](file://server/src/services/oss.service.ts#L1-L256)

### 日志与监控（Sentry）
- 初始化：根据环境变量DSN启用，设置采样率与性能剖析集成；提供错误过滤策略。
- 上下文：设置用户、标签、额外上下文；提供Koa错误处理中间件。
- 使用场景：全局错误捕获、API异常上报、性能采样。

```mermaid
sequenceDiagram
participant App as "应用启动<br/>server/src/app.ts"
participant Sentry as "Sentry 初始化<br/>server/src/services/sentry.service.ts"
participant Koa as "Koa 中间件链<br/>server/src/app.ts"
participant Ctrl as "控制器/服务"
App->>Sentry : initSentry()
App->>Koa : 使用 sentryErrorHandler()
Koa->>Ctrl : 调用业务逻辑
Ctrl-->>Koa : 抛出异常
Koa->>Sentry : captureException(error)
Sentry-->>Koa : 上报完成
```

图表来源
- [server/src/app.ts:64-65](file://server/src/app.ts#L64-L65)
- [server/src/services/sentry.service.ts:7-43](file://server/src/services/sentry.service.ts#L7-L43)
- [server/src/services/sentry.service.ts:92-110](file://server/src/services/sentry.service.ts#L92-L110)

章节来源
- [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113)
- [server/src/app.ts:133-137](file://server/src/app.ts#L133-L137)

### WebSocket服务（实时通信）
- 升级握手：仅接受/ws路径，从查询参数提取clientId并建立连接。
- 客户端管理：Map维护clientId到WebSocket实例映射，支持添加/移除。
- 事件推送：广播与定向推送，用于音频/视频生成完成与批量生成进度。

```mermaid
sequenceDiagram
participant Client as "客户端"
participant Server as "HTTP服务器<br/>server/src/app.ts"
participant WS as "WebSocket服务<br/>server/src/services/websocket.service.ts"
Client->>Server : HTTP Upgrade 请求 /ws?clientId=...
Server->>WS : 触发 upgrade 事件
WS->>WS : 校验路径与clientId
WS->>Client : 发送 connected 消息
WS->>Client : 广播/定向推送生成进度/完成事件
Client-->>WS : 断开连接
WS->>WS : 移除客户端
```

图表来源
- [server/src/app.ts:156-157](file://server/src/app.ts#L156-L157)
- [server/src/services/websocket.service.ts:102-133](file://server/src/services/websocket.service.ts#L102-L133)

章节来源
- [server/src/services/websocket.service.ts:1-136](file://server/src/services/websocket.service.ts#L1-L136)
- [server/src/app.ts:156-157](file://server/src/app.ts#L156-L157)

### 中间件体系
- 认证中间件：支持可选认证与强制认证，校验JWT并注入用户信息。
- 错误处理中间件：统一捕获异常，返回标准化错误响应。
- 安全中间件：XSS过滤、SQL注入检测、敏感数据脱敏。
- 性能监控中间件：统计总请求数、平均响应时间、慢请求、错误率与端点级指标。
- 限流中间件：基于Redis/Memory的限流器，支持多场景限流策略。

```mermaid
flowchart TD
Req["请求进入"] --> EH["错误处理中间件"]
EH --> PM["性能监控中间件"]
PM --> SEC["安全中间件(XSS/SQL/脱敏)"]
SEC --> AUTH["认证中间件(可选/强制)"]
AUTH --> RL["限流中间件(可插拔)"]
RL --> Route["路由匹配与控制器"]
Route --> RESP["响应返回"]
EH --> |异常| RESP
```

图表来源
- [server/src/app.ts:64-75](file://server/src/app.ts#L64-L75)
- [server/src/middleware/errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24)
- [server/src/middleware/performance.ts:29-76](file://server/src/middleware/performance.ts#L29-L76)
- [server/src/middleware/security.ts:7-27](file://server/src/middleware/security.ts#L7-L27)
- [server/src/middleware/auth.ts:7-18](file://server/src/middleware/auth.ts#L7-L18)
- [server/src/middleware/rate-limiter.ts:49-72](file://server/src/middleware/rate-limiter.ts#L49-L72)

章节来源
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/middleware/performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110)
- [server/src/middleware/rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)

### 类型定义与配置管理
- 类型定义：用户、音频、订单、分页、音色、会员配额等；扩展Koa Context以携带用户信息。
- 配置管理：加载.env，聚合模型配置，提供模型切换策略与默认值；JWT密钥与TTS参数等。

章节来源
- [server/src/types/index.ts:1-124](file://server/src/types/index.ts#L1-L124)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)

## 依赖关系分析
- 组件耦合：
  - QueueService依赖RedisService与MemoryQueue；书籍生成处理器依赖QueueService/MemoryQueue。
  - StorageService依赖OSSService与本地FS；在OSS模式下进一步依赖OSS SDK。
  - Sentry中间件与服务贯穿全局；WebSocket服务由HTTP服务器升级触发。
  - 中间件按顺序装配，形成统一的请求处理管线。
- 外部依赖：
  - Bull（Redis队列）、ioredis（Redis客户端）、ali-oss（阿里云OSS）、ws（WebSocket）、rate-limiter-flexible（限流）等。

```mermaid
graph LR
Queue["QueueService"] --> Redis["RedisService"]
Queue --> MemQ["MemoryQueue"]
Store["StorageService"] --> OSS["OSSService"]
App["Koa App"] --> Sentry["Sentry服务"]
App --> WS["WebSocket服务"]
App --> Auth["认证中间件"]
App --> Err["错误处理中间件"]
App --> Sec["安全中间件"]
App --> Perf["性能监控中间件"]
App --> RL["限流中间件"]
```

图表来源
- [server/src/services/queue.service.ts:18-20](file://server/src/services/queue.service.ts#L18-L20)
- [server/src/services/storage.service.ts:6](file://server/src/services/storage.service.ts#L6)
- [server/src/app.ts:64-75](file://server/src/app.ts#L64-L75)

章节来源
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)

## 性能考量
- 队列并发：书籍生成队列最大并发3，避免资源争用；内存队列作为降级保障。
- 缓存命中：合理设置TTL与键命名规范，减少热点Key竞争。
- 存储I/O：OSS上传使用合适的内容类型与CDN加速；本地存储注意磁盘IO与目录层级。
- 监控指标：性能中间件统计慢请求与错误率，便于定位瓶颈。
- 限流策略：针对不同接口设定差异化限流，防止突发流量冲击。

## 故障排查指南
- Redis不可用：
  - 现象：队列不可用标记，任务回退至内存队列；缓存读写返回空。
  - 排查：检查连接参数、网络连通性、密码与DB索引。
- OSS上传失败：
  - 现象：抛出错误并记录失败原因。
  - 排查：确认Region、AccessKey、Bucket、Endpoint配置；检查权限与CDN域名。
- WebSocket连接异常：
  - 现象：升级失败或客户端断开。
  - 排查：确认路径为/ws；检查clientId与客户端状态。
- Sentry未上报：
  - 现象：未配置DSN时跳过初始化。
  - 排查：检查环境变量与采样率设置。
- 限流触发：
  - 现象：429响应与Retry-After头部。
  - 排查：检查限流键生成规则与Redis可用性。

章节来源
- [server/src/services/redis.service.ts:246-255](file://server/src/services/redis.service.ts#L246-L255)
- [server/src/services/oss.service.ts:53-56](file://server/src/services/oss.service.ts#L53-L56)
- [server/src/services/websocket.service.ts:104-130](file://server/src/services/websocket.service.ts#L104-L130)
- [server/src/services/sentry.service.ts:10-13](file://server/src/services/sentry.service.ts#L10-L13)
- [server/src/middleware/rate-limiter.ts:60-71](file://server/src/middleware/rate-limiter.ts#L60-L71)

## 结论
该服务基础设施以“服务单例 + 中间件管线”的方式构建，实现了高内聚、低耦合的解耦设计。通过Redis/Bull队列、OSS/本地存储、Sentry监控与WebSocket推送，满足了AI有声书生成平台对异步处理、大规模媒体存储、可观测性与实时性的需求。同时，完善的降级策略（Redis不可用时的内存队列）与中间件体系（认证、安全、性能、限流）提升了系统的鲁棒性与可运维性。

## 附录
- 启动流程要点：
  - 初始化Sentry
  - 连接数据库
  - 测试Redis与存储连接
  - 初始化WebSocket
  - 注册路由与中间件
  - 启动队列处理器并恢复中断任务
  - 注册优雅关闭钩子

章节来源
- [server/src/app.ts:133-192](file://server/src/app.ts#L133-L192)
- [server/src/modules/book-generator/book-queue.processor.ts:88-124](file://server/src/modules/book-generator/book-queue.processor.ts#L88-L124)