字體:
大
中
小 發(fā)表日期:2006-06-23 18:20 評論:0 點擊:3147
類似的題目網(wǎng)上已經(jīng)有很多了,為啥我還要寫這么一篇?其實是前段時間接手了一個 squid 優(yōu)化的事情,在網(wǎng)上搜索了一下,發(fā)現(xiàn)很多 squid 優(yōu)化只限于在 squid 參數(shù)和系統(tǒng)參數(shù)上面的調(diào)整。但是這個實在只是細(xì)枝末節(jié)的事情,只要不是太弱智的配置導(dǎo)致無法緩存,squid的性能不會有太大差距,也就提高10%左右,只有實際的業(yè)務(wù)針對 squid 進(jìn)行一些調(diào)整,squid 才會真正爆發(fā)出他的能量,很多時候有 100%-200% 的提升。
本文基本是一些方向性的指導(dǎo),并不涉及像具體配置文件的細(xì)節(jié),因此本文里面的內(nèi)容大部分不能往配置文件里面 copy-paste。。
首先要明確一下,squid 能夠用來作什么。很多人沒有搞明白 squid 的工作原理,只是聽說 squid 性能不錯可以用來給網(wǎng)站提速,就直接在自己的 website 前面套了一個 squid ,這基本沒有任何用處,即使你都是靜態(tài)頁面,后面apache上面沒有開 mod_expires,一樣緩存不了,squid只能起到一個連接管理的用處。
一般說來,網(wǎng)站用 squid 加速,目的有二
1: squid 本身具有緩存功能,可以將webserver輸出的內(nèi)容緩存起來,在緩存沒有過期之前來的訪問,都直接用緩存里面的內(nèi)容,這樣可以有效減少 webserver 機器上面的請求數(shù)量。這是 squid 的主要功用。
2: 網(wǎng)絡(luò)慢的用戶會長時間占用 webserver 的 TCP 連接,webserver 對每個連接占用的資源比較大,如果長時間不能釋放出來服務(wù)其他請求,性能會有比較大的影響。前面放一個 squid, webserver 就可以迅速處理完邏輯以后,把數(shù)據(jù)快速發(fā)送給 squid, 然后去處理別的邏輯,而 squid 每個 TCP 連接占用的資源很少,不用擔(dān)心占用太多資源。這個用途也叫做連接管理,有一些網(wǎng)絡(luò)設(shè)備也可以做這個事情,價格都很貴。
下面針對 squid 的兩種功用,來講述如何調(diào)整業(yè)務(wù)邏輯和 squid 參數(shù)
零:預(yù)操作
在搞 squid 之前,不管你用什么編譯配置,需要什么特殊選項,都請 –enable-snmp ,并配置好 mrtg 之類,可以圖形化的顯示 squid 狀態(tài),例如 Request Hit Ratio(RHR), Byte Hit Ratio(BHR), 等等,反饋是做一切事情的基礎(chǔ),優(yōu)化也不例外。
關(guān)于緩存
A: 使用 Expires header 來控制緩存
squid在緩存webserver內(nèi)容的時候,需要后端webserver輸出一些控制信息告訴他頁面是不是可以被緩存,以及可以緩存多久。否則 squid 是不會自作主張給你緩存內(nèi)容的。一個頁面到底能不能緩存,只有開發(fā)網(wǎng)站的人才知道,因此開發(fā)人員有責(zé)任在動態(tài)頁面里面輸出 Expires 和 Cache-Control header。簡單舉一個 php 的例子以說明這兩個 header 的值是什么含義,其中$expiretime 的單位是秒。
header(”Expires: ” . gmt_date_format(time()+$expiretime));
header(”Cache-Control: max-age=” . “$expiretime”);
對于靜態(tài)文件,有兩種方式來讓 squid 自動給靜態(tài)文件緩存,一種是使用 apache 的 mod_expires ,可以針對路徑或者針對文件類型/擴(kuò)展名來自動輸出 cache 頭。詳細(xì)的請參考 mod_expires 的說明 。另一種是用 squid 的 refresh_pattern 來指定。詳細(xì)的還是請參考 squid 的配置文件。一般來說,如果后端不是配置很麻煩,建議還是在后端做,前端的配置修改大多數(shù)都是違背http協(xié)議的,如果出現(xiàn)問題,也比較難排查。

:D