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