1. 程式人生 > >大型NodeJS專案架構與優化

大型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(前端打包)