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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM