大型網(wǎng)站的性能需求
高性能埂奈、高可用迄损、易擴(kuò)展、可伸縮账磺、安全性
大型網(wǎng)站的特點
-
高并發(fā)芹敌、大流量:大型網(wǎng)站面對的訪問量比較大很容易理解痊远,那么何為高并發(fā)呢?
并發(fā):在操作系統(tǒng)中是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間氏捞,且這幾個程序都是在同一個處理機(jī)上運行碧聪,但任一個時刻點上只有一個程序在處理機(jī)上運行。而到我們的大型網(wǎng)站(Web應(yīng)用)中液茎,是指在同一時刻同時有多個用戶向服務(wù)器發(fā)送請求逞姿。當(dāng)一個用戶向網(wǎng)站的服務(wù)器發(fā)送請求的時候,經(jīng)過后臺的運算將用戶想要的到的結(jié)果返回個用戶捆等,那么如果在后臺運算結(jié)束之前又有新的用戶向服務(wù)器發(fā)送了請求滞造,我們在后臺的程序中應(yīng)該做什么樣的處理呢。
高可用性:系統(tǒng)需要支持7×24小時都處在運行的狀態(tài)楚里,我們每周可以過周末断部,但是并不代表著周末沒有人訪問網(wǎng)站,因此網(wǎng)站需要支持7×24小時的服務(wù)班缎。
用戶分布廣泛蝴光,網(wǎng)路情況復(fù)雜:例如現(xiàn)在人們購物需要用到的淘寶商城、京東商城以及我們經(jīng)常用到的百度搜索引擎达址,用戶分布在不同的地方蔑祟;同時不同的用戶在訪問這些Web應(yīng)用時的網(wǎng)絡(luò)狀態(tài)也是不同的,有的人所處的環(huán)境網(wǎng)速比較快沉唠,有的人網(wǎng)速比較慢疆虚。
安全環(huán)境惡劣:由于互聯(lián)網(wǎng)的開放性,在全世界都可以訪問到满葛,因此面臨的環(huán)境非常惡劣径簿,很容易受到攻擊。
需求變更快嘀韧,發(fā)布(服務(wù)器的更新)比較頻繁:互聯(lián)網(wǎng)產(chǎn)品為了滿足人們?nèi)找嬖黾拥男枨笃ぃ碌乃俣确浅?臁?/p>
漸變式發(fā)展:任何一個大的網(wǎng)站都是由小的網(wǎng)站發(fā)展起來锄贷,在發(fā)展的過程當(dāng)中功能逐漸完善译蒂,同時給用戶的體驗也逐漸改善。
需要有很好的適配性:現(xiàn)在可以聯(lián)網(wǎng)的不僅僅是電腦谊却,智能手機(jī)普遍使用的今天可以通過不同的設(shè)備來訪問同一個網(wǎng)站柔昼,例如手機(jī)、pad以及pc機(jī)炎辨。那么此時網(wǎng)站就要做到很好的適配性捕透,既可以在手機(jī)端展示好界面又可以在pc端展示好界面。
大型網(wǎng)站的演化路徑
明確了大型網(wǎng)站需要滿足的需求以及大型網(wǎng)站的特點,那么在構(gòu)建大型網(wǎng)站的時候就需要有一個漸變的過程激率,在這個漸變的過程中使網(wǎng)站的功能逐漸強(qiáng)大咳燕,同時其性能也逐步提高。
- 初始階段:初始階段乒躺,網(wǎng)站的用戶訪問量可能比較少招盲,那么此時只需要一臺服務(wù)器即可。
Web應(yīng)用的組成簡介
Web應(yīng)用一般有三部分組成:1嘉冒、應(yīng)用程序 2曹货、數(shù)據(jù)庫 3、文件
Web應(yīng)用最核心的兩個部分是應(yīng)用程序和數(shù)據(jù)庫讳推,我們訪問網(wǎng)站就是訪問的一個應(yīng)用程序
數(shù)據(jù)庫主要是用來存放應(yīng)用程序在運行的過程當(dāng)中需要用到的數(shù)據(jù)顶籽,例如我們登錄淘寶網(wǎng)站
時的個人信息(用戶名、密碼银觅、收獲地址等信息)礼饱。而文件,是應(yīng)用程序在運行過程當(dāng)中需要
讀取的文件究驴,例如淘寶網(wǎng)站各個商品的圖片資源镊绪,都是以文件的形式存放。
Web應(yīng)用的初期洒忧,數(shù)據(jù)量比較小蝴韭,同時所用到的文件也比較少,此時我們可以把三者放在同一個服務(wù)器上面熙侍。
Web服務(wù)器
Web服務(wù)器也稱www服務(wù)器榄鉴,主要的功能是提供網(wǎng)上信息瀏覽服務(wù),web服務(wù)器是可以向請求的瀏覽器發(fā)送文檔的程序蛉抓。Web服務(wù)器有以下幾個特點:
- 服務(wù)器是一種被動程序:只有當(dāng)Internet上的其他計算機(jī)的瀏覽器向服務(wù)器發(fā)送請求的時候庆尘,服務(wù)器才會響應(yīng)。
- 最常用的服務(wù)器是Apache和Microsoft的Internet信息服務(wù)器巷送。
- Internet服務(wù)器是一臺在Internet上具有獨立Ip的計算機(jī)减余。
- Web服務(wù)器是指駐留于因特網(wǎng)上某種類型計算機(jī)的程序。
2.應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)相分離
隨著網(wǎng)站業(yè)務(wù)的發(fā)展惩系,訪問的用戶量越來越多,網(wǎng)站的數(shù)據(jù)也隨之增多如筛,此時如果數(shù)據(jù)庫的存儲空間不足堡牡,可能會導(dǎo)致用戶訪問網(wǎng)站的響應(yīng)速度變慢。一臺服務(wù)器已經(jīng)不能滿足需求杨刨,這是就應(yīng)該考慮將應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器以及文件服務(wù)器分離晤柄。根據(jù)各個服務(wù)器擔(dān)任的角色不同來選定各個服務(wù)器的配置:
應(yīng)用服務(wù)器需要強(qiáng)的CPU,數(shù)據(jù)服務(wù)器需要快速磁盤檢索和數(shù)據(jù)緩存妖胀,因此需要更快的硬盤和更大的內(nèi)存芥颈,文件服務(wù)器主要用來存放應(yīng)用中使用到的文件惠勒,需要更大的磁盤空間。
將應(yīng)用服務(wù)器爬坑、文件服務(wù)器和數(shù)據(jù)庫服務(wù)器分離之后整個應(yīng)用的部署情況如下圖所示:
當(dāng)應(yīng)用和數(shù)據(jù)進(jìn)行分離之后纠屋,不同特性的服務(wù)器擔(dān)任著不同的角色,整個網(wǎng)站的性能得到提升盾计。
3.使用緩存改善網(wǎng)站性能
網(wǎng)站數(shù)據(jù)的訪問并不是平均分配售担,只有一小部分的數(shù)據(jù)會經(jīng)常被訪問到。當(dāng)用戶訪問Web應(yīng)用時署辉,Web應(yīng)用先從數(shù)據(jù)庫中查詢數(shù)據(jù)后經(jīng)過應(yīng)用程序的處理再返回給用戶族铆,如果有一部經(jīng)常被訪問到,那么可以就這一部分是數(shù)據(jù)而言提高這部分?jǐn)?shù)據(jù)的訪問速度哭尝,解決方案是將這部分?jǐn)?shù)據(jù)緩存到內(nèi)存中哥攘。當(dāng)用戶訪問Web應(yīng)用時,先從緩存中進(jìn)行查詢材鹦,如果緩存中有對應(yīng)的數(shù)據(jù)逝淹,則直接返回,如果沒有對應(yīng)的數(shù)據(jù)再去數(shù)據(jù)庫查詢侠姑,提高數(shù)據(jù)查詢的效率创橄。
緩存分為兩種:
1>緩存在本地 2>用專門的服務(wù)器緩存數(shù)據(jù)
如果將數(shù)據(jù)緩存在本地,那么緩存的數(shù)據(jù)量比較大的時候莽红,緩存會和應(yīng)用程序爭用內(nèi)存妥畏,這時有可能導(dǎo)致應(yīng)用程序運行的緩慢甚至應(yīng)用服務(wù)器直接掛掉。
使用專門的服務(wù)器作為緩存安吁,可以使用集群的方式來部署醉蚁。
添加緩存服務(wù)器之后的應(yīng)用程序分布如下圖所示:
4.使用應(yīng)用服務(wù)器集群改善網(wǎng)站的并發(fā)處理能力
當(dāng)數(shù)據(jù)庫、應(yīng)用和文件服務(wù)器分離以及增加上緩存服務(wù)器之后鬼店,數(shù)據(jù)的存儲和訪問在目前這個階段已經(jīng)不是制約整個應(yīng)用的瓶頸网棍。但是當(dāng)有大量的用戶同時訪問應(yīng)用的時候,應(yīng)用服務(wù)器就顯得力不從心妇智,這種情況下更恰當(dāng)?shù)淖龇ㄊ菍?yīng)用進(jìn)行分布式部署滥玷,而不是將現(xiàn)有的應(yīng)用服務(wù)器換成配置更高的服務(wù)器。增加應(yīng)用服務(wù)器和提現(xiàn)有應(yīng)用服務(wù)器的配置對應(yīng)用的改善作用是不相同的巍棱。
如果將應(yīng)用部署在不同的服務(wù)器上惑畴,那么現(xiàn)在面臨的一個問題就是怎么分配這幾臺服務(wù)器的流量,以及當(dāng)用戶訪問應(yīng)用的時候怎么將用戶的訪問分配到分布式服務(wù)器的其中一臺服務(wù)器上航徙。此時如贷,負(fù)載均衡服務(wù)器就派上了用場,負(fù)載均衡服務(wù)器的作用就是將來自用戶瀏覽器的訪問分發(fā)到應(yīng)用服務(wù)器集群中的其中任意一臺。添加負(fù)載均衡服務(wù)器杠袱、將應(yīng)用分布在不同的服務(wù)器尚猿、應(yīng)用和數(shù)據(jù)訪問相分離、添加緩存之后整個網(wǎng)站的部署如下:
5.數(shù)據(jù)庫讀寫分離
網(wǎng)站使用緩存后楣富,數(shù)據(jù)訪問的速度有效提升凿掂,但是仍有一部分讀操作和全部的寫操作在緩存中不能完成,當(dāng)用戶達(dá)到一定的規(guī)模之后菩彬,數(shù)據(jù)庫會因為負(fù)載過大成為制約整個網(wǎng)站的瓶頸缠劝。目前絕大多數(shù)數(shù)據(jù)庫都支持主從熱備份功能(在數(shù)據(jù)庫服務(wù)不停的情況下,將主數(shù)據(jù)庫的數(shù)據(jù)備份到從數(shù)據(jù)庫)骗灶,利用數(shù)據(jù)庫的這一特性惨恭,可以將數(shù)據(jù)庫的讀寫進(jìn)行分離。及將一應(yīng)用的數(shù)據(jù)庫分為兩個數(shù)據(jù)庫耙旦,一個是主數(shù)據(jù)庫脱羡,用來寫操作;一個是從數(shù)據(jù)庫免都,用來讀操作锉罐。當(dāng)用戶將數(shù)據(jù)寫入主數(shù)據(jù)庫后,主數(shù)據(jù)庫將數(shù)據(jù)備份到從數(shù)據(jù)庫绕娘,從而實現(xiàn)兩個數(shù)據(jù)庫的數(shù)據(jù)一致性脓规。
添加主從數(shù)據(jù)庫之后網(wǎng)站的結(jié)構(gòu)如下:
6.使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng)
任何強(qiáng)大的單一服務(wù)器都滿足不了大型網(wǎng)站持續(xù)增長的業(yè)務(wù)需求,數(shù)據(jù)庫經(jīng)過讀寫分離后拆分成兩臺服務(wù)器险领,但是隨著網(wǎng)站業(yè)務(wù)的發(fā)展并不能滿足網(wǎng)站的需求侨舆,這是可以將數(shù)據(jù)庫部署為分布式數(shù)據(jù)庫。分布式數(shù)據(jù)庫是數(shù)據(jù)庫拆分的最后階段绢陌,只有當(dāng)單表的數(shù)據(jù)量特別大時才使用這種方式挨下。數(shù)據(jù)庫的分布式部署并不是沒有依據(jù),而是根據(jù)網(wǎng)站的業(yè)務(wù)模塊進(jìn)行拆分脐湾,將一個模塊的數(shù)據(jù)存放到某個數(shù)據(jù)庫中臭笆,這樣訪問不同模塊時,應(yīng)用可以訪問不同的數(shù)據(jù)庫秤掌。
使用分布式文件和分布式數(shù)據(jù)庫之后的系統(tǒng)結(jié)構(gòu):
7.使用NoSQL和搜索引擎
現(xiàn)在使用的數(shù)據(jù)庫都是關(guān)系型數(shù)據(jù)庫愁铺,關(guān)系型數(shù)據(jù)庫每條記錄和程序都有對應(yīng)關(guān)系,關(guān)系型數(shù)據(jù)庫存儲的時候?qū)⒔M成字段相同的一條記錄存放在同一個表中闻鉴。隨著數(shù)據(jù)庫的發(fā)展茵乱,出現(xiàn)了非關(guān)系型數(shù)據(jù)庫,NoSQL(Not Only SQL)椒拗,非關(guān)系型數(shù)據(jù)庫采用鍵值對的形式存放數(shù)據(jù),少了關(guān)系型數(shù)據(jù)庫的約束,查詢起來比較方便和快速蚀苛。同時有更快的查詢技術(shù)搜索引擎在验。
如果系統(tǒng)的數(shù)據(jù)非常多,單表中的數(shù)據(jù)非常多堵未,此時查詢數(shù)據(jù)如果查詢?nèi)砭蜁浅B干唷榱颂岣卟樵兊男士梢栽趹?yīng)用中引入非關(guān)系型數(shù)據(jù)庫和搜索引擎。引入非關(guān)系型數(shù)據(jù)庫和搜索引擎之后的應(yīng)用結(jié)構(gòu)如下:
8.業(yè)務(wù)拆分
當(dāng)網(wǎng)站的業(yè)務(wù)邏輯比較多的時候渗蟹,如果將不同的業(yè)務(wù)模塊都放在一個應(yīng)用中块饺,此時應(yīng)用的負(fù)載比較大,如果將不同的業(yè)務(wù)部署在不同的服務(wù)器上雌芽,當(dāng)用戶訪問網(wǎng)站頁面中不同的模塊時授艰,頁面將請求分發(fā)到不同的應(yīng)用上,這樣可以減小單個應(yīng)用的壓力世落,提高網(wǎng)站的響應(yīng)速度淮腾。應(yīng)用和應(yīng)用之間通過一個超鏈接建立關(guān)系,也可以通過消息隊列進(jìn)行數(shù)據(jù)分發(fā)來構(gòu)成一個完整的應(yīng)用系統(tǒng)屉佳。
將整個應(yīng)用進(jìn)行業(yè)務(wù)拆分并將不同的業(yè)務(wù)部署到不同的服務(wù)器上之后谷朝,構(gòu)成了以下的網(wǎng)站結(jié)構(gòu):
讀后感:
通過第一篇章,了解了大型網(wǎng)站由小變大的一個過程武花,從原理方面了解了大型項目的整體架構(gòu)圆凰,以及在每個不同的階段制約整個應(yīng)用的瓶頸。同時也可以當(dāng)作自己一個進(jìn)階的路徑体箕,現(xiàn)在的大型項目不一定都是采用這種架構(gòu)专钉,但是原理相通。在這些環(huán)節(jié)中干旁,哪個堤防薄弱可以在哪些地方多下功夫驶沼,畢竟,互聯(lián)網(wǎng)應(yīng)用以后都朝著這個方向發(fā)展争群!