大型網(wǎng)站架構(gòu)方案分析與總結(jié)_第1頁
大型網(wǎng)站架構(gòu)方案分析與總結(jié)_第2頁
大型網(wǎng)站架構(gòu)方案分析與總結(jié)_第3頁
大型網(wǎng)站架構(gòu)方案分析與總結(jié)_第4頁
大型網(wǎng)站架構(gòu)方案分析與總結(jié)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、大型網(wǎng)站架構(gòu)不得不考慮的10個問題大型網(wǎng)站架構(gòu)只包括高互動性高交互性的數(shù)據(jù)型大型網(wǎng)站,基于大家眾所周知的原因,我們就不談新聞類和一些依靠HTML靜態(tài)化就可以實現(xiàn)的架構(gòu)了,我們以高負(fù)載高數(shù)據(jù)交換高數(shù)據(jù)流動性的網(wǎng)站為例,比如海內(nèi),開心網(wǎng)等類似的web2.0系列架構(gòu)。我們這里不討論是PHP還是JSP或者.NET環(huán)境,我們從架構(gòu)的方面去看問題,實現(xiàn)語言方面并不是問題,語言的優(yōu)勢在于實現(xiàn)而不是好壞,不論你選擇任何語言,架構(gòu)都是必須要面對的。 這里討論一一下大型網(wǎng)站站需要注意和和考慮的問題題。1、海量數(shù)數(shù)據(jù)的處理眾所周知,對對于一些相對對小的站點(diǎn)來來說,數(shù)據(jù)量量并不是很大大,seleect和uppdate

2、就就可以解決我我們面對的問問題,本身負(fù)負(fù)載量不是很很大,最多再再加幾個索引引就可以搞定定。對于大型型網(wǎng)站,每天天的數(shù)據(jù)量可可能就上百萬萬,如果一個個設(shè)計不好的的多對多關(guān)系系,在前期是是沒有任何問問題的,但是是隨著用戶的的增長,數(shù)據(jù)據(jù)量會是幾何何級的增長的的。在這個時時候我們對于于一個表的sselectt和updaate的時候候(還不說多多表聯(lián)合查詢詢)的成本的的非常高的。2、數(shù)據(jù)并并發(fā)的處理在一些時候候,2.0的的CTO都有有個尚方寶劍劍,就是緩存存。對于緩存存,在高并發(fā)發(fā)高處理的時時候也是個大大問題。在整整個應(yīng)用程序序下,緩存是是全局共享的的,然而在我我們進(jìn)行修改改的時候就,如如果兩個或者者

3、多個請求同同時對緩存有有更新的要求求的情況下,應(yīng)應(yīng)用程序會直直接的死掉。這這個時候,就就需要一個好好的數(shù)據(jù)并發(fā)發(fā)處理策略以以及緩存策略略。另外,就是是數(shù)據(jù)庫的死死鎖問題,也也許平時我們們感覺不到,死死鎖在高并發(fā)發(fā)的情況下的的出現(xiàn)的概率率是非常高的的,磁盤緩存存就是一個大大問題。3、文件存存貯的問題對于一些支支持文件上傳傳的2.0的的站點(diǎn),在慶慶幸硬盤容量量越來越大的的時候我們更更多的應(yīng)該考考慮的是文件件應(yīng)該如何被被存儲并且被被有效的索引引。常見的方方案是對文件件按照日期和和類型進(jìn)行存存貯。但是當(dāng)當(dāng)文件量是海海量的數(shù)據(jù)的的情況下,如如果一塊硬盤盤存貯了5000個G的瑣瑣碎文件,那那么維護(hù)的時時候

4、和使用的的時候磁盤的的Io就是一一個巨大的問問題,哪怕你你的帶寬足夠夠,但是你的的磁盤也未必必響應(yīng)過來。如如果這個時候候還涉及上傳傳,磁盤很容容易就oveer了。也許用raaid和專用用存貯服務(wù)器器能解決眼下下的問題,但但是還有個問問題就是各地地的訪問問題題,也許我們們的服務(wù)器在在北京,可能能在云南或者者新疆的訪問問速度如何解解決?如果做做分布式,那那么我們的文文件索引以及及架構(gòu)該如何何規(guī)劃。所以我們不不得不承認(rèn),文文件存貯是個個很不容易的的問題4、數(shù)據(jù)關(guān)關(guān)系的處理我們可以很很容易的規(guī)劃劃出一個符合合第三范式的的數(shù)據(jù)庫,里里面布滿了多多對多關(guān)系,還還能用GUIID來替換IINDENTTIFY

5、CCOLUMNN 但是,多多對多關(guān)系充充斥的2.00時代,第三三范式是第一一個應(yīng)該被拋拋棄的。必須須有效的把多多表聯(lián)合查詢詢降到最低。5、數(shù)據(jù)索索引的問題眾所周知,索索引是提高數(shù)數(shù)據(jù)庫效率查查詢的最方面面最廉價最容容易實現(xiàn)的方方案。但是,在在高UPDAATE的情況況下,upddate和ddeletee付出的成本本會高的無法法想想,筆者者遇到過一個個情況,在更更新一個聚焦焦索引的時候候需要10分分鐘來完成,那那么對于站點(diǎn)點(diǎn)來說,這些些基本上是不不可忍受的。索引和更新新是一對天生生的冤家,問問題A,D,EE這些是我們們在做架構(gòu)的的時候不得不不考慮的問題題,并且也可可能是花費(fèi)時時間最多的問問題。6、

6、分布式式處理對于2.00網(wǎng)站由于其其高互動性,CCDN實現(xiàn)的的效果基本上上為0,內(nèi)容容是實時更新新的,我們常常規(guī)的處理。為為了保證各地地的訪問速度度,我們就需需要面對一個個絕大的問題題,就是如何何有效的實現(xiàn)現(xiàn)數(shù)據(jù)同步和和更新,實現(xiàn)現(xiàn)各地服務(wù)器器的實時通訊訊有是一個不不得不需要考考慮的問題。7、Ajaax的利弊分分析成也AJAAX,敗也AAJAX,AAJAX成為為了主流趨勢勢,突然發(fā)現(xiàn)現(xiàn)基于XMLLHTTP的的post和和get是如如此的容易??涂蛻舳薵ett或者posst 到服務(wù)務(wù)器數(shù)據(jù),服服務(wù)器接到數(shù)數(shù)據(jù)請求之后后返回來,這這是一個很正正常的AJAAX請求。但但是在AJAAX處理的時時候,如

7、果我我們使用一個個抓包工具的的話,對數(shù)據(jù)據(jù)返回和處理理是一目了然然。對于一些些計算量大的的AJAX請請求的話,我我們可以構(gòu)造造一個發(fā)包機(jī)機(jī),很容易就就可以把一個個webseerver干干掉。8、數(shù)據(jù)安安全性的分析析對于HTTTP協(xié)議來說說,數(shù)據(jù)包都都是明文傳輸輸?shù)?,也許我我們可以說我我們可以用加加密啊,但是是對于G問題題來說的話,加加密的過程就就可能是明文文了(比如我我們知道的QQQ,可以很很容易的判斷斷他的加密,并并有效的寫一一個跟他一樣樣的加密和解解密方法出來來的)。當(dāng)你你站點(diǎn)流量不不是很大的時時候沒有人會會在乎你,但但是當(dāng)你流量量上來之后,那那么所謂的外外掛,所謂的的群發(fā)就會接接踵而來(

8、從從qq一開始始的群發(fā)可見見端倪)。也也許我們可以以很的意的說說,我們可以以采用更高級級別的判斷甚甚至HTTPPS來實現(xiàn),注注意,當(dāng)你做做這些處理的的時候付出的的將是海量的的databbase,iio以及CPPU的成本。對對于一些群發(fā)發(fā),基本上是是不可能的。筆筆者已經(jīng)可以以實現(xiàn)對于百百度空間和qqq空間的群群發(fā)了。大家家愿意試試,實實際上并不是是很難。9、數(shù)據(jù)同同步和集群的的處理的問題題當(dāng)我們的一一臺dataabasesserverr不堪重負(fù)的的時候,這個個時候我們就就需要做基于于數(shù)據(jù)庫的負(fù)負(fù)載和集群了了。而這個時時候可能是最最讓人困擾的的的問題了,數(shù)數(shù)據(jù)基于網(wǎng)絡(luò)絡(luò)傳輸根據(jù)數(shù)數(shù)據(jù)庫的設(shè)計計的不

9、同,數(shù)數(shù)據(jù)延遲是很很可怕的問題題,也是不可可避免的問題題,這樣的話話,我們就需需要通過另外外的手段來保保證在這延遲遲的幾秒或者者更長的幾分分鐘時間內(nèi),實實現(xiàn)有效的交交互。比如數(shù)數(shù)據(jù)散列,分分割,內(nèi)容處處理等等問題題。10、數(shù)據(jù)據(jù)共享的渠道道以及OPEENAPI趨趨勢Openaapi已經(jīng)成成為一個不可可避免的趨勢勢,從gooogle,ffaceboook,myyspacee到21,都都在考慮這個個問題,它可可以更有效的的留住用戶并并激發(fā)用戶的的更多的興趣趣以及讓更多多的人幫助你你做最有效的的開發(fā)。這個個時候一個有有效的數(shù)據(jù)共共享平臺,數(shù)數(shù)據(jù)開放平臺臺就成為必不不可少的途徑徑了,而在開開放的接口的

10、的情況保證數(shù)數(shù)據(jù)的安全性性和性能,又又是一個我們們必須要認(rèn)真真思考的問題題了。大型網(wǎng)站數(shù)據(jù)庫庫優(yōu)化千萬人同時訪問問的網(wǎng)站,一一般是有很多多個數(shù)據(jù)庫同同時工作,說說明白一點(diǎn)就就是數(shù)據(jù)庫集集群和并發(fā)控控制,這樣的的網(wǎng)站實時性性也是相對的的。這些網(wǎng)站站都有一些共共同的特點(diǎn):數(shù)據(jù)量大,在在線人數(shù)多,并并發(fā)請求多,ppageviiew高,響響應(yīng)速度快??偪偨Y(jié)了一下各各個大網(wǎng)站的的架構(gòu),主要要提高效率及及穩(wěn)定性的幾幾個地方包括括:1、程序 程序開發(fā)是一方方面,系統(tǒng)架架構(gòu)設(shè)計(硬硬件+網(wǎng)絡(luò)+軟件)是另另一方面。軟件架構(gòu)方面,做做網(wǎng)站首先需需要很多weeb服務(wù)器存存儲靜態(tài)資源源,比如圖片片、視頻、靜靜態(tài)頁等,

11、千千萬不要把靜靜態(tài)資源和應(yīng)應(yīng)用服務(wù)器放放在一起。一個好的程序員員寫出來的程程序會非常簡簡潔、性能很很好,一個初初級程序員可可能會犯很多多低級錯誤,這這也是影響網(wǎng)網(wǎng)站性能的原原因之一。網(wǎng)站要做到效率率高,不光是是程序員的事事情,數(shù)據(jù)庫庫優(yōu)化、程序序優(yōu)化這是必必須的,在性性能優(yōu)化上要要數(shù)據(jù)庫和程程序齊頭并進(jìn)進(jìn)!緩存也是是兩方面同時時入手。第一一,數(shù)據(jù)庫緩緩存和數(shù)據(jù)庫庫優(yōu)化,這個個由dba完完成(而且這這個有非常大大的潛力可挖挖,只是由于于我們都是程程序員而忽略略了他而已)。第第二,程序上上的優(yōu)化,這這個非常的有有講究,比如如說重要一點(diǎn)點(diǎn)就是要規(guī)范范語句句,少用inn 多用orr,多用prrepar

12、eestateement,另另外避免程序序冗余如查找找數(shù)據(jù)少用雙雙重循環(huán)等。另另外選用優(yōu)秀秀的開源框架架加以支持,我我個人認(rèn)為中中后臺的支持持是最最重要要的,可以選選取spriingibbatis。因因為ibattis直接操操作SQL并并有緩存機(jī)制制。spriing的好處處就不用我多多說了,的機(jī)制可可以避免neew對象,這這樣也節(jié)省開開銷。據(jù)我分分析,絕大部部分的開銷就就是在NEWW的時候和連連接數(shù)據(jù)庫時時候產(chǎn)生的,請請盡量避免。另另外可以用一一些內(nèi)存測試試工具來做一一個 demmo說明hiibernaate和ibbatis誰誰更快!前臺臺你想用什么么就用什么,sstrutss,webwwor

13、k都成成,如果覺得得自己挺牛XX可以試試用用 tapeestry。用數(shù)據(jù)庫也未必必不能解決訪訪問量巨大所所帶來的問題題,作成靜態(tài)態(tài)文件硬盤的的尋址時間也也未必少于數(shù)數(shù)據(jù)庫的搜索索時間,當(dāng)然然對資料的索索引要下一翻翻工夫。我自自己覺得門戶戶往往也就是是當(dāng)天、熱門門的資料點(diǎn)擊擊率較高,將將其做緩存最最多也不過112G的數(shù)據(jù)量量吧,舉個例例子: 拿網(wǎng)易新聞聞來說htttp:/nnews.1163.coom/07/0606/09/3GGA0D100N000111229.html格式化一下,方方便理解:hhttp:/域名/年年/月日/新新聞所屬分類類/新聞IDD.htmll可以把當(dāng)天發(fā)布布的、熱門的的、

14、流攬量大大的作個緩寸寸,用hasshtablle(keyy:年-月-日-分類-ID,vaalue:新新聞對象),靜靜態(tài)將其放到到內(nèi)存(速度度絕對快過硬硬盤尋址靜態(tài)態(tài)頁面)。通常是采用orracle存存儲過程22個webllogic,更更新機(jī)制也幾幾乎一樣每簽簽發(fā)一條新聞聞,就會生成成靜態(tài)頁面,然然后發(fā)往前端端的web服服務(wù)器,前端端的web都都是做負(fù)載均均衡的。另外外還有定時的的程序,每55-15分鐘鐘自動生成一一次。在發(fā)布布新聞的同時時將數(shù)據(jù)緩存存。當(dāng)然緩存存也不會越來來越大,在個個特定的時間間段(如凌晨晨)剔除過期期的數(shù)據(jù)。做做一個大的網(wǎng)網(wǎng)站遠(yuǎn)沒有想想象中那么簡簡單,服務(wù)器器基本就要百百十

15、個的。這樣可以大大增增加一臺計算算機(jī)的處理速速度,如果一一臺機(jī)器處理理不了,可以以用httppserveer集群來解解決問題了。2、網(wǎng)絡(luò) 中國的網(wǎng)絡(luò)分分南北電信和和網(wǎng)通,訪問問的ip就要要區(qū)分南北進(jìn)進(jìn)入不同的網(wǎng)網(wǎng)絡(luò)。3、集群 通常會使用CDDN與GSBBL與DNSS負(fù)載均衡技技術(shù),每個地地區(qū)一組前臺臺服務(wù)器群,例例如:網(wǎng)易,百百度使用了DDNS負(fù)載均均衡技術(shù),每每個頻道一組組前臺服務(wù)器器,一搜使用用了DNS負(fù)負(fù)載技術(shù),所所有頻道共用用一組前臺服服務(wù)器集群。網(wǎng)站使用基于LLinux集集群的負(fù)載均均衡,失敗恢恢復(fù),包括應(yīng)應(yīng)用服務(wù)器和和數(shù)據(jù)庫服務(wù)務(wù)器,基于llinux-ha的服務(wù)務(wù)狀態(tài)檢測及及高可用

16、化。應(yīng)用服務(wù)器集群群可以采用aapachee+tomccat集群和和webloogic集群群等;webb服務(wù)器集群群可以用反向向代理,也可可以用NATT的方式,或或者多域名解解析都可以;Squidd也可以,方方法很多,可可以根據(jù)情況況選擇。4、數(shù)據(jù)庫 因為是千萬人同同時訪問的網(wǎng)網(wǎng)站,所以一一般是有很多多個數(shù)據(jù)庫同同時工作的,說說明白一點(diǎn)就就是數(shù)據(jù)庫集集群和并發(fā)控控制,數(shù)據(jù)分分布到地理位位置不同的數(shù)數(shù)據(jù)中心,以以免發(fā)生斷電電事故。另外外還有一點(diǎn)的的是,那些網(wǎng)網(wǎng)站的靜態(tài)化化網(wǎng)頁并不是是真的,而是是通過動態(tài)網(wǎng)網(wǎng)頁與靜態(tài)網(wǎng)網(wǎng)頁網(wǎng)址交換換做出現(xiàn)的假假象,這可以以用urlrrewritte這樣的開開源網(wǎng)址

17、映射射器實現(xiàn)。這這樣的網(wǎng)站實實時性也是相相對的,因為為在數(shù)據(jù)庫復(fù)復(fù)制數(shù)據(jù)的時時候有一個過過程,一般在在技術(shù)上可以以用到hibbernatte和ecaache,但但是如果要使使網(wǎng)站工作地地更好,可以以使用EJBB和websspheree,webllogic這這樣大型的服服務(wù)器來支持持,并且要用用oraclle這樣的大大型數(shù)據(jù)庫。大型門戶網(wǎng)站不不建議使用MMysql數(shù)數(shù)據(jù)庫,除非非你對Myssql數(shù)據(jù)的的優(yōu)化非常熟熟悉。Myssql數(shù)據(jù)庫庫服務(wù)器的mmasterr-slavve模式,利利用數(shù)據(jù)庫服服務(wù)器在主從從服務(wù)器間進(jìn)進(jìn)行同步,應(yīng)應(yīng)用只把數(shù)據(jù)據(jù)寫到主服務(wù)務(wù)器,而讀數(shù)數(shù)據(jù)時則根據(jù)據(jù)負(fù)載選擇一一臺從

18、服務(wù)器器或者主服務(wù)務(wù)器來讀取,將將數(shù)據(jù)按不同同策略劃分到到不同的服務(wù)務(wù)器(組)上上,分散數(shù)據(jù)據(jù)庫壓力。大型網(wǎng)站要用ooraclee,數(shù)據(jù)方面面操作盡量多多用存儲過程程,絕對提升升性能;同時時要讓DBAA對數(shù)據(jù)庫進(jìn)進(jìn)行優(yōu)化,優(yōu)優(yōu)化后的數(shù)據(jù)據(jù)庫與沒優(yōu)化化的有天壤之之別;同時還還可以擴(kuò)展分分布式數(shù)據(jù)庫庫,以后這方方面的研究會會越來越多;5、頁面 從開始就考慮使使用虛擬存儲儲/簇文件系系統(tǒng)。它能讓讓你大量并行行IO訪問,而而且不需要任任何重組就能能夠增加所需需要的磁盤。頁面數(shù)據(jù)調(diào)用更更要認(rèn)真設(shè)計計,一些數(shù)據(jù)據(jù)查詢可以不不通過數(shù)據(jù)庫庫的方式,實實時性要求不不高的可以使使用luceene來實現(xiàn)現(xiàn),即使有實

19、實時性的要求求也可以用llucenee,luceene+coompasss還是非常優(yōu)優(yōu)秀的。新聞類的網(wǎng)站可可以用靜態(tài)頁頁存儲,采用用定時更新機(jī)機(jī)制減輕服務(wù)務(wù)器負(fù)擔(dān);首首頁每個小模模塊可以使用用oscacche緩存,這這樣不用每次次都拉數(shù)據(jù)。前端的基于靜態(tài)態(tài)頁面緩存的的web加速速器,主要應(yīng)應(yīng)用有squuid等。ssquid 將大部分靜靜態(tài)資源(圖圖片,js,ccss等)緩緩存起來,直直接返回給訪訪問者,減少少應(yīng)用服務(wù)器器的負(fù)載網(wǎng)站的靜態(tài)化網(wǎng)網(wǎng)頁并不是真真的,而是通通過動態(tài)網(wǎng)頁頁與靜態(tài)網(wǎng)頁頁網(wǎng)址交換做做出現(xiàn)的假象象,這可以用用urlreewritee這樣的開源源網(wǎng)址映射器器實現(xiàn),后綴綴名為htm

20、m或者h(yuǎn)tmml并不能說說明程序生成成了靜態(tài)頁面面,可能是通通過url重重寫來實現(xiàn)的的,為的只不不過是在搜索索引擎中提升升自己網(wǎng)站的的覆蓋面積罷罷了。生成靜態(tài)頁面的的服務(wù)器和wwww服務(wù)器器是兩組不同同的服務(wù)器,頁頁面生成后才才會到wwww服務(wù)器,一一部分?jǐn)?shù)據(jù)庫庫并不是關(guān)系系數(shù)據(jù)庫,這這樣更適合信信息衍生,wwww、maail服務(wù)器器、路由器多多,主要用負(fù)負(fù)載平衡解決決訪問瓶頸。 靜態(tài)頁面的的缺點(diǎn):1) 增加了程程序的復(fù)雜度度2) 不利于管管理資料3) 速度不是是最快4) 傷硬盤6、緩存 從一開始就應(yīng)該該使用緩存,高高速緩存是一一個更好的地地方存儲臨時時數(shù)據(jù),比如如Web站點(diǎn)點(diǎn)上跟蹤一個個特定

21、用戶的的會話產(chǎn)生的的臨時文件,就就不再需要記記錄到數(shù)據(jù)庫庫里。不能用luceene實現(xiàn)的的可以用緩存存,分布式緩緩存可以用mmemcacched,如如果有錢的話話用10來臺臺機(jī)器做緩存存, 100G的存儲量量相信存什么么都夠了;如如果沒錢的話話可以在頁面面緩存和數(shù)據(jù)據(jù)緩存上下功功夫,多用OOSCACHHE和EHCCACHE,SSWARMCCACHE也也可以,不過過據(jù)說同步性性不是很好;可以使用Memmcachee進(jìn)行緩存,用用大內(nèi)存把這這些不變的數(shù)數(shù)據(jù)全都緩存存起來,而當(dāng)當(dāng)修改時就通通知cachhe過期,mmemcacche是LJJ開發(fā)的一款款分布式緩存存產(chǎn)品,很多多大型網(wǎng)站在在應(yīng)用,我們們可

22、以把Caache SServerr與App Serveer裝在一起起。因為Caache SServerr對CPU消消耗不大,而而有了Cacche Seerver的的支援,Appp Serrver對內(nèi)內(nèi)存要求也不不是太高,所所以可以和平平共處,更有有效的利用資資源。以上一些不太成成熟的想法,可可以從某一個個層次開始,逐逐步細(xì)化,把把產(chǎn)品的性能能指標(biāo)提高上上去。淺析大型網(wǎng)站的的架構(gòu)一個小型的網(wǎng)站站,比如個人人網(wǎng)站,可以以使用最簡單單的htmll靜態(tài)頁面就就實現(xiàn)了,配配合一些圖片片達(dá)到美化效效果,所有的的頁面均存放放在一個目錄錄下,這樣的的網(wǎng)站對系統(tǒng)統(tǒng)架構(gòu)、性能能的要求都很很簡單,隨著著互聯(lián)網(wǎng)業(yè)務(wù)務(wù)

23、的不斷豐富富,網(wǎng)站相關(guān)關(guān)的技術(shù)經(jīng)過過這些年的發(fā)發(fā)展,已經(jīng)細(xì)細(xì)分到很細(xì)的的方方面面,尤尤其對于大型型網(wǎng)站來說,所所采用的技術(shù)術(shù)更是涉及面面非常廣,從從硬件到軟件件、編程語言言、數(shù)據(jù)庫、WWebSerrver、防防火墻等各個個領(lǐng)域都有了了很高的要求求,已經(jīng)不是是原來簡單的的html靜靜態(tài)網(wǎng)站所能能比擬的。大型網(wǎng)站,比如如門戶網(wǎng)站。在在面對大量用用戶訪問、高高并發(fā)請求方方面,基本的的解決方案集集中在這樣幾幾個環(huán)節(jié):使使用高性能的的服務(wù)器、高高性能的數(shù)據(jù)據(jù)庫、高效率率的編程語言言、還有高性性能的Webb容器。但是是除了這幾個個方面,還沒沒法根本解決決大型網(wǎng)站面面臨的高負(fù)載載和高并發(fā)問問題。上面提供的幾

24、個個解決思路在在一定程度上上也意味著更更大的投入,并并且這樣的解解決思路具備備瓶頸,沒有有很好的擴(kuò)展展性,下面我我從低成本、高高性能和高擴(kuò)擴(kuò)張性的角度度來說說我的的一些經(jīng)驗。 1、HTML靜靜態(tài)化 其實大家都知道道,效率最高高、消耗最小小的就是純靜靜態(tài)化的httml頁面,所所以我們盡可可能使我們的的網(wǎng)站上的頁頁面采用靜態(tài)態(tài)頁面來實現(xiàn)現(xiàn),這個最簡簡單的方法其其實也是最有有效的方法。但但是對于大量量內(nèi)容并且頻頻繁更新的網(wǎng)網(wǎng)站,我們無無法全部手動動去挨個實現(xiàn)現(xiàn),于是出現(xiàn)現(xiàn)了我們常見見的信息發(fā)布布系統(tǒng)CMSS,像我們常常訪問的各個個門戶站點(diǎn)的的新聞頻道,甚甚至他們的其其他頻道,都都是通過信息息發(fā)布系統(tǒng)

25、來來管理和實現(xiàn)現(xiàn)的,信息發(fā)發(fā)布系統(tǒng)可以以實現(xiàn)最簡單單的信息錄入入自動生成靜靜態(tài)頁面,還還能具備頻道道管理、權(quán)限限管理、自動動抓取等功能能,對于一個個大型網(wǎng)站來來說,擁有一一套高效、可可管理的CMMS是必不可可少的。除了門戶和信息息發(fā)布類型的的網(wǎng)站,對于于交互性要求求很高的社區(qū)區(qū)類型網(wǎng)站來來說,盡可能能的靜態(tài)化也也是提高性能能的必要手段段,將社區(qū)內(nèi)內(nèi)的帖子、文文章進(jìn)行實時時的靜態(tài)化,有有更新的時候候再重新靜態(tài)態(tài)化也是大量量使用的策略略,像Mopp的大雜燴就就是使用了這這樣的策略,網(wǎng)網(wǎng)易社區(qū)等也也是如此。同時,htmll靜態(tài)化也是是某些緩存策策略使用的手手段,對于系系統(tǒng)中頻繁使使用數(shù)據(jù)庫查查詢但是

26、內(nèi)容容更新很小的的應(yīng)用,可以以考慮使用hhtml靜態(tài)態(tài)化來實現(xiàn),比比如論壇中論論壇的公用設(shè)設(shè)置信息,這這些信息目前前的主流論壇壇都可以進(jìn)行行后臺管理并并且存儲再數(shù)數(shù)據(jù)庫中,這這些信息其實實大量被前臺臺程序調(diào)用,但但是更新頻率率很小,可以以考慮將這部部分內(nèi)容進(jìn)行行后臺更新的的時候進(jìn)行靜靜態(tài)化,這樣樣避免了大量量的數(shù)據(jù)庫訪訪問請求。2、圖片服務(wù)器器分離 大家知道,對對于Web服服務(wù)器來說,不不管是Apaache、IIIS還是其其他容器,圖圖片是最消耗耗資源的,于于是我們有必必要將圖片與與頁面進(jìn)行分分離,這是基基本上大型網(wǎng)網(wǎng)站都會采用用的策略,他他們都有獨(dú)立立的圖片服務(wù)務(wù)器,甚至很很多臺圖片服服務(wù)器

27、。這樣樣的架構(gòu)可以以降低提供頁頁面訪問請求求的服務(wù)器系系統(tǒng)壓力,并并且可以保證證系統(tǒng)不會因因為圖片問題題而崩潰,在在應(yīng)用服務(wù)器器和圖片服務(wù)務(wù)器上,可以以進(jìn)行不同的的配置優(yōu)化,比比如apacche在配置置ConteentTyppe的時候可可以盡量少支支持,盡可能能少的 LooadModdule,保保證更高的系系統(tǒng)消耗和執(zhí)執(zhí)行效率。3、數(shù)據(jù)庫集群群和庫表散列列 大型網(wǎng)站都有復(fù)復(fù)雜的應(yīng)用,這這些應(yīng)用必須須使用數(shù)據(jù)庫庫,那么在面面對大量訪問問的時候,數(shù)數(shù)據(jù)庫的瓶頸頸很快就能顯顯現(xiàn)出來,這這時一臺數(shù)據(jù)據(jù)庫將很快無無法滿足應(yīng)用用,于是我們們需要使用數(shù)數(shù)據(jù)庫集群或或者庫表散列列。在數(shù)據(jù)庫集群方方面,很多數(shù)數(shù)

28、據(jù)庫都有自自己的解決方方案,Oraacle、SSybasee等都有很好好的方案,常常用的MySSQL提供的的Masteer/Slaave也是類類似的方案,您您使用了什么么樣的DB,就就參考相應(yīng)的的解決方案來來實施即可。上面提到的數(shù)據(jù)據(jù)庫集群由于于在架構(gòu)、成成本、擴(kuò)張性性方面都會受受到所采用DDB類型的限限制,于是我我們需要從應(yīng)應(yīng)用程序的角角度來考慮改改善系統(tǒng)架構(gòu)構(gòu),庫表散列列是常用并且且最有效的解解決方案。我我們在應(yīng)用程程序中安裝業(yè)業(yè)務(wù)和應(yīng)用或或者功能模塊塊將數(shù)據(jù)庫進(jìn)進(jìn)行分離,不不同的模塊對對應(yīng)不同的數(shù)數(shù)據(jù)庫或者表表,再按照一一定的策略對對某個頁面或或者功能進(jìn)行行更小的數(shù)據(jù)據(jù)庫散列,比比如用戶

29、表,按按照用戶IDD進(jìn)行表散列列,這樣就能能夠低成本的的提升系統(tǒng)的的性能并且有有很好的擴(kuò)展展性。sohhu的論壇就就是采用了這這樣的架構(gòu),將將論壇的用戶戶、設(shè)置、帖帖子等信息進(jìn)進(jìn)行數(shù)據(jù)庫分分離,然后對對帖子、用戶戶按照板塊和和ID進(jìn)行散散列數(shù)據(jù)庫和和表,最終可可以在配置文文件中進(jìn)行簡簡單的配置便便能讓系統(tǒng)隨隨時增加一臺臺低成本的數(shù)數(shù)據(jù)庫進(jìn)來補(bǔ)補(bǔ)充系統(tǒng)性能能。4、緩存 緩存一詞搞技術(shù)術(shù)的都接觸過過,很多地方方用到緩存。網(wǎng)網(wǎng)站架構(gòu)和網(wǎng)網(wǎng)站開發(fā)中的的緩存也是非非常重要。這這里先講述最最基本的兩種種緩存。高級級和分布式的的緩存在后面面講述。架構(gòu)方面的緩存存,對Apaache比較較熟悉的人都都能知道Ap

30、pache提提供了自己的的緩存模塊,也也可以使用外外加的Squuid模塊進(jìn)進(jìn)行緩存,這這兩種方式均均可以有效的的提高Apaache的訪訪問響應(yīng)能力力。網(wǎng)站程序開發(fā)方方面的緩存,LLinux上上提供的Meemory Cachee是常用的緩緩存接口,可可以在webb開發(fā)中使用用,比如用JJava開發(fā)發(fā)的時候就可可以調(diào)用MeemoryCCache對對一些數(shù)據(jù)進(jìn)進(jìn)行緩存和通通訊共享,一一些大型社區(qū)區(qū)使用了這樣樣的架構(gòu)。另另外,在使用用web語言言開發(fā)的時候候,各種語言言基本都有自自己的緩存模模塊和方法,PPHP有Peear的Caache模塊塊,Javaa就更多了,.net不是是很熟悉,相相信也肯定有有

31、。5、鏡像 鏡像是大型網(wǎng)站站常采用的提提高性能和數(shù)數(shù)據(jù)安全性的的方式,鏡像像的技術(shù)可以以解決不同網(wǎng)網(wǎng)絡(luò)接入商和和地域帶來的的用戶訪問速速度差異,比比如 ChiinaNett和EduNNet 之間間的差異就促促使了很多網(wǎng)網(wǎng)站在教育網(wǎng)網(wǎng)內(nèi)搭建鏡像像站點(diǎn),數(shù)據(jù)據(jù)進(jìn)行定時更更新或者實時時更新。在鏡鏡像的細(xì)節(jié)技技術(shù)方面,這這里不闡述太太深,有很多多專業(yè)的現(xiàn)成成的解決架構(gòu)構(gòu)和產(chǎn)品可選選。也有廉價價的通過軟件件實現(xiàn)的思路路,比如Liinux上的的rsyncc等工具。6、負(fù)載均衡 負(fù)載均衡將是大大型網(wǎng)站解決決高負(fù)荷訪問問和大量并發(fā)發(fā)請求采用的的終極解決辦辦法。負(fù)載均衡技術(shù)發(fā)發(fā)展了多年,有有很多專業(yè)的的服務(wù)提供

32、商商和產(chǎn)品可以以選擇,我個個人接觸過一一些解決方法法,其中有兩兩個架構(gòu)可以以給大家做參參考。硬件四層交換第四層交換使用用第三層和第第四層信息包包的報頭信息息,根據(jù)應(yīng)用用區(qū)間識別業(yè)業(yè)務(wù)流,將整整個區(qū)間段的的業(yè)務(wù)流分配配到合適的應(yīng)應(yīng)用服務(wù)器進(jìn)進(jìn)行處理。第四層交換換功能就象是是虛 IP,指指向物理服務(wù)務(wù)器。它傳輸輸?shù)臉I(yè)務(wù)服從從的協(xié)議多種種多樣,有HHTTP、FFTP、NFFS、Tellnet或其其他協(xié)議。這這些業(yè)務(wù)在物物理服務(wù)器基基礎(chǔ)上,需要要復(fù)雜的載量量平衡算法。在在IP世界,業(yè)業(yè)務(wù)類型由終終端TCP或或UDP端口口地址來決定定,在第四層層交換中的應(yīng)應(yīng)用區(qū)間則由由源端和終端端IP地址、TTCP和U

33、DDP端口共同同決定。在硬件四層交換換產(chǎn)品領(lǐng)域,有有一些知名的的產(chǎn)品可以選選擇,比如AAlteonn、F5等,這這些產(chǎn)品很昂昂貴,但是物物有所值,能能夠提供非常常優(yōu)秀的性能能和很靈活的的管理能力。YYahoo中中國當(dāng)初接近近2000臺臺服務(wù)器使用用了三四臺AAlteonn就搞定了。軟件四層交換大家知道了硬件件四層交換機(jī)機(jī)的原理后,基基于OSI模模型來實現(xiàn)的的軟件四層交交換也就應(yīng)運(yùn)運(yùn)而生,這樣樣的解決方案案實現(xiàn)的原理理一致,不過過性能稍差。但但是滿足一定定量的壓力還還是游刃有余余的,有人說說軟件實現(xiàn)方方式其實更靈靈活,處理能能力完全看你你配置的熟悉悉能力。軟件四層交換我我們可以使用用Linuxx

34、上常用的LLVS來解決決,LVS就就是Linuux Virrtual Serveer,他提供供了基于心跳跳線hearrtbeatt的實時災(zāi)難難應(yīng)對解決方方案,提高系系統(tǒng)的魯棒性性,同時可供供了靈活的虛虛擬VIP配配置和管理功功能,可以同同時滿足多種種應(yīng)用需求,這這對于分布式式的系統(tǒng)來說說必不可少。一個典型的使用用負(fù)載均衡的的策略就是,在在軟件或者硬硬件四層交換換的基礎(chǔ)上搭搭建squiid集群,這這種思路在很很多大型網(wǎng)站站包括搜索引引擎上被采用用,這樣的架架構(gòu)低成本、高高性能還有很很強(qiáng)的擴(kuò)張性性,隨時往架架構(gòu)里面增減減節(jié)點(diǎn)都非常常容易。這樣樣的架構(gòu)我準(zhǔn)準(zhǔn)備空了專門門詳細(xì)整理一一下和大家探探討。對

35、于大型網(wǎng)站來來說,前面提提到的每個方方法可能都會會被同時使用用到,我這里里介紹得比較較淺顯,具體體實現(xiàn)過程中中很多細(xì)節(jié)還還需要大家慢慢慢熟悉和體體會,有時一一個很小的ssquid參參數(shù)或者appache參參數(shù)設(shè)置,對對于系統(tǒng)性能能的影響就會會很大,希望望大家一起討討論,達(dá)到拋拋磚引玉之效效。淺談大型網(wǎng)站動動態(tài)應(yīng)用系統(tǒng)統(tǒng)架構(gòu)動態(tài)應(yīng)用,是相相對于網(wǎng)站靜靜態(tài)內(nèi)容而言言,是指以cc/c+、pphp、Jaava、peerl、.nnet等服務(wù)務(wù)器端語言開開發(fā)的網(wǎng)絡(luò)應(yīng)應(yīng)用軟件,比比如論壇、網(wǎng)網(wǎng)絡(luò)相冊、交交友、BLOOG等常見應(yīng)應(yīng)用。動態(tài)應(yīng)應(yīng)用系統(tǒng)通常常與數(shù)據(jù)庫系系統(tǒng)、緩存系系統(tǒng)、分布式式存儲系統(tǒng)等等密不可分

36、。 大型動態(tài)應(yīng)應(yīng)用系統(tǒng)平臺臺主要是針對對于大流量、高高并發(fā)網(wǎng)站建建立的底層系系統(tǒng)架構(gòu)。大大型網(wǎng)站的運(yùn)運(yùn)行需要一個個可靠、安全全、可擴(kuò)展、易易維護(hù)的應(yīng)用用系統(tǒng)平臺做做為支撐,以以保證網(wǎng)站應(yīng)應(yīng)用的平穩(wěn)運(yùn)運(yùn)行。大型動態(tài)應(yīng)應(yīng)用系統(tǒng)又可可分為幾個子子系統(tǒng):1)Webb前端系統(tǒng)2)負(fù)載均均衡系統(tǒng)3)數(shù)據(jù)庫庫集群系統(tǒng)4)緩存系系統(tǒng)5)分布式式存儲系統(tǒng)6)分布式式服務(wù)器管理理系統(tǒng)7)代碼分分發(fā)系統(tǒng)Web前端端系統(tǒng) 結(jié)構(gòu)圖:為了達(dá)到不不同應(yīng)用的服服務(wù)器共享、避避免單點(diǎn)故障障、集中管理理、統(tǒng)一配置置等目的,不不以應(yīng)用劃分分服務(wù)器,而而是將所有服服務(wù)器做統(tǒng)一一使用,每臺臺服務(wù)器都可可以對多個應(yīng)應(yīng)用提供服務(wù)務(wù),當(dāng)某些

37、應(yīng)應(yīng)用訪問量升升高時,通過過增加服務(wù)器器節(jié)點(diǎn)達(dá)到整整個服務(wù)器集集群的性能提提高,同時使使他應(yīng)用也會會受益。該WWeb前端系系統(tǒng)基于 AApachee/Lighhttpd/Eginxx等的虛擬主主機(jī)平臺,提提供PHP程程序運(yùn)行環(huán)境境。服務(wù)器對對開發(fā)人員是是透明的,不不需要開發(fā)人人員介入服務(wù)務(wù)器管理 負(fù)載均衡系系統(tǒng) 負(fù)載均衡系系統(tǒng)分為硬件件和軟件兩種種。硬件負(fù)載載均衡效率高高,但是價格格貴,比如FF5等。軟件件負(fù)載均衡系系統(tǒng)價格較低低或者免費(fèi),效效率較硬件負(fù)負(fù)載均衡系統(tǒng)統(tǒng)低,不過對對于流量一般般或稍大些網(wǎng)網(wǎng)站來講也足足夠使用,比比如lvs, nginnx。大多數(shù)數(shù)網(wǎng)站都是硬硬件、軟件負(fù)負(fù)載均衡系統(tǒng)

38、統(tǒng)并用。數(shù)據(jù)庫集群群系統(tǒng) 結(jié)構(gòu)圖:由于Webb前端采用了了負(fù)載均衡集集群結(jié)構(gòu)提高高了服務(wù)的有有效性和擴(kuò)展展性,因此數(shù)數(shù)據(jù)庫必須也也是高可靠的的,才能保證證整個服務(wù)體體系的高可靠靠性,如何構(gòu)構(gòu)建一個高可可靠的、可以以提供大規(guī)模模并發(fā)處理的的數(shù)據(jù)庫體系系?我們可以采采用如上圖所所示的方案:1) 使用用 MySQQL 數(shù)據(jù)庫庫,考慮到WWeb應(yīng)用的的數(shù)據(jù)庫讀多多寫少的特點(diǎn)點(diǎn),我們主要要對讀數(shù)據(jù)庫庫做了優(yōu)化,提提供專用的讀讀數(shù)據(jù)庫和寫寫數(shù)據(jù)庫,在在應(yīng)用程序中中實現(xiàn)讀操作作和寫操作分分別訪問不同同的數(shù)據(jù)庫。2) 使用用 MySQQL Repplicattion 機(jī)機(jī)制實現(xiàn)快速速將主庫(寫寫庫)的數(shù)據(jù)據(jù)庫

39、復(fù)制到從從庫(讀庫)。一一個主庫對應(yīng)應(yīng)多個從庫,主主庫數(shù)據(jù)實時時同步到從庫庫。 3) 寫數(shù)數(shù)據(jù)庫有多臺臺,每臺都可可以提供多個個應(yīng)用共同使使用,這樣可可以解決寫庫庫的性能瓶頸頸問題和單點(diǎn)點(diǎn)故障問題。 4) 讀數(shù)數(shù)據(jù)庫有多臺臺,通過負(fù)載載均衡設(shè)備實實現(xiàn)負(fù)載均衡衡,從而達(dá)到到讀數(shù)據(jù)庫的的高性能、高高可靠和高可可擴(kuò)展性。5) 數(shù)據(jù)據(jù)庫服務(wù)器和和應(yīng)用服務(wù)器器分離。6) 從數(shù)數(shù)據(jù)庫使用BBigIP做做負(fù)載均衡。緩存系統(tǒng) 緩存分為文文件緩存、內(nèi)內(nèi)存緩存、數(shù)數(shù)據(jù)庫緩存。在在大型Webb應(yīng)用中使用用最多且效率率最高的是內(nèi)內(nèi)存緩存。最最常用的內(nèi)存存緩存工具是是Memcaached。使使用正確的緩緩存系統(tǒng)可以以達(dá)

40、到實現(xiàn)以以下目標(biāo):1、使用緩緩存系統(tǒng)可以以提高訪問效效率,提高服服務(wù)器吞吐能能力,改善用用戶體驗。2、減輕對對數(shù)據(jù)庫及存存儲集服務(wù)器器的訪問壓力力。3、Memmcacheed服務(wù)器有有多臺,避免免單點(diǎn)故障,提提供高可靠性性和可擴(kuò)展性性,提高性能能。分布式存儲儲系統(tǒng) 結(jié)構(gòu)圖:Web系統(tǒng)統(tǒng)平臺中的存存儲需求有下下面兩個特點(diǎn)點(diǎn): 1) 存儲儲量很大,經(jīng)經(jīng)常會達(dá)到單單臺服務(wù)器無無法提供的規(guī)規(guī)模,比如相相冊、視頻等等應(yīng)用。因此此需要專業(yè)的的大規(guī)模存儲儲系統(tǒng)。 2) 負(fù)載載均衡cluuster中中的每個節(jié)點(diǎn)點(diǎn)都有可能訪訪問任何一個個數(shù)據(jù)對象,每每個節(jié)點(diǎn)對數(shù)數(shù)據(jù)的處理也也能被其他節(jié)節(jié)點(diǎn)共享,因因此這些節(jié)點(diǎn)點(diǎn)

41、要操作的數(shù)數(shù)據(jù)從邏輯上上看只能是一一個整體,不不是各自獨(dú)立立的數(shù)據(jù)資源源。因此高性能能的分布式存存儲系統(tǒng)對于于大型網(wǎng)站應(yīng)應(yīng)用來說是非非常重要的一一環(huán)。(這個個地方需要加加入對某個分分布式存儲系系統(tǒng)的簡單介介紹。)分布式服務(wù)務(wù)器管理系統(tǒng)統(tǒng) 結(jié)構(gòu)圖: 隨著網(wǎng)站訪訪問流量的不不斷增加,大大多的網(wǎng)絡(luò)服服務(wù)都是以負(fù)負(fù)載均衡集群群的方式對外外提供服務(wù),隨隨之集群規(guī)模模的擴(kuò)大,原原來基于單機(jī)機(jī)的服務(wù)器管管理模式已經(jīng)經(jīng)不能夠滿足足我們的需求求,新的需求求必須能夠集集中式的、分分組的、批量量的、自動化化的對服務(wù)器器進(jìn)行管理,能能夠批量化的的執(zhí)行計劃任任務(wù)。在分布式服服務(wù)器管理系系統(tǒng)軟件中有有一些比較優(yōu)優(yōu)秀的軟件

42、,其其中比較理想想的一個是CCfengiine。它可可以對服務(wù)器器進(jìn)行分組,不不同的分組可可以分別定制制系統(tǒng)配置文文件、計劃任任務(wù)等配置。它它是基于C/S 結(jié)構(gòu)的的,所有的服服務(wù)器配置和和管理腳本程程序都保存在在Cfenggine SServerr上,而被管管理的服務(wù)器器運(yùn)行著 CCfengiine Cllient 程序,Cffenginne Cliient通過過SSL加密密的連接定期期的向服務(wù)器器端發(fā)送請求求以獲取最新新的配置文件件和管理命令令、腳本程序序、補(bǔ)丁安裝裝等任務(wù)。 有了Cfeenginee這種集中式式的服務(wù)器管管理工具,我我們就可以高高效的實現(xiàn)大大規(guī)模的服務(wù)務(wù)器集群管理理,被管理

43、服服務(wù)器和 CCfengiine Seerver 可以分布在在任何位置,只只要網(wǎng)絡(luò)可以以連通就能實實現(xiàn)快速自動動化的管理。 代碼發(fā)布系系統(tǒng) 結(jié)構(gòu)圖:隨著網(wǎng)站訪訪問流量的不不斷增加,大大多的網(wǎng)絡(luò)服服務(wù)都是以負(fù)負(fù)載均衡集群群的方式對外外提供服務(wù),隨隨之集群規(guī)模模的擴(kuò)大,為為了滿足集群群環(huán)境下程序序代碼的批量量分發(fā)和更新新,我們還需需要一個程序序代碼發(fā)布系系統(tǒng)。這個發(fā)布系系統(tǒng)可以幫我我們實現(xiàn)下面面的目標(biāo):1) 生產(chǎn)產(chǎn)環(huán)境的服務(wù)務(wù)器以虛擬主主機(jī)方式提供供服務(wù),不需需要開發(fā)人員員介入維護(hù)和和直接操作,提提供發(fā)布系統(tǒng)統(tǒng)可以實現(xiàn)不不需要登陸服服務(wù)器就能把把程序分發(fā)到到目標(biāo)服務(wù)器器。 2) 我們們要實現(xiàn)內(nèi)部部

44、開發(fā)、內(nèi)部部測試、生產(chǎn)產(chǎn)環(huán)境測試、生生產(chǎn)環(huán)境發(fā)布布的4個開發(fā)發(fā)階段的管理理,發(fā)布系統(tǒng)統(tǒng)可以介入各各個階段的代代碼發(fā)布。 3) 我們們需要實現(xiàn)源源代碼管理和和版本控制,SSVN可以實實現(xiàn)該需求。這里面可以以使用常用的的工具Rsyync,通過過開發(fā)相應(yīng)的的腳本工具實實現(xiàn)服務(wù)器集集群間代碼同同步分發(fā)。大型高性能網(wǎng)站站的十項規(guī)則則見 過多種不同同類型的網(wǎng)站站和系統(tǒng),有有好也有差。其其中有些系統(tǒng)統(tǒng)擁有良好的的服務(wù)器/網(wǎng)網(wǎng)絡(luò)架構(gòu),并并且進(jìn)行了合合理的調(diào)整和和監(jiān)控 ;然然而一般的系系統(tǒng)都會有安安全和性能上上的 問題,不不能良好運(yùn)行行,也無法變變得更流行。在中國, 開源源的LAMPP棧是最流行行的網(wǎng)絡(luò)架構(gòu)構(gòu),

45、它使用PPHP開發(fā),運(yùn)運(yùn)行在Apaache服務(wù)務(wù)器上,以MMySQL作作為數(shù)據(jù)庫,所所有這些都運(yùn)運(yùn)行在Linnux上。它它是個可靠的的平臺,運(yùn)行行良好,是現(xiàn)現(xiàn)在全球最 流行的Innterneet系統(tǒng)架構(gòu)構(gòu)。然而,我我們很難對其其規(guī)模進(jìn)行正正確的擴(kuò)展并并保持安全性性,因為每個個應(yīng)用層都有有其自身的問問題、缺陷和和最佳實踐。我我們的工作就就是 幫助企企業(yè)用最低的的操作成本來來創(chuàng)建并運(yùn)行行高性能的、可可伸縮的、安安全的系統(tǒng),因因此對于這類類問題我們有有很豐富的經(jīng)經(jīng)驗。當(dāng)前的實際情況況是,很多網(wǎng)網(wǎng)站都是由開開發(fā)人員 快快速而廉價地地創(chuàng)建,通常常沒有任何IIT人員或者者經(jīng)理,只是是由程序員來來管理系統(tǒng)。

46、造造成的結(jié)果是是,雖然花費(fèi)費(fèi)很低的成本本網(wǎng)站就可以以開始運(yùn)行,但但是當(dāng)擁有大大量用戶、 需要擴(kuò)展規(guī)規(guī)模的時候,通通常就會面臨臨真正的問題題。畢竟,中中國擁有三億億八千萬的IInternnet用戶,如如果其中的00.01%訪訪問這個站點(diǎn)點(diǎn),就很容易易引發(fā)25 萬50萬萬的頁面訪問問量。這些問問題在各個級級別上都會產(chǎn)產(chǎn)生,下面總總結(jié)的規(guī)則是是對最一般的的問題進(jìn)行概概述,并且說說明為什么這這些規(guī)則如此此重要,以及及最好采用什什么方 法來來修正它們。遵遵循這些建議議的站點(diǎn)會提提高它的可伸伸縮性、安全全性以及操作作上的穩(wěn)定性性。使用合適的會話話管理第 一一個想到的擴(kuò)擴(kuò)展系統(tǒng)的方方法就是添加加更多硬件。例

47、例如,使用兩兩臺服務(wù)器而而不是一臺。這這聽著合理,但但會產(chǎn)生潛在在問題:會話話管理。這對對Java程程序來說是很很嚴(yán)重的問題題,在PHPP中也會產(chǎn)生生可延展性問問題, 對于于數(shù)據(jù)庫的負(fù)負(fù)載尤其如此此。會話被定義為單單獨(dú)的最終用用戶登錄或者者連接一 段段時間,其中中通常會包含含多個TCPP/IP的HHTTP連接接、幾個Weeb頁面,通通常還包括幾幾十個甚至上上百個頁面元元素,如框架架、菜單、AAjax更新新等。所有這這些 HTTTP請求都需需要知道用戶戶是誰,才能能滿足安全的的要求,并向向用戶傳送適適當(dāng)?shù)膬?nèi)容,因因為這些都是是會話的組成成部分。通常常每個會話都都會包括相互互關(guān)聯(lián)的會話話數(shù)據(jù), 如

48、如用戶名、用用戶ID、歷歷史、購物車車、統(tǒng)計資料料等等信息。問題在 于,在在有兩臺Weeb服務(wù)器和和多個 HTTTP連接的的情況下,用用戶流量會在在兩臺服務(wù)器器之間分配和和移動,服務(wù)務(wù)器很難知道道用戶是誰,并并對所有數(shù)據(jù)據(jù)進(jìn)行跟蹤,因因為每個頁面面或者頁面的的組成部分都都可能來 自自不同的服務(wù)務(wù)器。在PHHP中,通常常是這樣解決決的,在第一一次連接或登登錄的時候就就創(chuàng)建一個會會話ID并將將其放在Coookie中中,然后這個個Cookiie會和每個個 HTTPP請求一起發(fā)發(fā)送。這樣做帶來一個個問題,接下下來每段PHHP腳本 都都需要基于IID來查找會會話數(shù)據(jù)。由由于PHP無無法在執(zhí)行過過程之間保

49、持持狀態(tài)(這與與Java不不同),這個個會話數(shù)據(jù)需需要存儲在某某個地方,通通常是在數(shù)據(jù)據(jù)庫中。但是是, 如果復(fù)復(fù)雜的頁面需需要在每個頁頁面載入過程程中對其進(jìn)行行十次查找(這這是經(jīng)常要做做的),那就就意味著每個個頁面都要執(zhí)執(zhí)行10次SSQL查詢,這這會導(dǎo)致數(shù)據(jù)據(jù)庫上很大的的負(fù) 載。在前面所舉的中中國 Intternett用戶 0.01%的例例子中,可能能很容易在每每秒內(nèi)僅僅為為了管理會話話就生成上百百個查詢。解解決方法是一一直使用位于于Cookiie中的會話話ID,并且且使用像 MMemcacched之類類的服務(wù)來緩緩存會話數(shù)據(jù)據(jù)以獲得高性性能。還要注 意其中中存在安全性性的問題,因因為黑客可

50、以偽造另一一個用戶的會會話ID,這這是很容易找找到或看到的的,特別是在在公用的Wii-Fi中。解解決方法是對對會話ID進(jìn)進(jìn)行恰當(dāng)?shù)募蛹用芑蛘吆灻⑵渑c與時間區(qū)間、 IP地址以以及其他關(guān)鍵鍵信息 像瀏瀏覽器或者其其他細(xì)節(jié)相綁綁定。在Innterneet上有很多多不錯的關(guān)于于良好的會話話管理的例子子,你可以根根據(jù)需要找到到最適合的??偸且紤]安全全性盡管編寫寫像防止SQQL注入和登登錄安全之類類的 代碼涉涉及很多安全全問題,但不不幸的是,幾幾乎沒有人考考慮過安全性性,而那些考考慮到的人也也沒有對其進(jìn)進(jìn)行很好地理理解。而本文文要關(guān)注的是是操作性的系系統(tǒng)安全。對對于這類安 全,我們的的焦點(diǎn)集中在

51、在三個安全領(lǐng)領(lǐng)域:防火墻墻、運(yùn)行的用用戶以及文件件訪問權(quán)限。除了配置專門的的硬件防火墻墻(像Cissco的 AASA)之外外,所有服務(wù)務(wù)器都還應(yīng)該該運(yùn)行像Ipptablees之類的防防火墻,它會會保護(hù)服務(wù)器器免受其他威威脅和攻擊。這這些威脅和攻攻擊可能來自自公共的 IInternnet、其他他服務(wù)器或本本地服務(wù)器,也也包括使用VVPN或者SSSH通道的的開發(fā)和操作作人員。我們們僅對指定的的IP開放確確實需要的端端口。Ipttabless 可能會很很復(fù)雜,但是是有很多不錯錯的模板,我我們通??梢砸允褂盟鼈儊韥韼椭蛻魟?chuàng)創(chuàng)建Iptaables。例例如,默認(rèn)的的RedHaat或者CeentOS防防火

52、墻的配置置說明 只有有10行,顯顯然并不實用用。我們最佳佳實踐的Ipptablees配置大概概有5頁,這這其中包含了了Linuxx所能提供的的最高級的安安全防范。所有公用的服務(wù)務(wù),都應(yīng)該運(yùn)運(yùn)行在專門的的用戶 下,如如Apachhe。切記永永遠(yuǎn)都不要使使用Roott用戶運(yùn)行,因因為這會讓任任何闖入到AApachee的用戶接管管整個服務(wù)器器。如果Appache只只是運(yùn)行在 Apachhe用戶下或或者運(yùn)行在NNobodyy下,那么闖闖入Apacche就不是是一件容易的的事情了。Web服務(wù)器運(yùn)運(yùn)行或者服務(wù)務(wù)的文件 (像像.php和和.htmll文件)對于于Web服務(wù)務(wù)器的用戶應(yīng)應(yīng)該是不可寫寫的。這意味

53、味著Apacche或者NNginx用用戶不應(yīng)該擁擁有Web目目錄的寫權(quán)限限。有很多方方 法都可以以做到這一點(diǎn)點(diǎn),而最簡單單的就是將這這些文件為其其他用戶所有有,然后讓AApachee/Nginnx等用戶歸歸屬于能夠使使用640權(quán)權(quán)限讀取文件件的組中。這這會防范 幾幾乎所有的黑黑客和針對頁頁面的攻擊。此 外,永遠(yuǎn)不不要使用Fttp來上傳文文件,特別 是在公用的的Wi-Fii環(huán)境中,因因為在其中黑黑客很容易盜盜取用戶名和和密碼。取而而代之的是使使用Sftpp會更加安全全。另外,每每個雇員都應(yīng)應(yīng)該擁有自己己的用戶IDD和隨 機(jī)密密碼。使用標(biāo)準(zhǔn)的路徑徑和安裝配置置一個令人討厭的的部署問題是是,開發(fā)者很

54、很少考慮 他他們的軟件會會被部署到生生產(chǎn)Web服服務(wù)器的什么么位置,以及及如何部署。我我們看到過許許多大型的系系統(tǒng)將它們的的PHP代碼碼部署在/hhome/xxiaofeeng或者 /web/code路路徑下。事實實上,這兩個個路徑都是非非常不標(biāo)準(zhǔn)的的,并且會帶帶來操作和安安全性的問題題。當(dāng)這些系系統(tǒng)從開發(fā)環(huán)環(huán)境轉(zhuǎn)移到測測試環(huán)境再到到生產(chǎn)環(huán)境中中時, 因為為每個安裝配配置都是非標(biāo)標(biāo)準(zhǔn)的,所以以經(jīng)常會出現(xiàn)現(xiàn)問題,這時時就需要開發(fā)發(fā)者調(diào)整才能能夠正常工作作。你應(yīng)該總是使用用標(biāo)準(zhǔn)的安裝裝包和二進(jìn)制制文件來 安安裝像Apaache之類類的服務(wù)器。不不要從源代碼碼編譯或者安安裝Tarbball,因因為這

55、會導(dǎo)致致長期穩(wěn)定性性和管理上的的問題,另外外在服務(wù)器上上安裝多個不不同的版本也也 會造成混混淆。Web 站點(diǎn)應(yīng)應(yīng)該總是在指指定的平臺和和 Linuux發(fā)布的標(biāo)標(biāo)準(zhǔn)路徑下進(jìn)進(jìn)行測試和部部署 ,像 RedHaat 或者CCentOSS下的/vaar/wwww/htmll路徑。這有有助于對系統(tǒng)統(tǒng)進(jìn)行有效的的權(quán)限管 理理、備份、配配置、監(jiān)控以以及其他操作作。Web 服務(wù)器器的日志應(yīng)該該存放在/vvar /llogs或者者/var/logs/app_nname下,而而不應(yīng)該位于于主代碼區(qū)域域。這樣做的的原因不僅僅僅是因為這些些標(biāo)準(zhǔn)的路徑徑很重要,更更應(yīng)該關(guān)注的的是,恰當(dāng) 地配置服務(wù)務(wù)器會將/vvar配置

56、為為分離的文件件系統(tǒng)。如果果應(yīng)用程序突突然寫入了大大量日志并占占用所有磁盤盤空間,由于于我們做了以以上的配置就就不會導(dǎo)致系系統(tǒng)崩潰,或或者其 他嚴(yán)嚴(yán)重的問題。如如果日志位于于其他位置,就就可能會產(chǎn)生生問題??偸鞘褂萌罩驹赪eb系統(tǒng)中中做多少日志志都不為過。所所有系 統(tǒng)都都應(yīng)該將重要要的數(shù)據(jù)寫入入到日志中,不不管是它們自自己的日志還還是系統(tǒng)的SSyslogg。Cronn的Job以以及其他Shhell腳本本或者C語言言的程序,對對日志都有 相應(yīng)標(biāo)準(zhǔn)以以及簡單的函函數(shù)。在Shhell腳本本中,只需要要使用 Loogger命命令就可以實實現(xiàn)日志的寫寫入。在腳本本啟動/停止止、重要的腳腳本執(zhí)行以及及實時

57、數(shù)據(jù)產(chǎn)產(chǎn)生的 情況況下都要執(zhí)行行寫入日志操操作。這樣出出現(xiàn)問題的時時候,查看主主要的系統(tǒng)日日志就可以很很容易地看到到發(fā)生了什么么。大型系統(tǒng)經(jīng)常會會使用專門的的工具如 LLocal55來記錄日志志,并配置SSyslogg或者Sysslog-nng來將其存存放在單獨(dú)的的文件中,這這樣會更容易易使用。需要要注意的是,SSyslogg工具和 LLoggerr(以及任何何Sysloog調(diào)用)默默認(rèn)優(yōu)先使用用user.noticce,如有必必要,你可以以對其進(jìn)行調(diào)調(diào)整。一個好的系統(tǒng)會會對程序進(jìn)行行配置,用來來打開或 者者關(guān)閉日志,并并可以選擇在在每模塊或者者功能的級別別上應(yīng)用不同同級別的日志志。這使得我我

58、們可以記錄錄非常詳細(xì)和和強(qiáng)大的日志志,用來分析析和調(diào)試在生生產(chǎn)操作中所所發(fā)生的問 題。大型高性能網(wǎng)站站的十項規(guī)則則 使用良好的數(shù)據(jù)據(jù)庫設(shè)計和SSQL在任何系統(tǒng)中,數(shù)數(shù)據(jù)庫通常是是最大的性能能瓶 頸。而而影響數(shù)據(jù)庫庫性能的最大大兩個問題是是數(shù)據(jù)庫設(shè)計計和SQL代代碼質(zhì)量。很很多系統(tǒng)都擁擁有良好的或或者至少是可可用的數(shù)據(jù)庫庫設(shè)計,但由由于沒有經(jīng)過過適當(dāng)?shù)男阅苣軠y 試,SSQL代碼質(zhì)質(zhì)量通常都會會很差。這樣樣的SQL代代碼在開發(fā)環(huán)環(huán)境中可能運(yùn)運(yùn)行很快,因因為其中只有有小數(shù)據(jù)集和和最小的負(fù)載載。但是當(dāng)成成千上萬的用用戶同時讀取取數(shù)據(jù)庫中 上百萬條記記錄的時候,它它就很可能會會崩潰。不幸的 是,這這些問

59、題一開開始并不明顯顯,直到系 統(tǒng)增大、突突然開始崩潰潰的時候才會會顯現(xiàn)出來。在在增大的過程程中,數(shù)據(jù)庫庫系統(tǒng)看起來來運(yùn)行得很快快(因為數(shù)據(jù)據(jù)都位于內(nèi)存存中,而且很很少有并發(fā)的的查詢),并并且對用戶的的響 應(yīng)也很很快,但實際際上它的內(nèi)部部運(yùn)行效率很很低。這并不不重要,我們們關(guān)注的是在在系統(tǒng)增大并并遇到性能問問題之前找到到這些問題并并加以解決。關(guān)于這個問題有有很多不錯的的書和站點(diǎn)進(jìn)進(jìn)行了解 析析,其中的關(guān)關(guān)鍵工具包括括慢查詢?nèi)罩局?、INNOODB狀態(tài)系系統(tǒng),以及描描述當(dāng)前性能能的MySQQL統(tǒng)計信息息。我們見到到過很多系統(tǒng)統(tǒng)每秒會讀取取500,0000條數(shù)據(jù)據(jù), 這是出出現(xiàn)SQL問問題的明顯預(yù)預(yù)兆,但公司司往往對其一一無所知直到到服務(wù)器開始始崩潰。MySQL系統(tǒng)統(tǒng)應(yīng)該對所有有數(shù)據(jù)使用 INNODDB存儲引擎擎,因為INN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論