制作1.项目工程所谓工程,可以理解为项目的组织能力。1.1目录结构体现在文件中主要的两类项目是Web应用和模块应用。公共模块应用程序遵循CommonJS模块和包规范。对于Web应用程序,有多种组织方式,但只要遵循一个原则即可。1.2为了使构建工具真正使用源代码,需要进行一些操作,包括合并静态文件、压缩文件大小、打包应用程序和编译模块。每次都手动进行这些操作,效率很低。为了节省资源,使用构建工具来完成这项工作。Node上的构建工具:Makefile只能在*nix操作系统上有效;Grunt可以跨平台;1.3CodingStandardCodingStandard实现:document-styleconvention;(靠自觉)提交代码时强制检查;(取决于工具)1.4CodereviewCodereview建立在具体的代码提交过程中。对于使用GitHub或者Gitlab开源工具构建的代码托管平台,可以利用git的分支特性来很好的实现代码审查。2.部署流程代码在开发、审核、合并完成后进入部署流程。2.1部署环境在实际项目需求中,有两点需要验证,一是功能的正确性,二是数据相关的检查。一般的测试环境称为舞台环境;预发布环境称为预发布环境;实际生产环境称为产品环境;2.2部署操作对于常见的示例代码,通常在命令行直接执行nodefile.js启动应用。对于长时间运行的服务进程,存在两个问题:占用命令行窗口;退出窗口会导致打开的进程一起退出;为了保持进程运行,使用nohup和&不挂起通过中断进程执行:$nohupnodeapp.js&3。性能Node产品的性能与许多因素有关。对于Web应用来说,最直接有效的就是动静分离、多进程架构、分布式。分离原则:做具体的事情,让你擅长的工具做你擅长的事情,简化模型。风险与缓存的分离3.1动静分离在普通的web应用中,Node虽然可以通过中间件实现静态文件服务,但是Node处理静态文件的能力还不够退出。将图片、脚本、样式表、多媒体等静态文件指向专业的静态文件服务器,让Node只处理动态请求。这个过程可以用Nginx或专业的CDN来处理。将动态请求和静态请求分离后,服务端就可以专注于动态服务了。专业的CDN会将静态文件放置在尽可能靠近用户的地方,同时拥有更准确高效的缓存机制。静态文件请求分离后,静态请求使用不同域名或多个域名也可以消除不必要的cookie传输和浏览器对下载线程数的限制。3.2启用缓存提高性能有两种方式:提高服务速度;避免不必要的计算;前者的性能在面对海量流量时最终会成为瓶颈,而后者则可以在访问量增加时受益更多。为了避免不必要的计算,最常见的应用场景是缓存。Redis和Memcached几乎是Web应用的标准配置。如果你的产品需要处理大流量,开启缓存并应用好缓存是解决系统性能瓶颈的关键。3.3多进程架构通过多进程架构,不仅可以充分利用多核CPU,还可以建立一种机制让Node进程更加健壮,从而保证web应用的持续服务。3.4读写分离对于数据库来说,读取速度远高于写入速度。有些数据库在写的时候会锁表来保证数据的一致性,这也会影响读的速度。一些系统为了提高性能,通常会将数据库的读写分离,将数据设计为主从,这样读的数据就不再受写的影响,减少对性能的影响。4.登录健全的系统,完善的登录才能最好的还原问题站点。通过记录日志来定位问题是一种成本较低的方式。4.1访问日志访问日志一般用于记录各个客户端应用程序的访问情况。在Web应用中,主要记录HTTP请求中的关键数据。一般的Web服务器都实现了记录访问日志的功能。它可以通过简单的配置启用。当使用Nginx或Apache作为反向代理时,这些现有的设施可以用来记录访问日志。4.2异常日志异常日志通常用来记录那些意想不到的异常错误。通过日志记录,开发者可以根据异常信息定位到BUG的具体位置,从而快速修复问题。异常日志分类:console.log:普通日志console.info:普通信息console.warn:警告信息console.error:错误信息4.3日志与数据库不了解日志的开发者会选择将日志写入数据库。数据库相对于日志文件的优势在于它是结构化数据,可以直接写SQL语句进行分析,而日志文件需要经过处理才能进行分析。4.4日志拆分线上业务可能会有大量的访问量,可能会产生大量的日志。按日期拆分生成的日志是个好主意。5、监控告警应用监控主要分为两大类:业务逻辑类监控;硬件类型监控;监测主要通过定期采样进行记录。5.1监测监测的主要目的是对一些重要指标进行采样和记录。一旦这些指标发生明显变化,就可以通过报警系统将问题反馈给负责人。日志监控、响应时间、进程监控、磁盘监控、内存监控、CPU使用率监控、CPU负载监控、I/O负载监控、网络监控、应用状态监控、DNS监控。引入了庞大的监控系统,监控系统本身的稳定性对于应用来说也是非常重要的。6.稳定性为了更好的稳定性,典型的横向扩展方式是多进程、多机、机房。7.异构共存从技术产品化的角度来看,在选择一项新技术应用于生产环境时,需要考虑其能否与现有系统或服务异构共存。
