**一吩屹、大型互聯(lián)網(wǎng)應(yīng)用系統(tǒng)特點(diǎn):
- 高并發(fā)斋竞,大流量
- 高可用
- 海量數(shù)據(jù)
- 用戶發(fā)布廣泛钻蔑,網(wǎng)絡(luò)情況復(fù)雜
- 安全環(huán)境惡劣
- 需求快速變更啥刻,發(fā)布頻繁
- 漸進(jìn)式發(fā)展
二、大型網(wǎng)站架構(gòu)演化發(fā)展歷程
1.初始階段網(wǎng)站架構(gòu)
例如咪笑,單臺(tái)的lamp架構(gòu)服務(wù)器可帽。
2.應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)分離
隨著業(yè)務(wù)發(fā)展,單臺(tái)服務(wù)器不能滿足需求窗怒,這時(shí)將應(yīng)用和數(shù)據(jù)分離映跟,整個(gè)網(wǎng)站使用三臺(tái)服務(wù)器:應(yīng)用服務(wù)器、文件服務(wù)器扬虚、數(shù)據(jù)庫(kù)服務(wù)器努隙。
三臺(tái)服務(wù)器對(duì)硬件資源的要求各不同,應(yīng)用服務(wù)器需要處理大量業(yè)務(wù)邏輯孔轴,因此需要更快更強(qiáng)大的CPU剃法;數(shù)據(jù)庫(kù)服務(wù)器需要快速檢索和數(shù)據(jù)緩存,因此需要更快的硬盤(pán)和更大的內(nèi)存;文件服務(wù)器需要存儲(chǔ)大量文件贷洲,因此需要更大的硬盤(pán)收厨。
隨著用戶逐漸增多,數(shù)據(jù)庫(kù)壓力太大導(dǎo)致訪問(wèn)延遲优构,進(jìn)而影響整個(gè)網(wǎng)站的性能诵叁。這時(shí),需要對(duì)網(wǎng)站架構(gòu)進(jìn)一步優(yōu)化钦椭。
3.使用緩存改善網(wǎng)站性能
二八定律:80%的業(yè)務(wù)訪問(wèn)集中在20%的數(shù)據(jù)上拧额。
因此,如果把這一小部分?jǐn)?shù)據(jù)緩存在內(nèi)存彪腔,是不是就可以減少數(shù)據(jù)庫(kù)的訪問(wèn)壓力侥锦,提供整個(gè)網(wǎng)站的數(shù)據(jù)訪問(wèn)速度,改善數(shù)據(jù)庫(kù)寫(xiě)入性能德挣?
網(wǎng)站使用的緩存分為兩種:緩存在應(yīng)用服務(wù)器上的本地緩存和緩存在專門(mén)的分布式緩存服務(wù)器上的遠(yuǎn)程緩存恭垦。
本地緩存訪問(wèn)速度更快,但是受應(yīng)用服務(wù)器內(nèi)存限制格嗅,緩存數(shù)量有限番挺。遠(yuǎn)程分布式緩存可以使用集群方式,部署大內(nèi)存的服務(wù)器作為專門(mén)的緩存服務(wù)器屯掖,理論上可以做到不受內(nèi)存容量限制玄柏。
使用緩存后,數(shù)據(jù)訪問(wèn)壓力得到緩解贴铜,但單一應(yīng)用服務(wù)器能夠處理的連接請(qǐng)求有限粪摘,在訪問(wèn)高峰期,應(yīng)用服務(wù)器成為整個(gè)網(wǎng)站瓶頸阀湿。
4.使用應(yīng)用服務(wù)器集群改善網(wǎng)站的并發(fā)處理能力
使用集群是網(wǎng)站解決高并發(fā)赶熟、海量數(shù)據(jù)問(wèn)題的常用手段。
對(duì)網(wǎng)站架構(gòu)而言陷嘴,只要能通過(guò)增加一臺(tái)服務(wù)器的方式改善負(fù)載壓力,就可以以同樣方式持續(xù)增加服務(wù)器不斷改善系統(tǒng)性能间坐,從而實(shí)現(xiàn)系統(tǒng)可伸縮性灾挨。
通過(guò)負(fù)載均衡調(diào)度服務(wù)器,可將訪問(wèn)請(qǐng)求分發(fā)到應(yīng)用服務(wù)器集群的任一服務(wù)器竹宋。這樣使得應(yīng)用服務(wù)器不再成為網(wǎng)站的瓶頸劳澄。
5.數(shù)據(jù)庫(kù)讀寫(xiě)分離
使用緩存后,絕大部分?jǐn)?shù)據(jù)讀操作可以不通過(guò)數(shù)據(jù)庫(kù)完成蜈七,但有一部分讀操作(緩存訪問(wèn)不命中秒拔、緩存過(guò)期)和全部的寫(xiě)操作需要訪問(wèn)數(shù)據(jù)庫(kù),當(dāng)用戶達(dá)到一定規(guī)模時(shí)飒硅,數(shù)據(jù)庫(kù)因?yàn)閴毫^(guò)高而成為瓶頸砂缩。
目前大部分主流數(shù)據(jù)庫(kù)都提供主從熱備份功能作谚,利用熱備份功能將主數(shù)據(jù)庫(kù)數(shù)據(jù)同步到從數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離,從而改善數(shù)據(jù)庫(kù)負(fù)載壓力庵芭。
為了便于程序訪問(wèn)讀寫(xiě)分離后的數(shù)據(jù)庫(kù)妹懒,通常在應(yīng)用服務(wù)器端使用專門(mén)數(shù)據(jù)訪問(wèn)模塊,使數(shù)據(jù)庫(kù)讀寫(xiě)分離對(duì)應(yīng)用透明双吆。
6.使用反向代理和CDN加速網(wǎng)站響應(yīng)
加速網(wǎng)站訪問(wèn)速度眨唬,主要手段有:使用CDN和反向代理。
使用CDN和反向代理目的是今早返回?cái)?shù)據(jù)給用戶好乐,一方面加速用戶訪問(wèn)速度匾竿,另一方面減輕后端服務(wù)器負(fù)載壓力。
7.使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)系統(tǒng)
隨著業(yè)務(wù)發(fā)展蔚万,數(shù)據(jù)庫(kù)讀寫(xiě)分離后仍然不能滿足需求岭妖。這時(shí)需要使用分布式數(shù)據(jù)庫(kù)。文件系統(tǒng)也是一樣笛坦。
分布式數(shù)據(jù)庫(kù)是網(wǎng)站數(shù)據(jù)庫(kù)拆分最后手段区转,只有在單表數(shù)據(jù)規(guī)模非常龐大時(shí)才使用。更常用的數(shù)據(jù)庫(kù)拆分手段是業(yè)務(wù)分庫(kù)版扩,將不同業(yè)務(wù)數(shù)據(jù)部署到不同服務(wù)器上废离。
8.使用NoSQL和搜索引擎
隨著業(yè)務(wù)越來(lái)越復(fù)雜,對(duì)數(shù)據(jù)存儲(chǔ)和檢索需求也越來(lái)越復(fù)雜礁芦,需要采用一些非關(guān)系數(shù)據(jù)庫(kù)技術(shù)如NoSQL和非數(shù)據(jù)庫(kù)查詢技術(shù)如搜索引擎蜻韭。
9.業(yè)務(wù)拆分
大型網(wǎng)站為了應(yīng)對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景,將整個(gè)網(wǎng)站業(yè)務(wù)分為不同產(chǎn)品線柿扣,分歸不同團(tuán)隊(duì)負(fù)責(zé)肖方。
具體到技術(shù)上,根據(jù)產(chǎn)品線劃分未状,將一個(gè)網(wǎng)站拆分為多個(gè)不同應(yīng)用俯画,每個(gè)獨(dú)立部署維護(hù)。應(yīng)用間通過(guò)超鏈接建立關(guān)系司草,也可以通過(guò)消息隊(duì)列進(jìn)行數(shù)據(jù)分發(fā)艰垂,最多的是通過(guò)分為同一數(shù)據(jù)存儲(chǔ)系統(tǒng)來(lái)構(gòu)成一個(gè)關(guān)聯(lián)的完整系統(tǒng)。
10.分布式服務(wù)
隨著業(yè)務(wù)拆分越來(lái)越小埋虹,存儲(chǔ)系統(tǒng)越來(lái)越大猜憎,系統(tǒng)整體復(fù)雜度指數(shù)增加,部署維護(hù)越來(lái)越困難搔课。
由于所有應(yīng)用要和所有數(shù)據(jù)庫(kù)系統(tǒng)連接胰柑,在數(shù)萬(wàn)臺(tái)服務(wù)器規(guī)模中,連接的數(shù)目是服務(wù)器規(guī)模的平方,導(dǎo)致存數(shù)據(jù)庫(kù)資源不足柬讨,拒絕服務(wù)崩瓤。
既然每個(gè)應(yīng)用系統(tǒng)都需要執(zhí)行許多相同業(yè)務(wù)操作,如用戶管理姐浮、商品管理等谷遂,那么可以將這些公共的業(yè)務(wù)提取出來(lái),獨(dú)立部署卖鲤。由這些可復(fù)用的業(yè)務(wù)連接數(shù)據(jù)庫(kù)肾扰,提供共用服務(wù),而應(yīng)用系統(tǒng)只需要管理用戶界面蛋逾,通過(guò)分布式服務(wù)調(diào)用共用服務(wù)完成具體操作集晚。
發(fā)展到這一階段,多數(shù)技術(shù)問(wèn)題都得到解決区匣。所以偷拔,開(kāi)始建設(shè)云計(jì)算平臺(tái),將計(jì)算作為基礎(chǔ)資源出售亏钩。
三莲绰、大型網(wǎng)站架構(gòu)演化價(jià)值觀
網(wǎng)站的價(jià)值在于能為用戶提供什么價(jià)值,在于能做什么姑丑,而不在于它是怎么做的蛤签,所以在網(wǎng)站還很小時(shí)去追求架構(gòu)是舍本逐末。
1.大型網(wǎng)站架構(gòu)技術(shù)的核心價(jià)值是隨網(wǎng)站所需靈活應(yīng)對(duì)
2.驅(qū)動(dòng)大型網(wǎng)站技術(shù)發(fā)展的主要力量是網(wǎng)站的業(yè)務(wù)發(fā)展
四栅哀、網(wǎng)站架構(gòu)設(shè)計(jì)誤區(qū)
1.一味追隨大公司解決方案
2.為了技術(shù)而技術(shù)
3.企圖用技術(shù)解決所有問(wèn)題
技術(shù)是用來(lái)解決業(yè)務(wù)問(wèn)題震肮,而業(yè)務(wù)問(wèn)題,也可以提供業(yè)務(wù)的手段解決留拾。