所谓的工程化,能够理解为项目的组织能力。体如今文件的node
主要的两类项目为Web应用和模块应用。普通的模块应用遵循CommonJS的模块和包规范。对于Web应用,组织方式各类各样,可是只要遵循单一原则便可。git
要想真正能用上源代码,还须要必定的操做,操做包括合并静态文件、压缩文件大小、打包应用、编译模块。每次都手动完成这些操做,效率会比较低下。为了节省资源,使用构建工具完成这些工做。数据库
Node上的构建工具:浏览器
Makefile缓存
只能在*nix操做系统上有效;bash
Grunt服务器
能够跨平台;网络
编码规范的实现方式:架构
代码审查创建在具体的代码提交过程当中。app
对于使用GitHub或Gitlab开源工具搭建的代码托管平台,能够利用git的分支特色,很好地实现代码审查。
代码在完成开发、审查、合并以后进入部署流程。
在实际项目需求中,有两点须要验证,一是功能的正确性,二是与数据相关的检查。
普通测试环境称为stage环境;
预发布环境称为pre-release环境;
实际的生产环境称为product环境;
就普通的实例代码而言,一般直接在命令行执行node file.js以启动应用。
对于长时间执行的服务进程而言,存在两个问题:
为了能让进程持续执行,用nohup和&以不挂断进程的方式执行:
$ nohup node app.js &
复制代码
Node产品的性能与许多因素相关,对于Web应用而言,最直接有效的莫过于动静分离、多进程架构、分布式。
拆分原则:
在普通的Web应用中,Node尽管能够经过中间件实现静态文件服务,可是Node处理静态文件的能力不够退出。将图片、脚本、样式表和多媒体等静态文件都引导到专业的静态文件服务器上,让Node只处理动态请求便可。这个过程能够用Nginx或者专业的CDN来处理。
将动态请求和静态请求分离后,服务器能够专一于动态服务方面,专业的CDN会将静态文件与用户尽量靠近,同时可以有更精确和高效的缓存机制。静态文件请求分离后,对静态请求使用不一样的域名或多个域名还能消除掉没必要要的Cookie传输和浏览器对下载线程数的限制。
提高性能的两个途径:
前者提高的性能在海量流量面前终有瓶颈,但后者却可以在访问量越大时收益越多。避免没必要要的计算,应用场景最多的就是缓存。
Redis和Memcached几乎是Web应用的标准配置。
若是你的产品须要应对巨大的流量,启动缓存并应用好它,是系统性能瓶颈的关键。
经过多进程架构,不只能够充分利用多核CPU,更是能够创建机制让Node进程更加健壮,以保障Web应用持续服务。
针对数据库而言,读取的速度远远高于写入的速度。儿某些数据库在写入时为了保证数据一致性,会进行锁表的操做,这同时会影响到读取的速度。某些系统为了提高性能,一般会进行数据库的读写分离,将数据进行主从设计,这样读数据再也不受到写入的影响,下降了性能的影响。
在健全的系统中,完善的日志最可以还原问题现场。经过记录日志来定位问题是一种成本较小的方式。
访问日志通常用来记录每一个客户端应用的访问。在Web应用中,主要记录HTTP请求中的关键数据。通常的Web服务器都实现了记录访问日志的功能。只要简单的配置便可启用。在用Nginx或Apache进行反向代理时,能够利用这些已有的设施完成访问日志的记录。
异常日志一般用来记录那些意外产生的异常错误。经过日志的记录,开发者能够根据异常信息定位Bug出现的具体位置,以快速修复问题。
异常日志的分级:
对日志不了解的开发者会选择将日志写入数据库中。数据库比日志文件好的地方在于它是结构化数据,能够直接编写SQL语句进行分析,日志文件则须要再加工以后才能分析。
线上业务可能访问量巨大,产生的日志也多是大量的,将产生的日志按日期分割是个不错的主意。
应用的监控主要分两类:
监控主要经过定时采样来进行记录。
监控的主要目的是为了将一些重要指标采样记录下来,一旦这些指标发生较大变化,能够配合报警系统将问题反馈到负责人那。
为了保证应用的稳定性,引入了一个庞大的监控系统,监控系统自身的稳定性对应用也很是重要。
为了更好的稳定性,典型的水平扩展方式就是多进程、多机器、对机房。
站在技术的产品化的角度来看,选择一门新技术应用在生产环境就得考虑与已有的系统或者服务可否异构共存。