使用場景:
- 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(前端打包)