大型NodeJS项目架构与优化


使用场景:

  1. proxy(API冗余,跨域)
  2. vue ssr(服务端渲染)
  3. socket(大并发,通讯)
  4. 区块链(创业公司,新兴行业)

 讨论什么?

  1. NodeJS异步IO原理及优化方案
  2. NodeJS内存管理及优化方案
  3. 大型项目Node站点结构原理
  4. 服务器集群与Node集群应用
  5. UV过千万的Node站点真身

一.NodeJS异步IO原理及优化方案

  1. 异步IO消除UI阻塞
    1. EventLoop LIBUV(事件通知)  EVENT QUENE事件队列 回调CALLBACK WORKER THREADS(线程池)
    2. setTimeout setInterval(线程池不参与 ) setImmedate优先级比 process.nextTick低
    3. 函数式编程 app.use(fun) 高阶函数 EventEmitter
    4. 异步手段  step  wind Bigpipe Q.js(老项目express推荐)   promise(promise.all并发) async await(新项目koa 记得引入polyfill)
  2. IO昂贵,分布式IO更昂贵
  3. 适用于IO密集  不适用于CPU密集(书写方式不舒服回调async await,银行处理大量计算,导致卡死)

二.NodeJS内存管理及优化方案

  1.  闭包使用不得当,CPU爆满
  2. 垃圾回收机制
    1. 新生代(存活时间短)scavenge算法(from  to交换位置) marksweep标记清除  内存不连续,用mark-compact合并内存
    2. 老生代

三.大型项目Node站点结构原理

  1. MVC经典框架(Yii标准MVC)
  2.  .NET多层 BLL 业务逻辑  DALFactory  SQLDAL DLLibrary DBUtil
  3. Java action dao po service common

四.服务器集群与Node集群应用

  1. 前端工程化压缩打包合并CDN
  2. 单测 压测 性能分析工具发现BUG
  3. 编写nginx.conf实现负载均衡和反向代理
  4. pm2(cluster)集群启动应用,小流量灰度上线 发现BUG
  5. 服务器集群 nginx lvs->pm2(CDN)->varnish(缓存)->Node->Java->DB->write(read)->BACK
  6. 上线前的不眠夜

五.UV过千万的Node站点真身

  1. docs(文档)
  2. nodeuii(node)
  3. scripts(项目启动脚本bin)
  4. webapp(前端页面)
  5. webapp.build.sh(前端打包)