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

:D
※ ※ ※ 本文純屬【赤道雪人】個(gè)人意見(jiàn),與【鋼之家鋼鐵博客】立場(chǎng)無(wú)關(guān).※ ※ ※
該日志尚無(wú)評(píng)論! |


該日志尚無(wú)評(píng)論!



