CDN網絡(二)之配置和優化CDN核心緩存軟件--squid


前言

squid是眾多CDN廠商使用的核心緩存軟件,都在已有的基礎上進行二次開發。在部署squid的時候,建議遵循下面的規范。

1. 使用大內存服務器

對於熱點文件,我們讓squid用內存緩存,這樣大大提高響應速度,訪問日志access_log中體現為TCP_MEM_HIT。我們一般都是64g內存以上的服務器。

2. 推薦每個磁盤單獨使用

對於僅次於熱門文件的文件,我們采用磁盤緩存,squid是基於磁盤緩存的,不需要把磁盤設置成RAID 10 or RAID 5之類的,通過cache_dir配置使用每個獨立磁盤進行 緩存以提高磁盤iops,配置參數如下:

cache_dir   ufs   /mnt/sdb1 8096 32 256
3. 禁用atime更新

使用noatime,nodiratime來掛載文件系統。這樣在讀取磁盤緩存的時候不會更新相應的inode訪問時間。在/etc/fstab中的配置指令如下:

/dev/sdb1  /data/cache1   ext3   noatime,nodiratime 0 0
4. 配置多實例

所謂多實例就是啟動多個squid進程。因為squid以單進程運行,對多CPU的架構支持不好,不能夠重復利用多CPU處理器,配置多實例的時候,需要注意的是配置文件的部分參數;
visible_hostname、unique_hostname、http_port、snmp_port、access_log、cache_log、pid_filename、cache_dir。以上參數必須不同。

5. 使用URL作為調度算法

在配置squid的時候,采用URL作為hash算法,優點如是增加緩存命中率,相同的URl會訪問到squid的同一台服務器或者同一個實例上。避免重復回源和重復緩存同樣的文件,提高緩存命中率。

6. 禁用緩存間的通信協議

緩存間的通信協議設計初衷就是為了架構緩存集群,盡量減少對源站的訪問。目前有以下緩存間通信協議和方法:ICP,HTCP,Cache Digest,wccp,wccp2。從實踐來看,緩存間通信協議會導致緩存響應的延時,同時不利於問題的排錯,因此建議關閉緩存通信協議。禁用的方式就是在編譯安裝squid的時候添加以下參數

--disable-icap-client --disable-wccp --disable-wccpv2 --disable-htcp --disable-ident-lookups --disable-auto-locale --enable-ltdl-convenience
7. 構建二級緩存

所謂的二級緩存就是在CDN邊緣節點回源的時候先往CDN的核心節點獲取內容,也就是這樣的架構: CDN邊緣squid ---> CDN核心squid ---> 源站 。 CDN核心squid就是邊緣squid的上一級緩存,一級和二級緩存節點之間不使用緩存通信協議,直接使用HTTP進行內容獲取后緩存。

8. 使用squid Manager 獲取運行狀態

squid manager 提供了對squid運行狀態的詳細信息展示通道,在配置文件配置后就可以使用該功能,配置參數如下:

acl manager proto cache_object   # 安裝好后默認配置就有。
cachemgr_passwd 123..aa config reconfigure shutdown
http_access allow manager localhost
http_access deny manager   # 運行狀態信息不緩存,默認配置就有。

配置完成后,重啟squid,在使用如下命令查看下squid信息
當前運行狀態

[root@localhost ~]# squidclient -h 127.0.0.1 -p 3128 mgr:info     #3128是squid 的默認端口
'''
Cache information for squid:      # 重點關注cache信息
	Hits as % of all requests:	5min: 0.0%, 60min: 0.0%
	Hits as % of bytes sent:	5min: -0.0%, 60min: -0.0%
	Memory hits as % of hit requests:	5min: 0.0%, 60min: 0.0%
	Disk hits as % of hit requests:	5min: 0.0%, 60min: 0.0%
	Storage Swap size:	0 KB
	Storage Swap capacity:	 0.0% used,  0.0% free
	Storage Mem size:	104 KB
	Storage Mem capacity:	 0.0% used, 100.0% free
	Mean Object Size:	0.00 KB
	Requests given to unlinkd:	0
'''

當前配置

[root@localhost ~]# squidclient -h 127.0.0.1 -p 3128 -w 123..aa mgr:config     #-w(小寫w)指明看squid配置中的manager密碼
9. 優化http range

Http range方法提供了允許客戶端只獲取某個靜態文件部分內容的能力,典型的Range請求的頭部信息如下:

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

上述頭部信息是說:客戶端想獲取http://file.ljf.info/test.rar 的文件從1024字節到2048字節的部分內容,這種請求方式在多線程下載器(如迅雷,快車),通過多線程分別獲取同一個URL的不同部分然后組合起來,可以提高下載速度。
在squid中,我們可以下面這個指令控制HTTP Range 請求的緩存:

range_offset_limit 

我在工作中,根據squid回源流量進行調整,在剛上線的一台squid服務器,一般設置為0,0表示所有都存。這樣的情況下根據服務器負載的網絡流量跑個幾天再調調這個參數。
個人建議配置以下經驗值以平衡Range請求和緩存整個文件之間效率問題。

range_offset_limit 3 MB

這樣的配置后,如果用戶請求的起始Range字節的在3MB以內,如果squid本地沒有緩存過這個文件,那么squid就會向后端請求整個文件,然后再進行緩存。如果Range起始范圍超過了3MB,那么squid也是用range向后端請求,此時文件不會被緩存。

如有問題請與本人聯系,18500777133@sina.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM