19 条 Node.js 生产环境中的最佳实践

Posted Node地下铁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19 条 Node.js 生产环境中的最佳实践相关的知识,希望对你有一定的参考价值。

作者是一名独立的 Node.js 开发者,他从多篇优质文章中总结出 19 条生产环境的最佳实践建议,可应用到线上正式运行中的产品中去,有需要的读者不可错过。

文中除了给出建议之外,还附带详细的讲解、示例,有些还给出 gist 代码片段。

这里简要陈述这些建议:

  1. 监控应用程序。详细知晓应用的运行情况,应要比客户更早收到应用异常情况。
  2. 合理组织日志。详细的、富有逻辑的日志,有助于快速排查问题。
  3. 尽可能将任务交给反向代理;将 gzip、SSL 等 CPU 密集计算型的任务交给反向代理(诸如 nginx, HAproxy),提高 Node.js 应用的响应速度。
  4. 锁定依赖。确保所有的环境下的代码的一致性,因此需要锁定 npm 包管理器的依赖项;注:NPM 5 和 Yarn 默认都会锁定依赖项。
  5. 监视运行情况,并在应用崩溃的时候能自动重启。需要使用 PM2 等工具,如果 Docker 化,则使用其他集群管理工具;
  6. 确保错误得到及时处理。如果不然,连用户传入一个无效 JSON 对象都可能会让你的应用崩溃掉;
  7. 充分利用 CPU 资源。服务器都是多核的,使用 Node Cluster 或 PM2 管理应用在每个核上运行进程,充分利用 CPU 多核资源;
  8. 创建用于应用维护的 API。暴露一个经过加密认证的 API,方便开发人员可以获取应用的堆栈等信息,以备不时之需;
  9. 用 APM 提高应用管理的用户体验;相比传统的管理服务只是简单陈列数据,应用性能管理系统(Application Performance Monitoring,APM)以更好的用户体验关联其这些数据,让应用管理变得轻松又强大;
  10. 随时为上线做准备。开发的第一天起就应该为上线做准备(此条中作者还列举了一些建议)。
  11. 加固应用的安全性。应用的安全是很大的话题,但最基础的安全防护(诸如SSL/TLS、Cookie)必须得实现。
  12. 监控内存使用。V8 引擎对内存的分配比较宽松,必须要监控好应用的内存使用情况。
  13. 前端资源需要剥离出应用。使用专用的中间件(Nginx, S3, CDN)托管前端资源;
  14. 无状态化,能够做到每天重启也不影响应用运行。将数据(session、缓存、上传的文件等)存放在外部数据存储中,尝试微服务架构,增强应用的可扩展性和可维护性;
  15. 用工具自动探测应用安全漏洞。纵使声誉良好的 Express 框架在演进过程中也有很多漏洞,保持对系统的安全扫描,及时修复漏洞;
  16. 给日志赋值 TransactionID。给每个请求附上相同的事务标识符(TransactionID),能够方便按时序排查分析问题。
  17. 设置 NODE_ENV=production。设置该配置项,很多包工具会使用优化过的代码。
  18. 设计自动化、原子化的应用部署。快速、简单的自动化部署能够降低应用的维护成本,也利于版本的迭代;
  19. 每次部署使用新的 NPM 版本号。当应用的新版本发布上线,记得要更新 package.json 中的 version 字段,这将让产品的版本迭代更加清晰;

更多详细使用的细节,请『阅读原文』