在網頁伺服器上要發生效能問題,機率相對是低的,因為處理網站靜態頁面內容的遞送,本身對CPU用量要求不高,做法上多半著重在記憶體空間的配置使用,以及磁碟I/O與網路I/O效能的考量。雖說靜態頁面在處理上十分單純,就網頁構成的元素也包括了網頁HTML文件內容、圖檔、CSS樣式表定義檔、JavaScript程式檔等。這些內容可再考慮以不同的實體主機或服務個體來處理,個別進行優化的調整。

實務上常見的做法,是將網站系統中的圖檔集中在某些特定主機中,單純只提供圖檔下載,並具備與主站不同的網域名稱。以較輕量級規格的網頁伺服器(常見像是Lighttpd、Ngnix等)來建置,並將其上運作的網頁服務的載入模組精簡到最少,並將記錄(logging)機制予以關閉,節省花費在檔案I/O的時間以求效能最佳化。

將圖檔主機獨立於主站之外的另一個好處是,可以減少無謂cookie資料內容的傳輸。Cookie內容主要影響應用程式的資料判讀,若在請求圖片下載時也一併帶這些Cookie內容往返,只是徒占頻寬浪費傳輸時間,並無實質效益。

另外思考評估以導入Proxy Server的方式,其內容交換負載平衡(Content Switch)的功能,可以依照請求內容的不同(像是針對URI的不同,或是請求網址MIME型別的差異),而將請求分派到預先被設定的伺服器,以期將專有內容以特定伺服器提供服務,更能有效依不同性質的服務內容進行分級化。HAProxy、LVS(Linux Virtual Server),都是不錯的選擇。

網頁伺服器本身的調校

網頁伺服器安裝完畢後,必須再針對網站特性來進行參數調校及配置,以便將系統資源有效發揮。可以搭配常見的工具(像是Firebug、YSlow等)即可觀察出效能瓶頸在哪。不要在未進行任何設定,直接以預設值導入正式環境,若網站是對外開放服務,則如同一顆不定時炸彈,無法有效將效能發揮到最佳。以下,是在實務建置網頁伺服器時所需要留意的部分:

● 將作業系統面不必要的其他服務予以關閉,像是列印服務、FTP服務、SMTP發信服務等,若你的網頁伺服器只負責網頁內容的回應,就讓它的工作單純化吧!

● 目前常見的一些網頁伺服器軟體,為讓使用者方便運用,安裝完畢後會預掛一堆模組,不僅浪費記憶體空間,也會影響網頁服務的啟動時間長短。不必要的,即移除不用,甚至將平臺核心重新編譯,可以節省不必要記憶體空間的占用,也可避免發生可能的資安問題。

● 網頁伺服器要能將用量發揮到極致,首要被著重的是同時可被服務所處理的最大HTTP請求數。利用設置網頁服務中的MaxChilds參數設定值,來決定可同時提供的HTTP連線數,相對可以提升整個網站系統對外的同時處理請求量。然而這個參數值合適的設定值,則與該伺服器所配置的記憶體容量,息息相關。一般而言建議單純處理靜態頁面網頁主機,一個Process約抓3MB左右的記憶體用量,而若主要處理動態頁面(像是PHP程式),則一個Process約抓15MB左右,再反除,以得出合適的MaxChilds數字。

● 考慮啟動網頁伺服器上的快取機制(像是Apache的mod_proxy模組),這部分也是占用記憶體資源,但所強調的精神在於,有效利用記憶體空間處理重複被請求的網頁內容,以快取的高命中率(Cache Hit Ratio)來換取較快的回應速度。當然,若在你的網站架構中,已安排代理伺服器專屬主機,這部分的機制就不見得那麼重要。

● Keep Alive機制的啟用,視網站特性而定,目前幾乎大多數的網站都會利用。配合Keep Alive Timeout時間的設定,來有效節省用戶端瀏覽器與伺服器間建立HTTP連線的時間。

● MPM(Multi-Processing Modules)模式的選擇,是善用CPU資源的做法,現今伺服器硬體規格支援多核心處理器架構,網頁伺服器軟體也能搭配適當的模式來運作,發揮更佳的效能表現。

網站伺服器平臺軟體的選擇

網頁伺服器平臺軟體本身也是決定效能表現的因素之一,不同的產品都會有自身先天技術上的限制,而產品的更換有時也是一種提升效能的做法。目前坊間常見的網頁伺服器平臺,像是Apache HTTP Server、Ngnix、Lighttpd、LiteSpeed、Microsoft IIS等。

若以單純處理靜態網頁內容的需求而言,輕量級的Ngnix近年來的市占率不斷提升,根據2010年12月Netcraft的統計數據顯示,Ngnix已居排名第三位,僅次於Apache HTTP Server及Microsoft IIS;亦有不少的評量報告顯示,其效能上的表現較Apache及其他產品為佳,亦是可以考慮的建置選項之一。

其他節省系統資源的參考作法

針對網路傳輸時間的縮減,我們可透過壓縮網頁內容的方式來達成,尤其是文字內容的檔案,壓縮比十分可觀。像是Apache利用mod_deflate、mod_gzip模組,將壓縮省下的空間來換取傳輸時間,當然這裡需要付出額外的CPU系統資源來滿足這樣的需求,必須考量現有系統使用狀況是否合適引用。

雖然網頁伺服器的CPU用量不高,但當網站提供HTTPS傳輸及支援GZIP方式時,必須對傳輸內容進行加密及壓縮,也就會用到CPU資源。若就主機資源配置而言,常見的做法是將需要進行HTTPS傳輸的網頁內容,以另一個網域名稱來處理,並可配置運算效能較佳的主機來提供服務。像是網站會員登入頁面,或是購物結帳流程的所有頁面,不少大型網站都以獨立網域來處理。

而GZIP機制的開啟更直接影響到網頁伺服器的CPU用量,若網頁伺服器本身的CPU負載量不高,建議善用此機制。例如伺服器自身透過監控系統資源,來決定此機制的運用時機,或是僅啟用特定處理文字內容檔案的主機即可。

適時發揮網頁伺服器的角色

網頁伺服器服務必須與應用伺服器相輔相成。從筆者在實務上的觀察,目前仍有多數企業直接使用應用伺服器的網頁服務功能,像是直接將靜態頁面內容以Tomcat server提供回應,並未將網頁服務獨立出來。讓應用伺服器專心做好商業邏輯處理的角色,而利用網頁伺服器來處理靜態內容請求的流量,是較妥善的規畫,在突發性流量來臨時,才不致於直接衝擊到應用伺服器。

以購物網站為例,促銷活動一般都會以靜態活動網頁的方式來設定;若活動規模大時,更是設計多頁,讓訪客因站外廣告或電子報連入時,其點擊先「登陸」在這些靜態頁面上,在他們真正有興趣時,才點到實際的商品賣場頁面進一步瀏覽,如此,可以過濾掉一些因為好奇來閒逛的流量,去直接造成應用伺服器的負荷,有效將流量直接衝擊的影響減低。

專欄作者

熱門新聞

Advertisement