项目工程化
所谓的工程化,可以理解为项目的组织能力。最基本的几步是目录结构、构建工具、编码规范、代码审查
目录结构
目前,主要的两类项目为Web应用和模块应用。普通的模块应用遵循CommonJs的模块和包规范。Web应用的形式各有各样,这里有一个模版:
构建工具
webpack
编码规范
ESlint
代码审查
Git
部署流程
先部署到测试环境,再部署到生产环境
部署环境
部署操作
使用nohup
和&
让任务变为后台任务并以不挂断进程的方式执行:
1 | nohup node app.js & |
使用pm2模块
性能
Node产品的性能与许多因素相关,这里我们将范畴缩减到Web应用中,只评估一些常见的提升性能方法:
- 动静分离
- 多进程架构
- 分布式
- 缓存
动静分离
启用缓存
Redis或Memcached
多进程架构
pm2
读写分离
数据库的读写分离。数据库的读取速度比写入速度快很多,并且数据库写入时会进程锁表操作。
日志
在健全的系统中,完善的日志记录最能够还原问题现场。通过记录日志来定位问题是一种成本较小的方式。
访问日志
访问日志一般用来记录每个客户端对应用的访问。在Web应用中,主要记录HTTP请求中的关键数据。
异常日志
异常日志通常用来记录那些意外产生的异常错误。
Node中,逐层次的异步API调用中,异常是传递给调用方还是立即通过日志记录?异常尽量由最上层的调用者捕获记录,底层调用或中间层调用中出现的异常只要正常传递给最上层的调用方即可。
分割日志
按日前分割日志
监控报警
应用的监控主要有两类:
- 业务逻辑型的监控
- 硬件型的监控
同时还要对监控的信息设置上限,一旦出现大的波动,就需要发出警报提醒开发者。
监控
- 日志监控
- 响应时间
- 进程监控
- 磁盘监控
- 内存监控
- CPU占用监控
- CPU load监控
- I/O负载
- 网路监控
- 应用状态监控
- DNS监控
报警的实现
- 邮件报警
- 短信报警