容错与错误处理.md 22 KB

容错与错误处理

本文引用的文件

  • fault-tolerance.ts
  • stage-manager.ts
  • book-generator.types.ts
  • book-generator.store.ts
  • book-generator.service.ts
  • book-queue.processor.ts
  • errorHandler.ts
  • logger.service.ts
  • log.service.ts
  • FAULT_TOLERANCE.md
  • status-system-redesign.md
  • book-generator.controller.ts
  • add-chapter-checkpoint.js
  • 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

    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
  • stage-manager.ts:1-202
  • book-generator.types.ts:1-226
  • book-generator.store.ts:1-1073
  • book-generator.service.ts:1-549
  • book-queue.processor.ts:1-89
  • errorHandler.ts:1-67
  • logger.service.ts:1-114
  • log.service.ts:277-315
  • add-chapter-checkpoint.js:1-40
  • fix-checkpoint.js:43-66

章节来源

  • fault-tolerance.ts:1-387
  • stage-manager.ts:1-202
  • book-generator.types.ts:1-226
  • book-generator.store.ts:1-1073
  • book-generator.service.ts:1-549
  • book-queue.processor.ts:1-89
  • errorHandler.ts:1-67
  • logger.service.ts:1-114
  • log.service.ts:277-315
  • FAULT_TOLERANCE.md:1-334
  • status-system-redesign.md:48-671
  • book-generator.controller.ts:1-199
  • add-chapter-checkpoint.js:1-40
  • fix-checkpoint.js:43-66

核心组件

  • 智能容错层(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
  • stage-manager.ts:37-67
  • book-generator.store.ts:19-60
  • book-generator.service.ts:45-143
  • book-queue.processor.ts:16-43
  • errorHandler.ts:3-24
  • logger.service.ts:11-72
  • log.service.ts:277-315
  • add-chapter-checkpoint.js:7-35
  • fix-checkpoint.js:59-63

架构总览

容错与错误处理系统贯穿“生成编排 → 节点执行 → 状态迁移 → 队列处理 → 用户通知”的全链路。

sequenceDiagram
participant Ctrl as "控制器<br/>book-generator.controller.ts"
participant Orchestrator as "编排器<br/>book-generator.service.ts"
participant FT as "容错层<br/>fault-tolerance.ts"
participant SM as "阶段管理器<br/>stage-manager.ts"
participant Store as "存储<br/>book-generator.store.ts"
participant Queue as "队列处理器<br/>book-queue.processor.ts"
participant WS as "WebSocket<br/>前端"
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
  • book-generator.service.ts:77-143
  • fault-tolerance.ts:188-261
  • stage-manager.ts:100-147
  • book-generator.store.ts:414-428
  • book-queue.processor.ts:16-43

详细组件分析

容错层(fault-tolerance.ts)

  • AI调用重试
    • 指数退避策略:初始延迟、最大延迟、退避倍数
    • 失败记录:写入书籍errorMsg字段,便于审计与恢复
    • 用户通知:每次重试与最终失败均通过通知通道告知前端
  • 节点超时控制
    • 按节点类型配置超时时间,超时后抛出错误并触发自动恢复
    • 执行前后通知用户节点开始/完成
  • 进度监控
    • 定时轮询书籍progress,超过阈值触发分级告警
    • 第三次告警尝试自动恢复
  • 自动恢复

    • 限制最大恢复次数与恢复间隔
    • 重新入队并等待服务恢复后继续执行

      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
  • fault-tolerance.ts:131-180
  • fault-tolerance.ts:188-261
  • fault-tolerance.ts:268-323

章节来源

  • fault-tolerance.ts:17-51
  • fault-tolerance.ts:68-123
  • fault-tolerance.ts:131-180
  • fault-tolerance.ts:188-261
  • fault-tolerance.ts:268-323
  • FAULT_TOLERANCE.md:13-145

阶段管理器(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:允许回退并自动清理下游资源

      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

章节来源

  • stage-manager.ts:37-67
  • stage-manager.ts:100-147
  • stage-manager.ts:158-198
  • status-system-redesign.md:48-147

存储与编排(book-generator.store.ts、book-generator.service.ts)

  • 书籍阶段计算
    • 基于最低章节阶段映射到书籍阶段,确保整体进度由落后环节决定
  • 编排器(批量生成)
    • 步骤推进:内容生成 → 音频生成 → 音频合并 → 视频生成 → 视频合并
    • 进度推送:WebSocket推送每步进度与消息
    • 取消机制:任务标识位、轮询检查、异常处理
    • 超时控制:每步最大等待时间、轮询间隔
  • 队列处理器

    • Redis队列优先,内存队列回退
    • 任务完成/失败回调中更新书籍状态与错误信息

      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
  • book-generator.store.ts:414-428
  • book-queue.processor.ts:16-43

章节来源

  • book-generator.store.ts:19-60
  • book-generator.service.ts:77-143
  • book-queue.processor.ts:16-43

断点续传与进度保护

  • 章节完成跳过
    • 通过查询已完成章节集合,跳过已生成的章节,避免重复执行
  • 小节完成统计
    • 基于已完成小节数量修正总进度,支持从断点继续
  • 生成字数统计

    • 统计已生成字数,结合完成状态实现更精细的断点续传

      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
  • fix-checkpoint.js:59-63

章节来源

  • add-chapter-checkpoint.js:7-35
  • fix-checkpoint.js:43-66

错误日志与异常处理

  • 统一错误中间件
    • 捕获异常、标准化响应码与消息,开发环境输出堆栈
  • 结构化日志
    • Winston配置控制台与文件输出,HTTP请求日志与错误日志分离
  • 日志服务

    • 错误模式识别与建议生成,支持清理旧日志

      flowchart TD
      Req["请求到达"] --> Try["业务处理"]
      Try --> |成功| Resp["正常响应"]
      Try --> |异常| Catch["错误中间件捕获"]
      Catch --> Build["构建错误响应"]
      Build --> Log["记录结构化日志"]
      Log --> Resp
      

图表来源

  • errorHandler.ts:3-24
  • logger.service.ts:68-114
  • log.service.ts:277-315

章节来源

  • errorHandler.ts:3-24
  • logger.service.ts:11-72
  • log.service.ts:277-315

依赖关系分析

  • 容错层依赖存储与队列服务,负责AI调用重试、节点超时与自动恢复
  • 阶段管理器依赖Prisma进行乐观锁更新,并与存储协作完成资源清理
  • 编排器协调多步骤生成流程,依赖WebSocket推送进度
  • 错误处理与日志服务贯穿全链路,提供统一的错误响应与日志记录

    graph LR
    FT["容错层"] --> STORE["存储"]
    FT --> QUEUE["队列"]
    SM["阶段管理器"] --> STORE
    SERVICE["编排器"] --> WS["WebSocket"]
    SERVICE --> STORE
    ERR["错误中间件"] --> LOG["日志服务"]
    LOG --> FS["文件系统"]
    

图表来源

  • fault-tolerance.ts:11-13
  • stage-manager.ts:6-8
  • book-generator.service.ts:6-11
  • errorHandler.ts:1-67
  • logger.service.ts:1-114

章节来源

  • fault-tolerance.ts:11-13
  • stage-manager.ts:6-8
  • book-generator.service.ts:6-11
  • errorHandler.ts:1-67
  • logger.service.ts:1-114

性能考量

  • 指数退避与超时配置:合理设置初始延迟、最大延迟与节点超时,平衡成功率与等待时间
  • 进度监控频率:检查间隔与最大空闲时间需兼顾实时性与系统负载
  • 队列并发:Redis队列最大并发数应与后端资源能力匹配,避免过载
  • 日志级别与文件滚动:生产环境降低控制台输出,启用文件滚动与清理策略

故障排查指南

  • 常见故障场景
    • AI调用超时:检查节点超时配置与网络状况,确认自动恢复是否生效
    • 长时间无响应:关注进度监控告警与自动恢复日志
    • 失败重试过多:查看errorMsg字段与通知记录,评估是否达到最大恢复次数
    • 状态冲突:检查乐观锁更新失败与冲突告警,确认并发修改
  • 排查步骤
    • 查看结构化日志与HTTP请求日志,定位异常发生时间点
    • 检查书籍与章节状态,确认genStage与资源清理是否正确
    • 核对队列处理器状态与任务失败原因
    • 前端轮询通知类型,确认用户侧可见的告警信息
  • 预防措施
    • 合理设置超时与重试策略,避免无限等待
    • 使用断点续传减少重复生成,提高资源利用率
    • 建立完善的日志与监控体系,及时发现与定位问题

章节来源

  • FAULT_TOLERANCE.md:256-289
  • errorHandler.ts:3-24
  • logger.service.ts:68-114
  • log.service.ts:277-315
  • stage-manager.ts:123-146

结论

本容错与错误处理系统通过“智能重试 + 节点超时 + 进度监控 + 自动恢复 + 线性阶段管理 + 断点续传 + 统一日志与错误处理”的组合拳,显著提升了书籍生成流水线的稳定性与用户体验。建议在生产环境中持续优化超时与重试参数、完善前端通知与状态展示,并建立定期健康检查与日志清理机制,以保障系统的长期可靠运行。

附录

  • 术语说明
    • 书籍阶段:由最低章节阶段推导的整体进度阶段
    • 章节阶段:单个章节的生成状态,支持回退与资源清理
    • 断点续传:基于完成状态与生成字数统计的继续执行
  • 配置参考
    • 容错配置集中于容错层配置对象,包含AI重试、节点超时、进度监控与自动恢复参数
    • 阶段索引与转移矩阵定义了合法状态迁移路径

章节来源

  • FAULT_TOLERANCE.md:308-334
  • status-system-redesign.md:48-147