简介
在阅读《nodejs深入浅出》中“产品化”章节后,在项目编写时所考虑的各个方面有了更加全面的理解,并且了解到项目从开始编写到最终部署服务器需要注意的地方。但是文中未对其中的技术进行拓展性的讲解,我将在未来的几篇文章对其中的技术难点进行解析,欢迎大家阅读。
本篇为入门,使大家了解到“产品化”章节所讲解的内容。
文档参考:《nodejs深入浅出》“产品化”章节。
项目工程化
将各种功能文件分门别类地归类到指定目录中。
项目结构
使用脚手架生成项目结构,了解每个初始文件夹和文件的作用,做到归类。
构建工具
自动化处理重复动作,例如:合并静态文件,压缩文件大小,打包应用,编译模块,代码测试等
linux
Makefile
linux系统下的最常用的构建工具
gulp
gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器,支持跨平台。
编码规范
多人编辑代码的时候需要统一编码规范,常用的有 ESLint。
ESLint快速上手:http://www.zmscode.cn/2018/08/25/ESLint快速上手/
代码审查
通过gitlab等开源工具搭建内部的代码托管平台。新功能开发单独开一个分支分出,每次都单独提交到分支,等全部功能开发完后合并到主干,进行代码审核。
审核内容
- 功能是否正确完成
- 编码风格是否符合规范
- 是否具有单元测试
部署流程
部署环境
代码—>stage(测试环境)—>pre-release(预发环境)—>product(线上环境)
- 本地开发完成,并且单元测试全部完成
- 准备测试环境提供测试人员验证代码正确
- 准备更接近线上真实数据,部署预发环境进行测试
- 部署线上环境
部署操作
pm2快速上手:http://www.zmscode.cn/2018/08/30/pm2快速上手/
pm2日志管理pm2-logrotat: http://www.zmscode.cn/2018/08/17/pm2日志管理pm2-logrotat/
性能
动静分离
静态文件通过 Nginx 部署,使服务更加专注于动态服务。
Nginx快速上手:http://www.zmscode.cn/2018/09/03/nginx快速上手/
启用缓存
redis
多进程架构
pm2 cluster模式
读写分离
数据库读写分离配置,避免数据写入时候的操作,导致读取的速度受到影响。
日志
访问日志
记录每次请求的url,method,参数,header,ip等
异常日志
异常日志单独输出,通过日志文件可以确定BUG出现位置。
分割日志
避免单个日志过大,影响查询效率。可以根据文件大小或者文件日期对日志进行切割或者回滚。
小结
以下部分一般由运维人员提供支持,不需要太深入的了解。
监控报警
监控
- 进程
- 磁盘
- 内存
- 响应时间
- 日志(主要检测异常报警)
- cpu占用
- I/O负载
- 网络
- 应用状态(提供API让监控程序访问)
报警实现
- 邮件报警
稳定性,负载均衡
- 多机器
- 多机房
- 容灾备份