圖解大型網(wǎng)站架構(gòu)

對于大部分前端同學(xué)來說荸型,后臺服務(wù)或者整個網(wǎng)站架構(gòu)是個黑盒投储,前端工程師所看到所接觸的業(yè)務(wù)只是冰山一角衡招。

本文篱昔,從一個前端人的視角,以一張大型網(wǎng)站架構(gòu)圖開始始腾,將這個潘多拉的魔盒打開……只是概述性的介紹州刽,提綱式的分析講解。

來自李智慧老師《大型網(wǎng)站技術(shù)架構(gòu)-核心原理與案例分析》第一章的圖示浪箭。

distributed service.png

1. 接收請求

反向代理服務(wù)器接受請求穗椅,根據(jù)具體內(nèi)容路由到不同的服務(wù)器。

  1. 如果瀏覽器請求的是資源文件奶栖,比如HTML文件匹表,JavaScript或樣式表……
  • 第三方靜態(tài)資源:路由到CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))服務(wù)器上门坷。因為靜態(tài)資源不經(jīng)常改動(比如,第三方依賴庫袍镀,樣式表默蚌,字體文件等等),所以很適合存儲在CDN上苇羡。
  • 普通靜態(tài)資源:由反向代理服務(wù)器直接返回绸吸。
  1. 如果瀏覽器請求動態(tài)資源,比如REST請求设江,那么路由到“負(fù)載均衡調(diào)度服務(wù)器”锦茁,再由后臺應(yīng)用服務(wù)器集群處理。

2. 將業(yè)務(wù)拆分為多個服務(wù)叉存,服務(wù)協(xié)作完成請求

傳統(tǒng)方式是后臺只有一個服務(wù)码俩,包羅萬象。隨著項目越來越復(fù)雜鹉胖,以“高內(nèi)聚握玛,低耦合”的思想,將業(yè)務(wù)拆分為獨立模塊甫菠,分別部署挠铲。這就是圖中的“B應(yīng)用服務(wù)器1”,“A應(yīng)用服務(wù)器1”……

那么寂诱,如何拆分業(yè)務(wù)拂苹?

  • 根據(jù)業(yè)務(wù)屬性進(jìn)行垂直切分,比如:產(chǎn)品子系統(tǒng)痰洒,購物子系統(tǒng)瓢棒,支付子系統(tǒng),評論子系統(tǒng)丘喻,客服子系統(tǒng)脯宿,接口子系統(tǒng)(對接如進(jìn)銷存,短信等外部系統(tǒng))泉粉。
  • 根據(jù)業(yè)務(wù)子系統(tǒng)進(jìn)行等級定義连霉,分為核心系統(tǒng)和非核心系統(tǒng)。比如:核心系統(tǒng):產(chǎn)品子系統(tǒng)嗡靡,購物子系統(tǒng)跺撼,支付子系統(tǒng);非核心:評論子系統(tǒng)讨彼,客服子系統(tǒng)歉井,接口子系統(tǒng)。

業(yè)務(wù)經(jīng)過拆分哈误,每個子系統(tǒng)可由專門的團隊和部門負(fù)責(zé)哩至,解決模塊之間耦合以及擴展性問題躏嚎;每個子系統(tǒng)單獨部署,避免集中部署導(dǎo)致一個應(yīng)用掛了憨募,全部應(yīng)用不可用的問題紧索。

下一步,如何組織子業(yè)務(wù)完成某一具體任務(wù)菜谣?

舉例珠漂,用戶下單流程:

  1. 用戶下單后,寫入消息隊列尾膊,后直接返回客戶端媳危;
  2. 庫存子系統(tǒng):讀取消息隊列信息,完成減庫存冈敛;
  3. 配送子系統(tǒng):讀取消息隊列信息待笑,進(jìn)行配送;

這個過程抓谴,利用“消息隊列服務(wù)器”異步調(diào)度所需的服務(wù)暮蹂,協(xié)同完成業(yè)務(wù)。

3. 部署分布式服務(wù)

為了提高高并發(fā)處理能力癌压,可將請求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺服務(wù)器上仰泻。也就是說,將同樣的服務(wù)部署到N臺服務(wù)器上滩届,讓他們一起處理用戶請求集侯,這樣最大程度上減少每個服務(wù)的壓力。

可用到的負(fù)載均衡算法:

  • 輪詢:所有請求被依次發(fā)到每臺應(yīng)用服務(wù)器上帜消;
  • 加權(quán)輪詢:在輪詢基礎(chǔ)上棠枉,按照配置的權(quán)重將請求分發(fā)到每個服務(wù)器;
  • 隨機:請求被隨機分發(fā)到應(yīng)用服務(wù)器上泡挺;
  • 最少連接:記錄每個應(yīng)用服務(wù)器正在處理的連接數(shù)辈讶,將請求分發(fā)到最少連接的服務(wù)器上;
  • 源地址散列:根據(jù)請求來源的IP進(jìn)行Hash計算娄猫,對應(yīng)到某臺應(yīng)用服務(wù)器荞估,這樣,來自同一個IP的請求總會被同一臺應(yīng)用服務(wù)器處理稚新;

4. 利用緩存

緩存分為本地緩存和遠(yuǎn)程緩存。

  • 本地緩存和應(yīng)用服務(wù)共享內(nèi)存跪腹,所以褂删,它的數(shù)量不應(yīng)該太多,適合存儲讀取最頻繁且不易變動的數(shù)據(jù)冲茸。
  • 遠(yuǎn)程緩存部署在專門的服務(wù)器上屯阀,可以使一臺也可以是多臺缅帘。如是多臺集群,則稱為分布式緩存服務(wù)器难衰,優(yōu)點是存儲量大钦无,缺點是讀取比本地緩存慢。

分布式緩存服務(wù)器是將緩存數(shù)據(jù)分在N臺服務(wù)器上存儲盖袭,利用服務(wù)器數(shù)量的遞增而擴大存儲容量失暂。

為什么需要分布式緩存?

利用分布式緩存鳄虱,可以實現(xiàn)單點登錄弟塞。比如,登錄www.site1.a.com之后拙已,希望再訪問www.site2.a.com决记,www.site3.a.com時,無需再次登錄倍踪。這時系宫,就不應(yīng)該將與登錄相關(guān)的session信息存放在本地服務(wù)器緩存中(因為各個服務(wù)器的session信息不共享),而應(yīng)該將session存放于分布式緩存建车,并提供統(tǒng)一訪問模塊-session服務(wù)器扩借。session服務(wù)器用于為其他所有應(yīng)用服務(wù)提供session讀寫功能。

5. 處理數(shù)據(jù)

處理數(shù)據(jù)就必須訪問存儲數(shù)據(jù)的容器癞志,此容器不僅僅包括常見的關(guān)系數(shù)據(jù)庫往枷,比如MySQL,SQL Server凄杯,還包括非關(guān)系數(shù)據(jù)庫错洁,比如NoSQL,等等戒突。

參考圖示和“統(tǒng)一數(shù)據(jù)訪問模塊”交互的數(shù)據(jù)服務(wù)器:

  • 分布式緩存服務(wù)器:緩存服務(wù)器集群屯碴;
  • 分布式文件服務(wù)器:多臺服務(wù)器存儲文件,可線性擴充膊存;
  • 分布式數(shù)據(jù)庫服務(wù):只有單表規(guī)模非常龐大的時候才使用导而,將大量數(shù)據(jù)分庫分表存儲;并將不同業(yè)務(wù)的數(shù)據(jù)部署在不同的物理服務(wù)器上隔崎。
    另外今艺,為了進(jìn)一步減輕數(shù)據(jù)庫負(fù)載壓力,可以采用“讀寫分離”模式:配置多臺數(shù)據(jù)庫爵卒,一臺master虚缎,只用于寫數(shù)據(jù);多臺slave钓株,只用于讀數(shù)據(jù)实牡。主數(shù)據(jù)庫master的數(shù)據(jù)實時同步到slave數(shù)據(jù)庫上陌僵。
  • NoSQL服務(wù)器:非關(guān)系數(shù)據(jù)庫,如HBase创坞,單表可以存儲海量數(shù)據(jù)碗短,可線性擴充;
  • 搜索引擎服務(wù)器:也是一種非關(guān)系數(shù)據(jù)庫题涨,主要用于搜索偎谁;

如有錯漏之處,望指正携栋。

微信公眾號:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搭盾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子婉支,更是在濱河造成了極大的恐慌鸯隅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件向挖,死亡現(xiàn)場離奇詭異蝌以,居然都是意外死亡,警方通過查閱死者的電腦和手機何之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門跟畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溶推,你說我怎么就攤上這事徊件。” “怎么了蒜危?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵虱痕,是天一觀的道長。 經(jīng)常有香客問我辐赞,道長部翘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任响委,我火速辦了婚禮新思,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赘风。我一直安慰自己夹囚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布邀窃。 她就那樣靜靜地躺著崔兴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敲茄,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音山析,去河邊找鬼堰燎。 笑死,一個胖子當(dāng)著我的面吹牛笋轨,可吹牛的內(nèi)容都是我干的秆剪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼爵政,長吁一口氣:“原來是場噩夢啊……” “哼仅讽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钾挟,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洁灵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掺出,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徽千,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年汤锨,在試婚紗的時候發(fā)現(xiàn)自己被綠了双抽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡闲礼,死狀恐怖牍汹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柬泽,我是刑警寧澤慎菲,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站聂抢,受9級特大地震影響钧嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琳疏,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一有决、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧空盼,春花似錦书幕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春苟呐,著一層夾襖步出監(jiān)牢的瞬間痒芝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工牵素, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留严衬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓笆呆,卻偏偏與公主長得像请琳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赠幕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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