|
一 升級(jí)硬件 以上幾個(gè)都是可以通過(guò)升級(jí)硬件來(lái)解決或者改善的(使用更高等級(jí)的CPU,更快速和更大容量的內(nèi)存,配置硬件磁盤陣列并使用更多數(shù)量的高速SCSI硬盤),但這需要較大的投入。 二 優(yōu)化程序代碼 1、減少數(shù)據(jù)庫(kù)的壓力 優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu)和查詢語(yǔ)句,緩存查詢結(jié)果/建內(nèi)存表,建索引 2、減少Apache的壓力——減少HTTP的請(qǐng)求次數(shù) 背景圖片全部做成一張然后用CSS控制位置/不使用AJAX來(lái)進(jìn)行即時(shí)驗(yàn)證(不考慮客戶體驗(yàn)什么的,通過(guò)拖長(zhǎng)客戶時(shí)間來(lái)減輕服務(wù)器壓力) 3、減輕I/O壓力頁(yè)面局部緩存 三 架構(gòu)上去優(yōu)化 1.使用負(fù)載均衡技術(shù) 簡(jiǎn)單的提高硬件性能并不能真正解決這個(gè)問(wèn)題,因?yàn)閱闻_(tái)服務(wù)器的性能總是有限的,一般來(lái)講,一臺(tái)PC服務(wù)器所能提供的并發(fā)訪問(wèn)處理能力大約為1000個(gè),更為高檔的專用服務(wù)器能夠支持3000-5000個(gè)并發(fā)訪問(wèn),這樣的能力還是無(wú)法滿足負(fù)載較大的網(wǎng)站的要求。尤其是網(wǎng)絡(luò)請(qǐng)求具有突發(fā)性,當(dāng)某些重大事件發(fā)生時(shí),網(wǎng)絡(luò)訪問(wèn)就會(huì)急劇上升,從而造成網(wǎng)絡(luò)瓶頸,例如在網(wǎng)上發(fā)布的克林頓彈劾書就是很明顯的例子。必須采用多臺(tái)服務(wù)器提供網(wǎng)絡(luò)服務(wù),并將網(wǎng)絡(luò)請(qǐng)求分配給這些服務(wù)器分擔(dān), 才能提供處理大量并發(fā)服務(wù)的能力。 當(dāng)使用多臺(tái)服務(wù)器來(lái)分擔(dān)負(fù)載的時(shí)候,最簡(jiǎn)單的辦法是將不同的服務(wù)器用在不同的方面。按提供的內(nèi)容進(jìn)行分割時(shí),可以將一臺(tái)服務(wù)器用于提供新聞頁(yè)面,而另一臺(tái)用于提供游戲頁(yè)面;或者可以按服務(wù)器的功能進(jìn)行分割,將一臺(tái)服務(wù)器用于提供靜態(tài)頁(yè)面訪問(wèn),而另一些用于提供CGI等需要大量消耗資源的動(dòng)態(tài)頁(yè)面訪問(wèn)。然而由于網(wǎng)絡(luò)訪問(wèn)的突發(fā)性,使得很難確定那些頁(yè)面造成的負(fù)載太大,如果將服務(wù)的頁(yè)面分割的過(guò)細(xì)就會(huì)造成很大浪費(fèi)。事實(shí)上造成負(fù)載過(guò)大的頁(yè)面常常是在變化中的,如果要經(jīng)常按照負(fù)載變化來(lái)調(diào)整頁(yè)面所在的服務(wù)器,那么勢(shì)必對(duì)管理和維護(hù)造成極大的問(wèn)題。因此這種分割方法只能是大方向的調(diào)整 2.Lighttpd+Squid+Apache搭建高效率Web服務(wù)器 Apache通常是開源界的首選Web服務(wù)器,因?yàn)樗膹?qiáng)大和可靠,已經(jīng)具有了品牌效應(yīng),可以適用于絕大部分的應(yīng)用場(chǎng)合。但是它的強(qiáng)大有時(shí)候卻顯得笨重,配置文件得讓人望而生畏,高并發(fā)情況下效率不太高。而輕量級(jí)的Web服務(wù)器Lighttpd卻是后起之秀,其靜態(tài)文件的響應(yīng)能力遠(yuǎn)高于Apache,據(jù)說(shuō)是Apache的2-3倍。Lighttpd的高性能和易用性,足以打動(dòng)我們,在它能夠勝任的領(lǐng)域,盡量用它。Lighttpd對(duì)PHP的支持也很好,還可以通過(guò)Fastcgi方式支持其他的語(yǔ)言,比如Python。 持其他的語(yǔ)言,比如Python。 畢竟Lighttpd是輕量級(jí)的服務(wù)器,功能上不能跟Apache比,某些應(yīng)用無(wú)法勝任。比如Lighttpd還不支持緩存,而現(xiàn)在的絕大部分站點(diǎn)都是用程序生成動(dòng)態(tài)內(nèi)容,沒(méi)有緩存的話即使程序的效率再高也很難滿足大訪問(wèn)量的需求,而且讓程序不停的去做同一件事情也實(shí)在沒(méi)有意義。首先,Web程序是需要做緩存處理的,即把反復(fù)使用的數(shù)據(jù)做緩存。即使這樣也還不夠,單單是啟動(dòng)Web處理程序的代價(jià)就不少,緩存最后生成的靜態(tài)頁(yè)面是必不可少的。而做這個(gè)是 Squid的強(qiáng)項(xiàng),它本是做代理的,支持高效的緩存,可以用來(lái)給站點(diǎn)做反向代理加速。把Squid放在Apache或者Lighttpd的前端來(lái)緩存 Web服務(wù)器生成的動(dòng)態(tài)內(nèi)容,而Web應(yīng)用程序只需要適當(dāng)?shù)卦O(shè)置頁(yè)面實(shí)效時(shí)間即可。即使是大部分內(nèi)容動(dòng)態(tài)生成的網(wǎng)站,仍免不了會(huì)有一些靜態(tài)元素,比如圖片、JS腳本、CSS等等,將Squid放在Apache或者Lighttp前端后,反而會(huì)使性能下降,畢竟處理HTTP請(qǐng)求是Web服務(wù)器的強(qiáng)項(xiàng)。而且已經(jīng)存在于文件系統(tǒng)中的靜態(tài)內(nèi)容再在Squid中緩存一下,浪費(fèi)內(nèi)存和硬盤空間。因此可以考慮將Lighttpd再放在Squid的前面,構(gòu)成 Lighttpd+Squid+Apache的一條處理鏈,Lighttpd在最前面,專門用來(lái)處理靜態(tài)內(nèi)容的請(qǐng)求,把動(dòng)態(tài)內(nèi)容請(qǐng)求通過(guò)proxy模塊轉(zhuǎn)發(fā)給Squid,如果Squid中有該請(qǐng)求的內(nèi)容且沒(méi)有過(guò)期,則直接返回給Lighttpd。 新請(qǐng)求或者過(guò)期的頁(yè)面請(qǐng)求交由Apache中Web程序來(lái)處理。經(jīng)過(guò)Lighttpd和Squid的兩級(jí)過(guò)濾,Apache需要處理的請(qǐng)求將大大減少,減少了Web應(yīng)用程序的壓力。同時(shí)這樣的構(gòu)架,便于把不同的處理分散到多臺(tái)計(jì)算機(jī)上進(jìn)行,由Lighttpd在前面統(tǒng)一把關(guān)。 在這種架構(gòu)下,每一級(jí)都是可以進(jìn)行單獨(dú)優(yōu)化的,比如Lighttpd可以采用異步IO方式,Squid可以啟用內(nèi)存來(lái)緩存,Apache可以啟用MPM 等,并且每一級(jí)都可以使用多臺(tái)機(jī)器來(lái)均衡負(fù)載,伸縮性很好。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|