大規(guī)模Node項目架構(gòu)和優(yōu)化

這節(jié)課我們要討論什么

1寨典、NodeJs異步IO原理淺析及優(yōu)化方案

2氛雪、nodejs內(nèi)存管理機制以及內(nèi)存優(yōu)化

3、大規(guī)模node站點結(jié)構(gòu)原理分析

4耸成、服務(wù)器集群管理和node集群的應(yīng)用

5报亩、UV過千萬的Node站點真身

異步IO原理淺析

NodeJS異步IO原理淺析及優(yōu)化方案

io就是輸入和輸出 input output

io密集型 一堆請求像你襲來 這個時候node全部接受 基于異步的處理機制

cpu要進行緊急運算

io是昂貴的

cup是昂貴的 因為運算特別快

cpu時鐘周期 ?1/cpu 越

cpu分成兩級緩存 一級緩存和二級緩存

內(nèi)存緩存 member cache

緣起: 在數(shù)據(jù)驅(qū)動的web開發(fā)中,經(jīng)常要重復(fù)從數(shù)據(jù)庫中取出相同的數(shù)據(jù)井氢,這種重復(fù)極大的增加了數(shù)據(jù)庫負載弦追。緩存是解決這個問題的好辦法。

Memcached是什么?

Memcached是由Danga Interactive開發(fā)的花竞,高性能的劲件,分布式的內(nèi)存對象緩存系統(tǒng),用于在動態(tài)應(yīng)用中減少數(shù)據(jù)庫負載左胞,提升訪問速度寇仓。

js和java不在一臺服務(wù)器上 分布式服務(wù)器 通過網(wǎng)絡(luò)進行請求 并在硬盤上找到文件 但是對于取到j(luò)s文件時間更加長了 a.xx.com js訪問 b.xx.com java

ws同步處理的任務(wù) wp異步的任務(wù)

異步io創(chuàng)建出文件描述符后,等待系統(tǒng)底層處理后在扔回去

app就是application就是應(yīng)用程序的簡稱 通過js代碼綁定到v8的進程中 瀏覽器和v8引擎不支持es6 ?v8引擎通過nodejs基礎(chǔ)的api 電飯鍋飯好了會叫 被node封裝了一層libuv 也叫asynchronous io node封裝的一種異步通知的機制烤宙,eventloop 事件從event queue(事件隊列)中 交給worker therads(工作線程)執(zhí)行完畢后告訴eventloop 交回eventqueue(看nodejs事件驅(qū)動機制)

AIO ( Asynchronous I/O):異步非阻塞I/O模型遍烦。異步非阻塞與同步非阻塞的區(qū)別在哪里?異步非阻塞無需一個線程去輪詢所有IO操作的狀態(tài)改變躺枕,在相應(yīng)的狀態(tài)改變后服猪,系統(tǒng)會通知對應(yīng)的線程來處理。對應(yīng)到燒開水中就是拐云,為每個水壺上面裝了一個開關(guān)罢猪,水燒開之后,水壺會自動通知我水燒開了叉瘩。

BIO (Blocking I/O):同步阻塞I/O模式膳帕,數(shù)據(jù)的讀取寫入必須阻塞在一個線程內(nèi)等待其完成。這里使用那個經(jīng)典的燒開水例子薇缅,這里假設(shè)一個燒開水的場景危彩,有一排水壺在燒開水,BIO的工作模式就是泳桦, 叫一個線程停留在一個水壺那汤徽,直到這個水壺燒開,才去處理下一個水壺灸撰。但是實際上線程在等待水壺燒開的時間段什么都沒有做谒府。

NIO (New I/O):同時支持阻塞與非阻塞模式拼坎,但這里我們以其同步非阻塞I/O模式來說明,那么什么叫做同步非阻塞完疫?如果還拿燒開水來說泰鸡,NIO的做法是叫一個線程不斷的輪詢每個水壺的狀態(tài),看看是否有水壺的狀態(tài)發(fā)生了改變趋惨,從而進行下一步的操作鸟顺。

從服務(wù)器上看node

Nginx負載均衡代理到lvs

?pm2負載均衡去啟動node 可以幫助零秒熱啟

pm2 是一個帶有負載均衡功能的Node應(yīng)用的進程管理器.

幫助事件輪詢的libuv庫和v8不是一個線程?

libuv封裝了兩個東西在linux下叫custom threradpool 在windows 叫iocp

nodejs代碼單線程 cluster啟動多個服務(wù) fork啟動一個服務(wù)復(fù)制多個 主進程死了其余都崩潰 兩種機制

哨兵變量

v8的垃圾回收策略基于分代式垃圾回收機制:新生代為存活時間較短的對象惦蚊,老生代為存活時間較長的對象器虾,gc是一種回收機制,來區(qū)分出新生代和老生代蹦锋,scavenge算法兆沙,把內(nèi)存一分為二,var a alert(a) var b 莉掂,此時b沒有用到葛圃,把代碼進行反轉(zhuǎn),var a alert(a)憎妙,把a放到老生代空間內(nèi)库正,老生代空間越來越多,也需要清理厘唾,a=null褥符,把空間標記為星,把有用變量挪到一起抚垃,帶星的刪除喷楣。即先把變量放到老生態(tài)空間,在通過標記清除移動的方法鹤树,把老生態(tài)空間沒用的內(nèi)存干掉铣焊,跟磁盤碎片清理相似。

net多層架構(gòu)

website 前端代碼 html css js代碼

webstieTest 單元測試文件夾

webService 外界提供接口

webControllers 路由

SQLServerDAL 數(shù)據(jù)庫的一些具體的操作

Model 數(shù)據(jù)庫對應(yīng)的模型

IDAL 接口 不干活

DLLLlbraly 第三方的庫

DBUtility 數(shù)據(jù)庫封裝的庫

DataCache 一些緩存?

DALFactory 最重要

BLL 真正干活 把IDAL接口層和SQLServerDAl連接起來 真正的路由落到BLL上

JavaWeb多層架構(gòu)

action 路由層

common 公共的類

dao 數(shù)據(jù)庫的實現(xiàn)層

po 數(shù)據(jù)庫的類

service 實現(xiàn)數(shù)據(jù)操作的

依賴注入 控制反轉(zhuǎn)

pm2 0秒停機重啟

服務(wù)器集群

NGINX LVS?

前端項目構(gòu)建

dosc 前端項目

nodeuii node項目

scripts 運行腳本

webapp build腳本build到nodeuii中

nodeuii中包含

app.js 啟動文件

bin 腳本

config 配置文件

controllers 路由

lib 常用的幫助庫

middleware 中間件

models 和后端請求用的

nginx-conf ?nginx配置文件

node_modules node包

package.json 包管理器

pm2.json pm2的配置文件

public 公共的前端資源配置文件

receiver-master ?接收前端傳過來的receiver

test 功能化測試

views 模板

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罕伯,一起剝皮案震驚了整個濱河市曲伊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌追他,老刑警劉巖坟募,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異湿酸,居然都是意外死亡婿屹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門推溃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昂利,“玉大人,你說我怎么就攤上這事》浼椋” “怎么了犁苏?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扩所。 經(jīng)常有香客問我围详,道長,這世上最難降的妖魔是什么祖屏? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任助赞,我火速辦了婚禮,結(jié)果婚禮上袁勺,老公的妹妹穿的比我還像新娘雹食。我一直安慰自己,他們只是感情好期丰,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布群叶。 她就那樣靜靜地躺著,像睡著了一般钝荡。 火紅的嫁衣襯著肌膚如雪街立。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天埠通,我揣著相機與錄音赎离,去河邊找鬼。 笑死植阴,一個胖子當著我的面吹牛蟹瘾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掠手,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼憾朴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喷鸽?” 一聲冷哼從身側(cè)響起众雷,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎做祝,沒想到半個月后砾省,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡混槐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年编兄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声登。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狠鸳,死狀恐怖揣苏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情件舵,我是刑警寧澤卸察,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站铅祸,受9級特大地震影響坑质,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜临梗,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一涡扼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夜焦,春花似錦壳澳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萎津。三九已至卸伞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锉屈,已是汗流浹背荤傲。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颈渊,地道東北人遂黍。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像俊嗽,于是被迫代替她去往敵國和親雾家。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容