菜单

生产环境最佳实践

相关源文件

本页面涵盖了在生产环境中运行 Node.js 应用程序的关键实践。它讨论了监控、日志记录、部署策略以及其他确保您的应用程序在生产环境中可靠、安全且高效运行的关键方面。有关特定于安全的实践,请参阅 安全最佳实践,有关生产前的代码质量考虑,请参阅 测试和质量最佳实践

目录

监控

有效的监控对于维护健康的生产环境至关重要。至少,您应该跟踪以下基本指标

  • CPU 使用率
  • 内存消耗(系统和 Node.js 进程)
  • 错误率和模式
  • 响应时间
  • 进程重启次数
  • 网络流量

监控架构

除了基本指标之外,应用程序性能监控 (APM) 解决方案还能提供更深入的见解

  • 详细的事务跟踪
  • 数据库查询性能
  • 外部服务依赖
  • 用户体验指标
  • 资源瓶颈识别

选择一个平衡这些考虑因素的监控解决方案

  • 易于设置
  • 警报中的信号与噪声比
  • 可视化能力
  • 历史数据保留期
  • 成本效益

来源:sections/production/monitoring.md README.md5

日志记录策略

实施全面的日志记录策略,以加快故障排除速度并更好地了解应用程序的行为。

智能日志记录实践

  1. 使用结构化日志记录器 - 优先使用结构化日志记录(JSON 格式),而不是纯文本,以便于解析和查询
  2. 包含上下文信息 - 每个日志条目都应包含相关上下文,例如请求 ID、用户 ID、服务名称
  3. 记录到 stdout - 将日志输出到 stdout,并让容器或平台服务处理日志路由和存储
  4. 使用适当的日志级别 - 区分调试、信息、警告和错误日志

事务 ID 跟踪

最有价值的日志记录实践之一是为每个请求分配一个唯一的事务 ID,并将其传播到与该请求相关的所有日志中。

事务 ID 的实现示例

来源:sections/production/assigntransactionid.md sections/production/smartlogging.md README.md5 README.md5 README.md5 README.md5

进程管理

Node.js 应用程序需要适当的进程管理才能实现稳定性和弹性。

进程管理工具

根据您的部署策略选择合适的进程管理器

进程管理器最佳用途主要功能
PM2传统部署自动重启、集群模式、日志管理
SystemdLinux 服务器系统服务集成、依赖管理
容器编排器Docker/Kubernetes自动扩展、自愈、资源限制

无状态设计

尽可能使您的应用程序设计为无状态,以提高可伸缩性和弹性

  1. 将会话数据存储在外部数据存储中(Redis、MongoDB 等)
  2. 除临时文件外,避免使用本地文件存储
  3. 设计为随时可以平稳重启
  4. 使用外部缓存服务而不是内存缓存

来源:sections/production/guardprocess.md sections/production/bestateless.md README.md5 README.md5

部署注意事项

依赖管理

锁定您的依赖项以确保部署一致性

  1. 使用 package-lock.jsonyarn.lock 文件
  2. 在 CI/CD 流水线中考虑使用 npm ci 而不是 npm install
  3. 使用 save-exact=true 配置 .npmrc 以始终保存确切的版本

示例 .npmrc 配置

save-exact=true

环境配置

使用 NODE_ENV=production 来启用生产优化

利用反向代理

将 CPU 密集型任务委托给 Nginx 或 HAProxy 等专用工具

任务应由...处理
静态文件服务Nginx/CDN
SSL 终止Nginx/负载均衡器
压缩Nginx
限流Nginx/网关
负载均衡Nginx/HAProxy/云 LB

来源:sections/production/lockdependencies.md sections/production/delegatetoproxy.md README.md5 README.md5 README.md5

资源优化

内存管理

Node.js 在 64 位环境中有一个约 1.4GB 的默认内存限制。监控和管理内存使用情况以防止内存泄漏和崩溃

  1. 在生产环境中设置明确的内存限制
  2. 实现平稳的内存监控和操作触发器
  3. 在开发环境中定期检查堆快照

内存监控示例

CPU 利用率

通过集群或工作线程最大化 CPU 使用率

来源:README.md5 README.md5

维护与运维

维护端点

为运营任务和诊断实现安全维护终结点

维护终结点的关键考虑因素

  • 使用强身份验证限制访问
  • 实施速率限制
  • 仅公开必要信息
  • 将终结点与常规 API 路由分开

使用 Node.js 的 LTS 版本

在生产环境中始终使用 Node.js 的 LTS(长期支持)版本,以确保稳定性和安全性。LTS 版本接收

  • 关键错误修复
  • 安全更新
  • 性能改进
  • 更长的支持窗口

来源:sections/production/createmaintenanceendpoint.md sections/production/LTSrelease.chinese.md README.md5 README.md5

生产就绪检查清单

在部署到生产环境之前,请确保您的应用程序满足这些要求

类别检查项
监控✓ 基本指标收集
✓ 错误监控
✓ 性能监控
日志记录✓ 结构化日志
✓ 事务 ID 跟踪
✓ 日志聚合设置
韧性✓ 已配置进程管理器
✓ 已处理平稳关机
✓ 故障时自动重启
性能✓ 已完成负载测试
✓ 已执行内存剖析
✓ 已配置连接池
安全✓ 依赖项安全审计
✓ 已保护环境变量
✓ 已实现速率限制
部署✓ 已建立 CI/CD 流水线
✓ 已定义回滚策略
✓ 蓝绿部署或金丝雀部署能力
文档✓ 已创建运行手册
✓ 已更新 API 文档
✓ 已记录监控仪表板

来源:sections/production/productioncode.md README.md5


本概述为在生产环境中运行 Node.js 应用程序提供了基础性指导。有关每个主题的更具体详细信息,请参阅本文档中的链接部分。