大型網(wǎng)站技術(shù)架構(gòu)(1)

網(wǎng)站都是從小網(wǎng)站一步一步發(fā)展為大型網(wǎng)站的,而這之中的挑戰(zhàn)主要來自于龐大的用戶泉蝌、安全環(huán)境惡劣银酬、高并發(fā)的訪問和海量的數(shù)據(jù)榄棵,任何簡單的業(yè)務(wù)處理凝颇,一旦需要處理數(shù)以 P 計的數(shù)據(jù)和面對數(shù)以億計的用戶時,問題就會變的很棘手

下面我們就來說說這個演變過程:

初始階段

大型網(wǎng)站都是由小型網(wǎng)站演變而來的疹鳄,網(wǎng)站架構(gòu)也一樣

小型網(wǎng)站最開始沒有太多人訪問拧略,只需要一臺服務(wù)器就綽綽有余,就像這樣:

小型網(wǎng)站架構(gòu)

應(yīng)用程序尚辑、數(shù)據(jù)庫辑鲤、文件等所有資源都在一臺服務(wù)器上,通常使用 Linux PHP MySQL Apache 就可以完成整個項目部署杠茬,然后再買個域名月褥,租一個廉價的服務(wù)器就可以開始我們的網(wǎng)站之旅了

應(yīng)用服務(wù)與數(shù)據(jù)服務(wù)分離

隨著業(yè)務(wù)的發(fā)展,逐漸的一臺服務(wù)器已經(jīng)不能滿足需求瓢喉,這時我們可以將 應(yīng)用與數(shù)據(jù)分離

分離之后我們使用到三臺服務(wù)器:應(yīng)用服務(wù)器宁赤、文件服務(wù)器和數(shù)據(jù)庫服務(wù)器,如下所示:

應(yīng)用服務(wù)與數(shù)據(jù)服務(wù)分離

對于這三臺服務(wù)器要求各不相同:

  • 應(yīng)用服務(wù)器 要處理大量的業(yè)務(wù)邏輯栓票,所以需要更好更快更強大的 CPU
  • 數(shù)據(jù)庫服務(wù)器 需要快速的進行磁盤檢索和數(shù)據(jù)緩存决左,因此需要更快的硬盤和更大的內(nèi)存
  • 文件服務(wù)器 需要存儲用戶上傳的文件資源,因此需要更大的硬盤存儲空間

應(yīng)用與數(shù)據(jù)分離后走贪,各個的職責(zé)變得更加專一佛猛,網(wǎng)站的性能得到進一步的提升,但隨著用戶的繼續(xù)增加坠狡,我們需要對網(wǎng)站架構(gòu)進一步優(yōu)化

使用緩存改善性能

網(wǎng)站的訪問一樣遵循二八定律:80% 的業(yè)務(wù)訪問集中在 20% 的數(shù)據(jù)上面

因此我們要對這一小部分的數(shù)據(jù)進行緩存來減輕數(shù)據(jù)庫的訪問壓力继找,以提高整個網(wǎng)站的數(shù)據(jù)訪問速度,改善數(shù)據(jù)庫的讀寫性能

網(wǎng)站的緩存可以分為兩種:緩存在應(yīng)用服務(wù)器上的本地緩存和緩存在專門的分布式緩存服務(wù)器上的遠程緩存

  • 本地緩存 的訪問速度會快一些逃沿,但是受應(yīng)用服務(wù)器內(nèi)存限制婴渡,緩存數(shù)據(jù)量很有限,而且會出現(xiàn)內(nèi)存爭用的情況
  • 遠程分布式緩存 可以使用集群的方式凯亮,部署大內(nèi)存的服務(wù)器作為專門的緩存服務(wù)器边臼,可以在理論上做到不受內(nèi)存容量限制的緩存服務(wù)

如下所示:

使用緩存后的

使用緩存后,數(shù)據(jù)訪問壓力得到了有效的緩解假消,但單一的應(yīng)用服務(wù)器能夠處理的請求連接數(shù)有限柠并,在訪問的高峰期,應(yīng)用服務(wù)器又會成為網(wǎng)站性能的瓶頸

使用應(yīng)用服務(wù)器集群改善網(wǎng)站并發(fā)處理能力

使用集群是網(wǎng)站解決高并發(fā),海量數(shù)據(jù)問題的常用手段臼予,當(dāng)你縱向提升到一定程度后亿傅,那就該開始橫向提升了

當(dāng)一臺服務(wù)器的處理能力不足時,與其換一臺更強大的服務(wù)器瘟栖,不如增加一臺服務(wù)器去分擔(dān)原有的服務(wù)器壓力。對于大型網(wǎng)站而言谅阿,無論多么強大的服務(wù)器半哟,都滿足不了持續(xù)增長的業(yè)務(wù)需求,更高效的方式就是增加服務(wù)器來分擔(dān)壓力

對于網(wǎng)站架構(gòu)而言签餐,如果增添一臺新的服務(wù)器可以改善負載壓力寓涨,那么就可以使用同樣的方式來應(yīng)對源源不斷的業(yè)務(wù)需求,從而實現(xiàn)系統(tǒng)的可伸縮性

應(yīng)用服務(wù)器集群

通過負載均衡調(diào)度服務(wù)器氯檐,可以將用戶請求分發(fā)到應(yīng)用服務(wù)器集群里的任何一臺服務(wù)器上戒良,如果有更多的用戶,可以增加更多的應(yīng)用服務(wù)器冠摄,使應(yīng)用服務(wù)器的負載壓力不再成為網(wǎng)站的性能問題

數(shù)據(jù)庫讀寫分離

在使用了緩存后糯崎,大多數(shù)的操作不經(jīng)過數(shù)據(jù)庫訪問就能完成,但仍有一部分讀操作(緩存訪問未命中河泳,緩存過期)和所有的寫操作需要訪問數(shù)據(jù)庫沃呢,在網(wǎng)站的用戶量達到一定時,數(shù)據(jù)庫的負載問題就來了

目前大多數(shù)的數(shù)據(jù)庫都支持主從熱備份拆挥,通過配置兩臺服務(wù)器的主從關(guān)系薄霜,可以將一臺數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)更新同步到另一臺,網(wǎng)站利用這一功能纸兔,實現(xiàn)數(shù)據(jù)庫讀寫分離惰瓜,從而進一步改善數(shù)據(jù)庫負載壓力

數(shù)據(jù)庫讀寫分離

應(yīng)用服務(wù)器在寫操作的時候,訪問主數(shù)據(jù)庫汉矿,主數(shù)據(jù)庫通過主從復(fù)制機制把數(shù)據(jù)同步更新到從數(shù)據(jù)庫崎坊,這樣當(dāng)應(yīng)用服務(wù)器進行讀操作的時候,就能訪問從數(shù)據(jù)庫獲取數(shù)據(jù)

使用反向代理和 CDN 加速網(wǎng)站響應(yīng)

CDN反向代理 的基本原理都是緩存

  • CDN 部署在網(wǎng)絡(luò)供應(yīng)商的機房负甸,用戶在進行請求時流强,會從距離最近的網(wǎng)絡(luò)供應(yīng)商機房獲取數(shù)據(jù)
  • 反向代理 則部署在中心機房,當(dāng)用戶請求到達中心機房后呻待,會首先訪問反向代理服務(wù)器打月,如果反向代理服務(wù)器中緩存這用戶請求的資源,就直接返回給用戶
CDN 和 反向代理

使用 CDN反向代理 都是為了盡快返回給用戶數(shù)據(jù)蚕捉,一方面加快用戶訪問速度奏篙,另一方面也減輕了后端服務(wù)器的壓力

使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)

隨著網(wǎng)站業(yè)務(wù)的繼續(xù)發(fā)展,這時候就可以像分布式應(yīng)用服務(wù)器一樣,對數(shù)據(jù)庫系統(tǒng)和文件系統(tǒng)進行分布式管理

分布式數(shù)據(jù)庫 是網(wǎng)站數(shù)據(jù)庫拆分的最后手段秘通,一般我們可以采取業(yè)務(wù)分庫为严,根據(jù)不同業(yè)務(wù)的數(shù)據(jù)庫部署在不同的數(shù)據(jù)庫服務(wù)器上

文件系統(tǒng)和數(shù)據(jù)庫系統(tǒng)分布式管理

使用 NoSQL 和搜索引擎

這兩個方式都是依賴于互聯(lián)網(wǎng)的技術(shù)手段,應(yīng)用服務(wù)器通過一個統(tǒng)一的數(shù)據(jù)訪問模塊來訪問各種數(shù)據(jù)肺稀,從而減輕應(yīng)用程序有多個數(shù)據(jù)源的麻煩

使用搜索引擎和nosql

業(yè)務(wù)拆分

對于大型網(wǎng)站第股,我們可以分而治之,把整個網(wǎng)站的業(yè)務(wù)分為不同的模塊话原,比如大型的交易購物完整可以分為首頁夕吻、店鋪、訂單繁仁、買家等涉馅,分別交給不同的業(yè)務(wù)團隊來負責(zé)

同時我們將一個網(wǎng)站根據(jù)模塊劃分拆分成多個應(yīng)用,每個應(yīng)用進行單獨的部署和維護黄虱,應(yīng)用之間通過超鏈接建立關(guān)系(指向不同的應(yīng)用地址)稚矿,最后通過相同的數(shù)據(jù)存儲系統(tǒng)來構(gòu)成一個互相關(guān)聯(lián)的完整系統(tǒng)

業(yè)務(wù)拆分

分布式服務(wù)

隨著業(yè)務(wù)拆分,整個系統(tǒng)越來越大捻浦,應(yīng)用的整體復(fù)雜度呈指數(shù)級增加晤揣,部署維護越來越困難,并且所有的應(yīng)用服務(wù)器都要與數(shù)據(jù)庫服務(wù)連接朱灿, 在數(shù)萬臺服務(wù)器規(guī)模的情況下碉渡,這些連接的數(shù)目是服務(wù)器規(guī)模的平方,導(dǎo)致資源不足

這時候就要對相同的業(yè)務(wù)進行提取母剥,獨立部署滞诺,把這些可重用的業(yè)務(wù)和連接數(shù)據(jù)庫等,提取出來作為公共業(yè)務(wù)服務(wù)环疼,而應(yīng)用系統(tǒng)只需要通過分布式服務(wù)訪問公共業(yè)務(wù)服務(wù)完成業(yè)務(wù)操作

分布式

到這里习霹,基本上大多數(shù)的技術(shù)問題都能得到解決,還有一些實時同步等具體業(yè)務(wù)問題也都可以通過現(xiàn)有的技術(shù)解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炫隶,一起剝皮案震驚了整個濱河市淋叶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伪阶,老刑警劉巖煞檩,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昏兆,死亡現(xiàn)場離奇詭異雌续,居然都是意外死亡,警方通過查閱死者的電腦和手機辑甜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門凝赛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捆昏,你說我怎么就攤上這事”姓矗” “怎么了骗卜?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵左胞,是天一觀的道長。 經(jīng)常有香客問我罩句,道長,這世上最難降的妖魔是什么敛摘? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任门烂,我火速辦了婚禮,結(jié)果婚禮上屯远,老公的妹妹穿的比我還像新娘捕虽。我一直安慰自己慨丐,他們只是感情好泄私,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布晌端。 她就那樣靜靜地躺著捅暴,像睡著了一般咧纠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梧奢,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天演痒,我揣著相機與錄音,去河邊找鬼鸟顺。 笑死,一個胖子當(dāng)著我的面吹牛养筒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晕粪,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼巫湘,長吁一口氣:“原來是場噩夢啊……” “哼装悲!你這毒婦竟也來了尚氛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤阅嘶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抡蛙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂迄,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年熊昌,在試婚紗的時候發(fā)現(xiàn)自己被綠了湿酸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡选泻,死狀恐怖美莫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厢呵,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布碌奉,位于F島的核電站,受9級特大地震影響嫉拐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婉徘,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一咐汞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧几晤,春花似錦植阴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至魁衙,卻和暖如春株搔,著一層夾襖步出監(jiān)牢的瞬間剖淀,已是汗流浹背纤房。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工炮姨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舒岸。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像俄认,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子眯杏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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