本文引用的文件
本文件面向AI有声书生成平台的后端服务运维与开发人员,聚焦Node.js/Koa.js服务在生产环境中的常见故障场景与排查路径,覆盖API接口异常、数据库连接问题、队列服务故障、Redis缓存异常、中间件错误处理、内存泄漏检测、异步任务处理问题、第三方服务集成故障以及系统资源监控等主题。文档提供日志分析方法、错误码含义解释、性能监控指标与根因分析流程,并给出可视化图示帮助快速定位问题。
后端采用Koa应用入口集中初始化,路由按模块拆分,服务层(队列、缓存、日志、Sentry)独立封装,业务控制器与领域服务解耦,整体呈现“路由-控制器-服务-基础设施”的分层架构。
graph TB
A["Koa 应用<br/>server/src/app.ts"] --> B["路由注册<br/>各模块控制器"]
A --> C["中间件链路<br/>错误处理/安全/性能/缓存"]
A --> D["服务层<br/>Redis/队列/日志/Sentry/存储"]
B --> E["业务控制器<br/>如 tts.controller.ts / auth.controller.ts"]
D --> F["队列服务<br/>queue.service.ts"]
D --> G["Redis 服务<br/>redis.service.ts"]
D --> H["日志服务<br/>logger.service.ts"]
D --> I["Sentry 监控<br/>sentry.service.ts"]
D --> J["内存队列回退<br/>memory-queue.ts"]
A --> K["数据库连接<br/>models/index.ts"]
图表来源
章节来源
章节来源
下图展示服务启动、中间件执行、路由处理、队列与缓存交互的关键流程。
sequenceDiagram
participant Client as "客户端"
participant Koa as "Koa 应用<br/>app.ts"
participant MW as "中间件栈<br/>error/performance/cache"
participant Router as "路由<br/>controllers"
participant Svc as "服务层<br/>Redis/Queue/Logger/Sentry"
participant DB as "数据库<br/>Prisma"
Client->>Koa : HTTP 请求
Koa->>MW : 错误处理/性能/日志/安全/CORS
MW-->>Koa : 通过
Koa->>Router : 路由匹配
Router->>Svc : 业务调用缓存/队列/存储
Router->>DB : 数据库操作
DB-->>Router : 结果
Router-->>Client : 响应
Koa->>Svc : 性能指标/日志/Sentry上报
图表来源
排查要点
关注Sentry错误上报是否生效(需配置DSN)。
classDiagram
class AppError {
+number code
+number status
+constructor(message, code, status)
}
class UnauthorizedError
class ForbiddenError
class NotFoundError
class BadRequestError
class QuotaExceededError
AppError <|-- UnauthorizedError
AppError <|-- ForbiddenError
AppError <|-- NotFoundError
AppError <|-- BadRequestError
AppError <|-- QuotaExceededError
图表来源
章节来源
排查要点
观察错误日志中的[Redis]前缀定位失败点。
flowchart TD
Start(["进入缓存操作"]) --> CheckAvail["检查Redis可用性"]
CheckAvail --> |不可用| SkipCache["跳过缓存,直接请求"]
CheckAvail --> |可用| GenKey["生成缓存键"]
GenKey --> GetOp["执行GET/HGET/HGETALL"]
GetOp --> Hit{"命中?"}
Hit --> |是| ReturnCache["返回缓存数据"]
Hit --> |否| ExecNext["执行下游请求"]
ExecNext --> Save{"状态=200且有body?"}
Save --> |是| SetOp["SET/SETEX/SETJSON/HSET"]
Save --> |否| End(["结束"])
SetOp --> End
SkipCache --> End
图表来源
章节来源
排查要点
若出现大量failed,结合Sentry与日志定位具体业务节点。
sequenceDiagram
participant Ctrl as "控制器"
participant QS as "QueueService"
participant RQ as "Redis 队列(Bull)"
participant MQ as "内存队列"
participant Proc as "书籍生成处理器"
participant Store as "书籍状态存储"
Ctrl->>QS : addBookGenerationTask(data)
alt Redis可用
QS->>RQ : add(data)
RQ-->>QS : jobId
RQ->>Proc : process(job)
Proc->>Store : 更新genStage/progress
Proc-->>RQ : 完成/失败
else Redis不可用
QS->>MQ : add(data)
MQ->>Proc : process(job)
Proc-->>MQ : 完成/失败
end
图表来源
章节来源
排查要点
慢请求告警(>1s)提示可能的数据库慢查询、第三方调用阻塞或CPU瓶颈。
flowchart TD
Req["请求进入"] --> StartT["记录开始时间"]
StartT --> Next["执行下游处理"]
Next --> Done{"完成/异常?"}
Done --> |正常| Calc["计算耗时并更新指标"]
Done --> |异常| IncErr["错误计数+1"]
Calc --> SetHdr["设置X-Response-Time头"]
SetHdr --> End["返回响应"]
IncErr --> Throw["抛出异常"]
图表来源
章节来源
章节来源
章节来源
章节来源
循环依赖
未见明显循环依赖;模块间通过导出单例服务进行协作。
graph LR
App["app.ts"] --> EH["errorHandler.ts"]
App --> PM["performance.ts"]
App --> CL["cache.ts"]
App --> RS["redis.service.ts"]
App --> QS["queue.service.ts"]
App --> LS["logger.service.ts"]
App --> SS["sentry.service.ts"]
App --> MD["models/index.ts"]
TTS["tts.controller.ts"] --> QS
TTS --> RS
TTS --> MD
AUTH["auth.controller.ts"] --> MD
图表来源
章节来源
[本节为通用指导,无需列出章节来源]
章节来源
章节来源
章节来源
章节来源
章节来源
[本节为通用指导,无需列出章节来源]
章节来源
章节来源
[本节为通用指导,无需列出章节来源]
本排查文档围绕Koa应用的中间件、服务与业务控制器,构建了从启动到运行的全链路故障排查路径。通过统一的错误处理、性能监控、日志与Sentry监控、Redis与队列的可观测性,以及针对TTS与书籍生成的专项流程,可快速定位并解决生产环境中的常见问题。建议在变更发布前进行端到端回归测试,并持续完善监控与告警体系。
[本节为总结性内容,无需列出章节来源]
章节来源
章节来源