Skip to content

Latest commit

 

History

History
68 lines (37 loc) · 4.1 KB

lesson6.md

File metadata and controls

68 lines (37 loc) · 4.1 KB

第六章: Node.js开发体系实践

主要探讨Node.js框架所带来的价值和对开发同学的影响.

一、Node.js框架选型

每个团队都会有自己的业务框架,不论是阿里的egg或alinode,还是腾讯Tars-node或TSW.每种框架都有各自的适用场景,选择适合自己业务并且能够掌控它就是最好的.

好的架构离不开文档和代码注释的专业程度,好的架构或者开发范式,可以让不同层次的开发者写出类似水平的服务,这就是体系所体现的价值.

大部分“Node框架“的核心价值是实现开发范式的统一.目前主要是Express和koa引领了2个阶段的潮流,不同团队之间的差异化导致大家都会有自己的开发范式和架构.这样,在项目交接以及协同开发的时候,矛盾就出现了.就像eslint一样,不是说遵守了就一定能保证代码没有BUG,而是大家遵守了一个范式,代码会相对比较同质化,一个团队的成员更好的维护,有助于协同开发.

二、Node.js开发体系

node-dev-system

  • 维护一套文件引用的规则包括路由,加载顺序,确保优先级,加入一些定制化的组件;

  • 用了cluster模块,需要维护进程间消息通信和常规操作,比如:心跳、重启等;

  • 针对不同的开发环境,开发的配置定制化,因此需要维护多套config;

  • 调试相关:与不同的服务联调,包括[开发、测试、正式环境]

  • 工程化...

  • 工具平台...

三、抽象出一套中间件

node-middle-ware

四、开发范式

每个团队需遵守一套相同的规则,比如一个node.js工程目录及作用:

  • public: 静态文件;
  • assets: 资源文件;
  • lib: 公共代码库;
  • config: 配置文件;
  • app: 业务代码.

从框架角度,以koa洋葱模型来分析,写的业务代码,跟中间件没什么区别,都是放到洋葱里面去执行,只是业务代码在洋葱里面,而框架代码在开始就已经注册进去了.这就是为什么,你可以只写很少的代码,就能做很多事情.很多共性的,基础性的工作,框架都帮你封装好了.

node-koa

我们平时写一个路由,肯定是需要先require一个文件获得这文件export出来的变量,通过这个变量去调用其中的内容.但是这样的一个过程,虽然只是加载一个文件这么简单的事情,不同的开发者实现的范式就大不相同,因此,把它统一之后,大家的使用范式就一样了,节约了大家协同开发的成本.并且,好的中间件可以沉淀到框架里面,大家就可以共同使用,减少重复写代码的成本.

至于具体的实现在,把文件按照一定规则和优先级先后加载进来,并挂载到app对应的变量上面,如app.lib,app.controller,app.config等.

五、监控容灾

监控容灾是一个非常大的空间和范围,这里只是描述一个很小子集.

首先看一下心跳检测.业务开启了3个线程.每一秒钟,子进程会通过网络请求去向master上报心跳.这里是通过HTTP请求进行上报,也可以选择进程间通信,都可以进行父子进程的通信.完成子进程是否有效的判断,如果业务进程遇到了类似死锁,没办法跟master进程通信,就会kill然后fork重启.

关于监控上报,其中包括模调上报、业务日志上报.另外,对于外网定位和用户纬度的定位,可以增加一层代理进行染色.输出链路相关的日志.

六、开发调试

  1. 本地开发: 支持业务代码热更新,可以不需要手动执行类似npm run start;
  2. 测试环境: 远程调试,远程日志
  3. 调试: 打通本地与测试环境,本地与正式环境的网段隔离,可以搭建一个代理层服务,识别http请求的头部IP和端口进行转发,可以解决多人开发的环境隔离问题,同时也解决产品体验的问题.当然数据源还是一个,比如DB、分布式缓存公用一套.这样可以做到多个人协同开发.

总结

本文介绍Node整个开发、调试阶段所体现的状态,很多时候都是伴随的产品的演进去逐步完善流程和效率的过程,是一个很好的经验沉淀.