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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

32、商商和產(chǎn)品可以以選擇,我個(gè)個(gè)人接觸過(guò)一一些解決方法法,其中有兩兩個(gè)架構(gòu)可以以給大家做參參考。硬件四層交換第四層交換使用用第三層和第第四層信息包包的報(bào)頭信息息,根據(jù)應(yīng)用用區(qū)間識(shí)別業(yè)業(yè)務(wù)流,將整整個(gè)區(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ù)類(lèi)型由終終端TCP或或UDP端口口地址來(lái)決定定,在第四層層交換中的應(yīng)應(yīng)用區(qū)間則由由源端和終端端IP地址、TTCP和U

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

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

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

36、。 大型動(dòng)態(tài)應(yīng)應(yīng)用系統(tǒng)平臺(tái)臺(tái)主要是針對(duì)對(duì)于大流量、高高并發(fā)網(wǎng)站建建立的底層系系統(tǒng)架構(gòu)。大大型網(wǎng)站的運(yùn)運(yùn)行需要一個(gè)個(gè)可靠、安全全、可擴(kuò)展、易易維護(hù)的應(yīng)用用系統(tǒng)平臺(tái)做做為支撐,以以保證網(wǎng)站應(yīng)應(yīng)用的平穩(wěn)運(yùn)運(yùn)行。大型動(dòng)態(tài)應(yīng)應(yīng)用系統(tǒng)又可可分為幾個(gè)子子系統(tǒng):1)Webb前端系統(tǒng)2)負(fù)載均均衡系統(tǒng)3)數(shù)據(jù)庫(kù)庫(kù)集群系統(tǒng)4)緩存系系統(tǒng)5)分布式式存儲(chǔ)系統(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)一一使用,每臺(tái)臺(tái)服務(wù)器都可可以對(duì)多個(gè)應(yīng)應(yīng)用提供服務(wù)務(wù),當(dāng)某些

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論