天天看點

網站的高并發高通路量優化一 更新硬體二 優化程式代碼三 架構上去優化

不管怎麼樣,先要找出瓶頸在哪:是CPU負荷太高(經常100%),還是記憶體不

夠用(大量使用虛拟記憶體),還是磁盤I/O性能跟不上(硬碟訓示燈狂閃)?

下面是一些解決方案:(裡面汲及到的一些技術如:負載均衡,資料庫的優化,緩存技術,架構的設計,環境的搭建一定要有意識的去學習)

一 更新硬體

以上幾個都是可以通過更新硬體來解決或者改善的(使用更高等級的CPU,更快速和更大容量的内

存,配置硬體磁盤陣列并使用更多數量的高速SCSI硬碟),但這需要較大的投入。

二 優化程式代碼

1、減少資料庫的壓力

   優化資料庫結構和查詢語句,緩存查詢結果/建記憶體表,建索引

    2、減少Apache的壓力——減少HTTP的請求次數

  背景圖檔全部做成一張然後用CSS控制位置/不使用AJAX來進行即時驗證(不考慮客戶體驗什麼的,

      通過拖長客戶時間來減輕伺服器壓力)

    3、減輕I/O壓力

  頁面局部緩存

三 架構上去優化

1.使用負載均衡技術

簡單的提高硬體性能并不能真正解決這個問題,因為單台伺服器的性能總是有限的,一般

來講,一台PC伺服器所能提供的并發通路處理能力大約為1000個,更為高檔的專用伺服器能

夠支援3000-5000個并發通路,這樣的能力還是無法滿足負載較大的網站的要求。尤其是網絡請

求具有突發性,當某些重大事件發生時,網絡通路就會急劇上升,進而造成網絡瓶頸,例如在

網上釋出的克林頓彈劾書就是很明顯的例子。必須采用多台伺服器提供網絡服務,并将網絡請求

配置設定給這些伺服器分擔, 才能提供處理大量并發服務的能力。

當使用多台伺服器來分擔負載的時候,最簡單的辦法是将不同的伺服器用在不同的方面。按

提供的内容進行分割時,可以将一台伺服器用于提供新聞頁面,而另一台用于提供遊戲頁面;

或者可以按伺服器的功能進行分割,将一台伺服器用于提供靜态頁面通路,而另一些用于提供

CGI等需要大量消耗資源的動态頁面通路。然而由于網絡通路的突發性,使得很難确定那些頁面

造成的負載太大,如果将服務的頁面分割的過細就會造成很大浪費。事實上造成負載過大的頁面

常常是在變化中的,如果要經常按照負載變化來調整頁面所在的伺服器,那麼勢必對管理和維

護造成極大的問題。是以這種分割方法隻能是大方向的調整

2.Lighttpd+Squid+Apache搭建高效率Web伺服器

      Apache通常是開源界的首選Web伺服器,因為它的強大和可靠,已經具有了品牌效應,可

以适用于絕大部分的應用場合。但是它的強大有時候卻顯得笨重,配置檔案得讓人望而生畏,

高并發情況下效率不太高。而輕量級的Web伺服器Lighttpd卻是後起之秀,其靜态檔案的響

應能力遠高于Apache,據說是Apache的2-3倍。Lighttpd的高性能和易用性,足以打動我們,

在它能夠勝任的領域,盡量用它。Lighttpd對PHP的支援也很好,還可以通過Fastcgi方式支

持其他的語言,比如Python。

畢竟Lighttpd是輕量級的伺服器,功能上不能跟Apache比,某些應用無法勝任。比如

Lighttpd還不支援緩存,而現在的絕大部分站點都是用程式生成動态内容,沒有緩存的話即

使程式的效率再高也很難滿足大通路量的需求,而且讓程式不停的去做同一件事情也實在沒

有意義。首先,Web程式是需要做緩存處理的,即把反複使用的資料做緩存。即使這樣也還不

夠,單單是啟動Web處理程式的代價就不少,緩存最後生成的靜态頁面是必不可少的。而做

這個是 Squid的強項,它本是做代理的,支援高效的緩存,可以用來給站點做反向代理加速。

把Squid放在Apache或者Lighttpd的前端來緩存 Web伺服器生成的動态内容,而Web應用

程式隻需要适當地設定頁面實效時間即可。

即使是大部分内容動态生成的網站,仍免不了會有一些靜态元素,比如圖檔、JS腳本、CSS等

等,将Squid放在Apache或者Lighttp前端後,反而會使性能下降,畢竟處理HTTP請求是

Web伺服器的強項。而且已經存在于檔案系統中的靜态内容再在Squid中緩存一下,浪費内

存和硬碟空間。是以可以考慮将Lighttpd再放在Squid的前面,構成 Lighttpd+Squid+Apache

的一條處理鍊,Lighttpd在最前面,專門用來處理靜态内容的請求,把動态内容請求通過

proxy子產品轉發給Squid,如果Squid中有該請求的内容且沒有過期,則直接傳回給Lighttpd。

新請求或者過期的頁面請求交由Apache中Web程式來處理。經過Lighttpd和Squid的兩級過

濾,Apache需要處理的請求将大大減少,減少了Web應用程式的壓力。同時這樣的構架,便

于把不同的處理分散到多台計算機上進行,由Lighttpd在前面統一把關。

在這種架構下,每一級都是可以進行單獨優化的,比如Lighttpd可以采用異步IO方式,

Squid可以啟用記憶體來緩存,Apache可以啟用MPM 等,并且每一級都可以使用多台機器來

均衡負載,伸縮性很好。

轉自:https://blog.csdn.net/guochunyang/article/details/6325653

繼續閱讀