# 容错与错误处理 **本文引用的文件** - [fault-tolerance.ts](file://server/src/modules/book-generator/fault-tolerance.ts) - [stage-manager.ts](file://server/src/modules/book-generator/stage-manager.ts) - [book-generator.types.ts](file://server/src/modules/book-generator/book-generator.types.ts) - [book-generator.store.ts](file://server/src/modules/book-generator/book-generator.store.ts) - [book-generator.service.ts](file://server/src/modules/book-generator/book-generator.service.ts) - [book-queue.processor.ts](file://server/src/modules/book-generator/book-queue.processor.ts) - [errorHandler.ts](file://server/src/middleware/errorHandler.ts) - [logger.service.ts](file://server/src/services/logger.service.ts) - [log.service.ts](file://server/src/services/log.service.ts) - [FAULT_TOLERANCE.md](file://server/src/modules/book-generator/FAULT_TOLERANCE.md) - [status-system-redesign.md](file://status-system-redesign.md) - [book-generator.controller.ts](file://server/src/modules/book-generator/book-generator.controller.ts) - [add-chapter-checkpoint.js](file://server/add-chapter-checkpoint.js) - [fix-checkpoint.js](file://server/fix-checkpoint.js) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本技术文档围绕“容错与错误处理系统”展开,聚焦于书籍生成流水线中的故障检测、自动恢复、错误分类与处理、状态检查点与断点续传、进度保护与通知机制。文档基于现有代码实现,系统化梳理了以下关键能力: - 智能容错层:AI调用重试(指数退避)、节点级超时控制、进度监控与自动恢复 - 阶段管理器:线性阶段模型、安全状态转移、资源清理与联动回退 - 进度保护与断点续传:章节与小节完成状态追踪、生成字数统计与跳过逻辑 - 错误日志与异常处理:统一错误中间件、结构化日志记录、错误分类与建议 - 用户通知与可观测性:WebSocket通知类型、前端交互与状态轮询 ## 项目结构 与容错与错误处理相关的核心文件分布如下: - 容错与错误处理:fault-tolerance.ts、stage-manager.ts、FAULT_TOLERANCE.md - 状态与类型:book-generator.types.ts、status-system-redesign.md - 存储与编排:book-generator.store.ts、book-generator.service.ts、book-queue.processor.ts - 错误处理与日志:errorHandler.ts、logger.service.ts、log.service.ts - 断点续传脚本:add-chapter-checkpoint.js、fix-checkpoint.js - 控制器与接口:book-generator.controller.ts ```mermaid graph TB subgraph "容错与错误处理" FT["fault-tolerance.ts"] SM["stage-manager.ts"] FTM["FAULT_TOLERANCE.md"] end subgraph "状态与类型" TYPES["book-generator.types.ts"] STATUS["status-system-redesign.md"] end subgraph "存储与编排" STORE["book-generator.store.ts"] SERVICE["book-generator.service.ts"] QUEUE["book-queue.processor.ts"] end subgraph "错误处理与日志" ERR["errorHandler.ts"] LOG["logger.service.ts"] LGS["log.service.ts"] end subgraph "断点续传" ADDCHK["add-chapter-checkpoint.js"] FIXCHK["fix-checkpoint.js"] end CTRL["book-generator.controller.ts"] FT --> SERVICE FT --> STORE FT --> QUEUE SM --> SERVICE SM --> STORE SERVICE --> CTRL STORE --> QUEUE ERR --> CTRL LOG --> SERVICE LGS --> ERR ADDCHK --> SERVICE FIXCHK --> SERVICE ``` **图表来源** - [fault-tolerance.ts:1-387](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L387) - [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202) - [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226) - [book-generator.store.ts:1-1073](file://server/src/modules/book-generator/book-generator.store.ts#L1-L1073) - [book-generator.service.ts:1-549](file://server/src/modules/book-generator/book-generator.service.ts#L1-L549) - [book-queue.processor.ts:1-89](file://server/src/modules/book-generator/book-queue.processor.ts#L1-L89) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [log.service.ts:277-315](file://server/src/services/log.service.ts#L277-L315) - [add-chapter-checkpoint.js:1-40](file://server/add-chapter-checkpoint.js#L1-L40) - [fix-checkpoint.js:43-66](file://server/fix-checkpoint.js#L43-L66) **章节来源** - [fault-tolerance.ts:1-387](file://server/src/modules/book-generator/fault-tolerance.ts#L1-L387) - [stage-manager.ts:1-202](file://server/src/modules/book-generator/stage-manager.ts#L1-L202) - [book-generator.types.ts:1-226](file://server/src/modules/book-generator/book-generator.types.ts#L1-L226) - [book-generator.store.ts:1-1073](file://server/src/modules/book-generator/book-generator.store.ts#L1-L1073) - [book-generator.service.ts:1-549](file://server/src/modules/book-generator/book-generator.service.ts#L1-L549) - [book-queue.processor.ts:1-89](file://server/src/modules/book-generator/book-queue.processor.ts#L1-L89) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [log.service.ts:277-315](file://server/src/services/log.service.ts#L277-L315) - [FAULT_TOLERANCE.md:1-334](file://server/src/modules/book-generator/FAULT_TOLERANCE.md#L1-L334) - [status-system-redesign.md:48-671](file://status-system-redesign.md#L48-L671) - [book-generator.controller.ts:1-199](file://server/src/modules/book-generator/book-generator.controller.ts#L1-L199) - [add-chapter-checkpoint.js:1-40](file://server/add-chapter-checkpoint.js#L1-L40) - [fix-checkpoint.js:43-66](file://server/fix-checkpoint.js#L43-L66) ## 核心组件 - 智能容错层(fault-tolerance.ts) - AI调用重试:指数退避、最大重试次数、失败记录与用户通知 - 节点超时控制:按节点类型配置超时时间、超时后触发恢复 - 进度监控:定时检查书籍进度,分级告警与自动恢复 - 自动恢复:限制最大恢复次数、恢复间隔、重新入队 - 阶段管理器(stage-manager.ts) - 线性阶段模型:章节与书籍阶段索引、阶段转移矩阵 - 安全状态转移:乐观锁写入、资源清理、冲突检测与告警 - 上层封装:advanceChapter(前进)、regenerateChapter(回退/重新生成) - 存储与编排(book-generator.store.ts、book-generator.service.ts) - 书籍阶段计算:基于最低章节阶段推导书籍阶段 - 编排器:批量生成步骤推进、进度推送、取消标志与超时控制 - 队列处理器:Redis/内存队列、任务失败状态回写 - 错误处理与日志(errorHandler.ts、logger.service.ts、log.service.ts) - 统一错误中间件:标准化错误响应、开发环境堆栈输出 - 结构化日志:Winston配置、HTTP请求日志、错误日志归档 - 日志服务:错误模式识别、建议生成、日志清理 - 断点续传(add-chapter-checkpoint.js、fix-checkpoint.js) - 章节完成状态跳过、小节完成统计与进度修正 - 生成字数统计与断点续传支持 **章节来源** - [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51) - [stage-manager.ts:37-67](file://server/src/modules/book-generator/stage-manager.ts#L37-L67) - [book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60) - [book-generator.service.ts:45-143](file://server/src/modules/book-generator/book-generator.service.ts#L45-L143) - [book-queue.processor.ts:16-43](file://server/src/modules/book-generator/book-queue.processor.ts#L16-L43) - [errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) - [logger.service.ts:11-72](file://server/src/services/logger.service.ts#L11-L72) - [log.service.ts:277-315](file://server/src/services/log.service.ts#L277-L315) - [add-chapter-checkpoint.js:7-35](file://server/add-chapter-checkpoint.js#L7-L35) - [fix-checkpoint.js:59-63](file://server/fix-checkpoint.js#L59-L63) ## 架构总览 容错与错误处理系统贯穿“生成编排 → 节点执行 → 状态迁移 → 队列处理 → 用户通知”的全链路。 ```mermaid sequenceDiagram participant Ctrl as "控制器
book-generator.controller.ts" participant Orchestrator as "编排器
book-generator.service.ts" participant FT as "容错层
fault-tolerance.ts" participant SM as "阶段管理器
stage-manager.ts" participant Store as "存储
book-generator.store.ts" participant Queue as "队列处理器
book-queue.processor.ts" participant WS as "WebSocket
前端" Ctrl->>Orchestrator : 启动批量生成任务 Orchestrator->>FT : 启动进度监控 Orchestrator->>Store : 更新书籍阶段/进度 Orchestrator->>SM : advanceChapter/regenerateChapter SM->>Store : 乐观锁写入 + 资源清理 Orchestrator->>FT : 节点执行带超时/重试 FT->>WS : 通知用户重试/超时/恢复 FT->>Queue : 自动恢复时重新入队 Queue-->>Orchestrator : 任务完成/失败回调 Orchestrator-->>Ctrl : 推送进度/完成状态 ``` **图表来源** - [book-generator.controller.ts:24-119](file://server/src/modules/book-generator/book-generator.controller.ts#L24-L119) - [book-generator.service.ts:77-143](file://server/src/modules/book-generator/book-generator.service.ts#L77-L143) - [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261) - [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147) - [book-generator.store.ts:414-428](file://server/src/modules/book-generator/book-generator.store.ts#L414-L428) - [book-queue.processor.ts:16-43](file://server/src/modules/book-generator/book-queue.processor.ts#L16-L43) ## 详细组件分析 ### 容错层(fault-tolerance.ts) - AI调用重试 - 指数退避策略:初始延迟、最大延迟、退避倍数 - 失败记录:写入书籍errorMsg字段,便于审计与恢复 - 用户通知:每次重试与最终失败均通过通知通道告知前端 - 节点超时控制 - 按节点类型配置超时时间,超时后抛出错误并触发自动恢复 - 执行前后通知用户节点开始/完成 - 进度监控 - 定时轮询书籍progress,超过阈值触发分级告警 - 第三次告警尝试自动恢复 - 自动恢复 - 限制最大恢复次数与恢复间隔 - 重新入队并等待服务恢复后继续执行 ```mermaid flowchart TD Start(["开始节点"]) --> CallLLM["调用LLM带重试"] CallLLM --> Retry{"重试次数用尽?"} Retry --> |否| Sleep["指数退避等待"] --> CallLLM Retry --> |是| Fail["记录失败并通知用户"] Fail --> Timeout["节点超时检测"] Timeout --> TO{"超时?"} TO --> |是| AutoRec["自动恢复:重新入队"] TO --> |否| Proceed["继续执行"] AutoRec --> Monitor["进度监控:分级告警"] Monitor --> Warn1["10分钟:警告"] Monitor --> Warn2["20分钟:建议干预"] Monitor --> Recover["30分钟:自动恢复"] Recover --> Requeue["重新入队"] Requeue --> Proceed ``` **图表来源** - [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123) - [fault-tolerance.ts:131-180](file://server/src/modules/book-generator/fault-tolerance.ts#L131-L180) - [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261) - [fault-tolerance.ts:268-323](file://server/src/modules/book-generator/fault-tolerance.ts#L268-L323) **章节来源** - [fault-tolerance.ts:17-51](file://server/src/modules/book-generator/fault-tolerance.ts#L17-L51) - [fault-tolerance.ts:68-123](file://server/src/modules/book-generator/fault-tolerance.ts#L68-L123) - [fault-tolerance.ts:131-180](file://server/src/modules/book-generator/fault-tolerance.ts#L131-L180) - [fault-tolerance.ts:188-261](file://server/src/modules/book-generator/fault-tolerance.ts#L188-L261) - [fault-tolerance.ts:268-323](file://server/src/modules/book-generator/fault-tolerance.ts#L268-L323) - [FAULT_TOLERANCE.md:13-145](file://server/src/modules/book-generator/FAULT_TOLERANCE.md#L13-L145) ### 阶段管理器(stage-manager.ts) - 线性阶段模型 - 章节阶段:idle → content_generating → content_completed → audio_generating → audio_completed → video_generating → video_completed → failed - 书籍阶段:draft → outlining → outline_completed → content_generating → content_completed → audio_generating → audio_completed → video_generating → video_completed → failed - 安全状态转移 - 验证转移矩阵、乐观锁写入、资源清理(音频/视频URL与时长清零) - 冲突检测:若目标阶段与实际一致或已在failed状态则跳过 - 上层封装 - advanceChapter:仅允许前进,否则抛错 - regenerateChapter:允许回退并自动清理下游资源 ```mermaid flowchart TD S0["当前阶段"] --> Check["检查是否允许转移到目标阶段"] Check --> |允许| Clean["计算并应用资源清理规则"] Clean --> Optimistic["乐观锁更新状态"] Optimistic --> Conflict{"更新成功?"} Conflict --> |是| Done["完成"] Conflict --> |否| Query["查询实际状态"] Query --> Same{"目标与实际相同?"} Same --> |是| Skip["跳过并记录"] --> Done Same --> |否| FailedState{"当前为failed且目标非idle?"} FailedState --> |是| Skip FailedState --> |否| Warn["记录警告但不崩溃"] --> Done ``` **图表来源** - [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147) **章节来源** - [stage-manager.ts:37-67](file://server/src/modules/book-generator/stage-manager.ts#L37-L67) - [stage-manager.ts:100-147](file://server/src/modules/book-generator/stage-manager.ts#L100-L147) - [stage-manager.ts:158-198](file://server/src/modules/book-generator/stage-manager.ts#L158-L198) - [status-system-redesign.md:48-147](file://status-system-redesign.md#L48-L147) ### 存储与编排(book-generator.store.ts、book-generator.service.ts) - 书籍阶段计算 - 基于最低章节阶段映射到书籍阶段,确保整体进度由落后环节决定 - 编排器(批量生成) - 步骤推进:内容生成 → 音频生成 → 音频合并 → 视频生成 → 视频合并 - 进度推送:WebSocket推送每步进度与消息 - 取消机制:任务标识位、轮询检查、异常处理 - 超时控制:每步最大等待时间、轮询间隔 - 队列处理器 - Redis队列优先,内存队列回退 - 任务完成/失败回调中更新书籍状态与错误信息 ```mermaid sequenceDiagram participant Orchestrator as "编排器" participant Store as "存储" participant WS as "WebSocket" Orchestrator->>Store : 更新书籍阶段/进度 Orchestrator->>WS : 推送步骤进度 Orchestrator->>Orchestrator : 轮询检查完成状态 Orchestrator-->>Orchestrator : 步骤间检查取消标志 Orchestrator-->>Store : 最终更新进度为100% ``` **图表来源** - [book-generator.service.ts:77-143](file://server/src/modules/book-generator/book-generator.service.ts#L77-L143) - [book-generator.store.ts:414-428](file://server/src/modules/book-generator/book-generator.store.ts#L414-L428) - [book-queue.processor.ts:16-43](file://server/src/modules/book-generator/book-queue.processor.ts#L16-L43) **章节来源** - [book-generator.store.ts:19-60](file://server/src/modules/book-generator/book-generator.store.ts#L19-L60) - [book-generator.service.ts:77-143](file://server/src/modules/book-generator/book-generator.service.ts#L77-L143) - [book-queue.processor.ts:16-43](file://server/src/modules/book-generator/book-queue.processor.ts#L16-L43) ### 断点续传与进度保护 - 章节完成跳过 - 通过查询已完成章节集合,跳过已生成的章节,避免重复执行 - 小节完成统计 - 基于已完成小节数量修正总进度,支持从断点继续 - 生成字数统计 - 统计已生成字数,结合完成状态实现更精细的断点续传 ```mermaid flowchart TD Load["加载书籍大纲"] --> ListCh["遍历章节"] ListCh --> CheckComp{"章节已完成?"} CheckComp --> |是| Skip["跳过该章节"] --> NextCh["下一章节"] CheckComp --> |否| GenCh["生成章节内容"] GenCh --> NextCh NextCh --> Done{"全部章节处理完?"} Done --> |否| ListCh Done --> |是| End["结束"] ``` **图表来源** - [add-chapter-checkpoint.js:17-35](file://server/add-chapter-checkpoint.js#L17-L35) - [fix-checkpoint.js:59-63](file://server/fix-checkpoint.js#L59-L63) **章节来源** - [add-chapter-checkpoint.js:7-35](file://server/add-chapter-checkpoint.js#L7-L35) - [fix-checkpoint.js:43-66](file://server/fix-checkpoint.js#L43-L66) ### 错误日志与异常处理 - 统一错误中间件 - 捕获异常、标准化响应码与消息,开发环境输出堆栈 - 结构化日志 - Winston配置控制台与文件输出,HTTP请求日志与错误日志分离 - 日志服务 - 错误模式识别与建议生成,支持清理旧日志 ```mermaid flowchart TD Req["请求到达"] --> Try["业务处理"] Try --> |成功| Resp["正常响应"] Try --> |异常| Catch["错误中间件捕获"] Catch --> Build["构建错误响应"] Build --> Log["记录结构化日志"] Log --> Resp ``` **图表来源** - [errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) - [logger.service.ts:68-114](file://server/src/services/logger.service.ts#L68-L114) - [log.service.ts:277-315](file://server/src/services/log.service.ts#L277-L315) **章节来源** - [errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) - [logger.service.ts:11-72](file://server/src/services/logger.service.ts#L11-L72) - [log.service.ts:277-315](file://server/src/services/log.service.ts#L277-L315) ## 依赖关系分析 - 容错层依赖存储与队列服务,负责AI调用重试、节点超时与自动恢复 - 阶段管理器依赖Prisma进行乐观锁更新,并与存储协作完成资源清理 - 编排器协调多步骤生成流程,依赖WebSocket推送进度 - 错误处理与日志服务贯穿全链路,提供统一的错误响应与日志记录 ```mermaid graph LR FT["容错层"] --> STORE["存储"] FT --> QUEUE["队列"] SM["阶段管理器"] --> STORE SERVICE["编排器"] --> WS["WebSocket"] SERVICE --> STORE ERR["错误中间件"] --> LOG["日志服务"] LOG --> FS["文件系统"] ``` **图表来源** - [fault-tolerance.ts:11-13](file://server/src/modules/book-generator/fault-tolerance.ts#L11-L13) - [stage-manager.ts:6-8](file://server/src/modules/book-generator/stage-manager.ts#L6-L8) - [book-generator.service.ts:6-11](file://server/src/modules/book-generator/book-generator.service.ts#L6-L11) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) **章节来源** - [fault-tolerance.ts:11-13](file://server/src/modules/book-generator/fault-tolerance.ts#L11-L13) - [stage-manager.ts:6-8](file://server/src/modules/book-generator/stage-manager.ts#L6-L8) - [book-generator.service.ts:6-11](file://server/src/modules/book-generator/book-generator.service.ts#L6-L11) - [errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) ## 性能考量 - 指数退避与超时配置:合理设置初始延迟、最大延迟与节点超时,平衡成功率与等待时间 - 进度监控频率:检查间隔与最大空闲时间需兼顾实时性与系统负载 - 队列并发:Redis队列最大并发数应与后端资源能力匹配,避免过载 - 日志级别与文件滚动:生产环境降低控制台输出,启用文件滚动与清理策略 ## 故障排查指南 - 常见故障场景 - AI调用超时:检查节点超时配置与网络状况,确认自动恢复是否生效 - 长时间无响应:关注进度监控告警与自动恢复日志 - 失败重试过多:查看errorMsg字段与通知记录,评估是否达到最大恢复次数 - 状态冲突:检查乐观锁更新失败与冲突告警,确认并发修改 - 排查步骤 - 查看结构化日志与HTTP请求日志,定位异常发生时间点 - 检查书籍与章节状态,确认genStage与资源清理是否正确 - 核对队列处理器状态与任务失败原因 - 前端轮询通知类型,确认用户侧可见的告警信息 - 预防措施 - 合理设置超时与重试策略,避免无限等待 - 使用断点续传减少重复生成,提高资源利用率 - 建立完善的日志与监控体系,及时发现与定位问题 **章节来源** - [FAULT_TOLERANCE.md:256-289](file://server/src/modules/book-generator/FAULT_TOLERANCE.md#L256-L289) - [errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) - [logger.service.ts:68-114](file://server/src/services/logger.service.ts#L68-L114) - [log.service.ts:277-315](file://server/src/services/log.service.ts#L277-L315) - [stage-manager.ts:123-146](file://server/src/modules/book-generator/stage-manager.ts#L123-L146) ## 结论 本容错与错误处理系统通过“智能重试 + 节点超时 + 进度监控 + 自动恢复 + 线性阶段管理 + 断点续传 + 统一日志与错误处理”的组合拳,显著提升了书籍生成流水线的稳定性与用户体验。建议在生产环境中持续优化超时与重试参数、完善前端通知与状态展示,并建立定期健康检查与日志清理机制,以保障系统的长期可靠运行。 ## 附录 - 术语说明 - 书籍阶段:由最低章节阶段推导的整体进度阶段 - 章节阶段:单个章节的生成状态,支持回退与资源清理 - 断点续传:基于完成状态与生成字数统计的继续执行 - 配置参考 - 容错配置集中于容错层配置对象,包含AI重试、节点超时、进度监控与自动恢复参数 - 阶段索引与转移矩阵定义了合法状态迁移路径 **章节来源** - [FAULT_TOLERANCE.md:308-334](file://server/src/modules/book-generator/FAULT_TOLERANCE.md#L308-L334) - [status-system-redesign.md:48-147](file://status-system-redesign.md#L48-L147)