官术网_书友最值得收藏!

最佳實(shí)踐10:配置和優(yōu)化Squid

Squid是對(duì)HTTP協(xié)議遵從性最好的緩存軟件,因此它在CDN中得到了大量的部署,是眾多CDN公司使用到的核心緩存軟件。在部署Squid時(shí),建議遵從以下的規(guī)范。

推薦使用大內(nèi)存服務(wù)器

對(duì)于熱點(diǎn)文件,Squid使用內(nèi)存進(jìn)行緩存,在access_log中體現(xiàn)為T(mén)CP_MEM_HIT。因?yàn)槭褂昧烁咚賰?nèi)存緩存機(jī)制,從而避免了從磁盤(pán)讀入緩存內(nèi)容,所以TCP_MEM_HIT是最高效的緩存方法。服務(wù)器所需要的內(nèi)存,以能夠完全容納本站點(diǎn)的所有熱點(diǎn)文件為標(biāo)準(zhǔn)。

推薦每個(gè)磁盤(pán)獨(dú)立使用

對(duì)于過(guò)大的文件或者非經(jīng)常訪問(wèn)的文件,Squid使用基于磁盤(pán)的緩存。在創(chuàng)建磁盤(pán)緩存時(shí),不需要將磁盤(pán)組配置成RAID 10或者RAID 5、RAID 6,通過(guò)cache_dir配置直接使用每個(gè)獨(dú)立磁盤(pán)進(jìn)行緩存以提高磁盤(pán)iops。配置指令如下:

cache_dir ufs /mnt/sdb1 8096 32 256
cache_dir ufs /mnt/sdc1 8096 32 256
cache_dir ufs /mnt/sdd1 8096 32 256
cache_dir ufs /mnt/sde1 8096 32 256

禁用atime更新

使用noatime選項(xiàng)來(lái)mount的文件系統(tǒng),不會(huì)在讀取磁盤(pán)緩存時(shí)更新相應(yīng)的inode訪問(wèn)時(shí)間。在/etc/fstab中的配置指令如下:

/dev/sdb1 /mnt/sdb1 ext3 noatime,nodiratime 0 0

配置Squid多實(shí)例

Squid以單進(jìn)程運(yùn)行,對(duì)多CPU的架構(gòu)支持不好,不能重復(fù)利用多CPU處理器代理的高性能。解決這個(gè)問(wèn)題的思路是在部署Squid的服務(wù)器上,部署Squid多個(gè)實(shí)例進(jìn)程。在部署多個(gè)實(shí)例時(shí),需要注意每個(gè)Squid實(shí)例的以下配置項(xiàng)目必須不同:visible_hostname、unique_hostname、http_port、snmp_port、access_log、cache_log、pid_filename、cache_dir。

使用URL哈希方法對(duì)Squid多實(shí)例進(jìn)行調(diào)度

參考圖2-2所示的CDN節(jié)點(diǎn)的典型架構(gòu)圖,對(duì)Squid多實(shí)例進(jìn)行負(fù)載均衡時(shí),務(wù)必使用URL哈希方法。采用這個(gè)方法的好處如下。

·增加緩存命中率。相同的URL訪問(wèn)到同一個(gè)Squid實(shí)例上,可以提高Squid緩存命中率。

·避免Squid上緩存文件的重復(fù)。使用URL哈希后,不同的Squid上緩存不同的文件,因此可以大大節(jié)省Squid磁盤(pán)緩存空間和內(nèi)存緩存空間。

禁用緩存間通信協(xié)議

緩存間通信協(xié)議的設(shè)計(jì)初衷是為了架構(gòu)緩存集群,盡量減少對(duì)源站的訪問(wèn)。目前主要有以下緩存間通信協(xié)議和方法:ICP、HTCP、Cache Digest、WCCP、WCCP2。從實(shí)踐來(lái)看,緩存間通信協(xié)議會(huì)導(dǎo)致緩存響應(yīng)的延時(shí),同時(shí)不利于問(wèn)題的排查。因此,建議所有的Squid實(shí)例都單獨(dú)提供緩存服務(wù),不進(jìn)行緩存間協(xié)議通信。禁用的方式是在編譯時(shí)加入以下指令:

configure options:  '--prefix=/usr/local/squid' '--disable-icap-client' '--disable-wccp' '--disable-wccpv2' '--disable-htcp' '--disable-ident-lookups'  '--disable-auto-locale' --enable-ltdl-convenience

架構(gòu)二級(jí)緩存

在實(shí)踐中,往往會(huì)部署二級(jí)緩存節(jié)點(diǎn)以減少回源站的流量。一級(jí)緩存節(jié)點(diǎn)是指最邊緣的緩存節(jié)點(diǎn),是直接服務(wù)于終端用戶(hù)的節(jié)點(diǎn)。二級(jí)緩存節(jié)點(diǎn),在架構(gòu)上實(shí)際上被一級(jí)緩存節(jié)點(diǎn)認(rèn)為是源站,而不是緩存節(jié)點(diǎn)。一級(jí)緩存節(jié)點(diǎn)和二級(jí)緩存節(jié)點(diǎn)之間,并不使用緩存間通信協(xié)議,而是直接使用HTTP進(jìn)行內(nèi)容獲取或者緩存內(nèi)容驗(yàn)證。可以使用如下配置指令:

cache_peer 10.1.6.38 parent 80 0 no-query originserver round-robin no-digest no-netdb-exchange name=server_xufeng_info
acl sites_xufeng_info dstdomain .xufeng.info
cache_peer_access server_xufeng_info allow sites_xufeng_info

使用Squid Manager獲取運(yùn)行狀態(tài)

Squid Manager提供了對(duì)Squid運(yùn)行進(jìn)程狀態(tài)的詳細(xì)信息展示通道,在配置文件中使用如下指令配置后,即可使用該功能:

acl manager proto cache_object
cachemgr_passwd 6ByhK4fx config reconfigure shutdown
http_access allow manager localhost
http_access deny manager

主要使用的命令包括以下兩類(lèi)。

·查看Squid運(yùn)行狀態(tài)的命令:

# /usr/local/squid/bin/squidclient -h 127.0.0.1 -p 80 mgr:info
主要關(guān)注以下的輸出(命中率一般應(yīng)該高于80%):
Cache information for squid:
     Hits as % of all requests:     5min: 95.0%, 60min: 91.0% #請(qǐng)求命中率(按次數(shù)計(jì)算)
     Hits as % of bytes sent:     5min: 86.0%, 60min: 84.0% #請(qǐng)求命中率(按字節(jié)數(shù)計(jì)算)
     Memory hits as % of hit requests:     5min: 90.0%, 60min: 82.0% #內(nèi)存緩存命中率

·查看當(dāng)前Squid運(yùn)行的配置的命令:

# /usr/local/squid.bak/bin/squidclient -h 127.0.0.1 -p 80 -w 6ByhK4fx mgr:config #使用-w(小寫(xiě))指定在Squid中配置的Manager密碼

優(yōu)化HTTP Range

HTTP Range方法提供了允許客戶(hù)端只獲取某個(gè)靜態(tài)文件部分內(nèi)容的能力。典型的Range請(qǐng)求的頭部信息(部分)如下:

GET /test.rar HTTP/1.1
Connection: close
Host: file.xufeng.info
Range: bytes=1025-2048

這個(gè)請(qǐng)求的含義是:客戶(hù)端希望讀取獲取http://file.xufeng.info/test.rar文件的從1025字節(jié)到2048字節(jié)的部分內(nèi)容。這種請(qǐng)求方式在多線程下載器(如迅雷、Flashget)中比較常見(jiàn),通過(guò)多個(gè)線程分別獲取同一個(gè)URL的不同部分然后組合起來(lái),可以提高下載速度。

在Squid中,以下指令用于控制對(duì)HTTP Range請(qǐng)求的緩存行為:

range_offset_limit

在實(shí)踐中,建議配置為以下值以平衡Range請(qǐng)求和緩存整個(gè)文件之間效率問(wèn)題:

range_offset_limit 3 MB

這樣配置后,如果用戶(hù)請(qǐng)求的起始Range字節(jié)在3MB以?xún)?nèi),如Squid本地沒(méi)有緩存過(guò)該文件,那么Squid會(huì)向后端請(qǐng)求整個(gè)文件,然后進(jìn)行緩存。如果Range的起始范圍超過(guò)3MB,則Squid也使用Range向后端請(qǐng)求,此時(shí)文件不會(huì)被緩存。

主站蜘蛛池模板: 绥滨县| 普安县| 宁阳县| 榕江县| 兴海县| 新余市| 汉沽区| 乌拉特后旗| 特克斯县| 德钦县| 大同市| 色达县| 郓城县| 利辛县| 恩施市| 会东县| 澜沧| 枣强县| 瓮安县| 龙海市| 科技| 察雅县| 安溪县| 广昌县| 山西省| 古蔺县| 二连浩特市| 宁远县| 卢龙县| 渝中区| 大石桥市| 兴宁市| 滨海县| 叶城县| 琼海市| 文山县| 曲沃县| 耿马| 佛冈县| 兴海县| 德化县|