大型NodeJS專案架構與優化
阿新 • • 發佈:2018-11-23
使用場景:
- proxy(API冗餘,跨域)
- vue ssr(服務端渲染)
- socket(大併發,通訊)
- 區塊鏈(創業公司,新興行業)
討論什麼?
- NodeJS非同步IO原理及優化方案
- NodeJS記憶體管理及優化方案
- 大型專案Node站點結構原理
- 伺服器叢集與Node叢集應用
- UV過千萬的Node站點真身
一.NodeJS非同步IO原理及優化方案
- 非同步IO消除UI阻塞
- EventLoop LIBUV(事件通知) EVENT QUENE事件佇列 回撥CALLBACK WORKER THREADS(執行緒池)
- setTimeout setInterval(執行緒池不參與 ) setImmedate優先順序比 process.nextTick低
- 函數語言程式設計 app.use(fun) 高階函式 EventEmitter
- 非同步手段 step wind Bigpipe Q.js(老專案express推薦) promise(promise.all併發) async await(新專案koa 記得引入polyfill)
- IO昂貴,分散式IO更昂貴
- 適用於IO密集 不適用於CPU密集(書寫方式不舒服回撥async await,銀行處理大量計算,導致卡死)
二.NodeJS記憶體管理及優化方案
- 閉包使用不得當,CPU爆滿
- 垃圾回收機制
- 新生代(存活時間短)scavenge演算法(from to交換位置) marksweep標記清除 記憶體不連續,用mark-compact合併記憶體
- 老生代
三.大型專案Node站點結構原理
- MVC經典框架(Yii標準MVC)
- .NET多層 BLL 業務邏輯 DALFactory SQLDAL DLLibrary DBUtil
- Java action dao po service common
四.伺服器叢集與Node叢集應用
- 前端工程化壓縮打包合併CDN
- 單測 壓測 效能分析工具發現BUG
- 編寫nginx.conf實現負載均衡和反向代理
- pm2(cluster)叢集啟動應用,小流量灰度上線 發現BUG
- 伺服器叢集 nginx lvs->pm2(CDN)->varnish(快取)->Node->Java->DB->write(read)->BACK
- 上線前的不眠夜
五.UV過千萬的Node站點真身
- docs(文件)
- nodeuii(node)
- scripts(專案啟動指令碼bin)
- webapp(前端頁面)
- webapp.build.sh(前端打包)