淺談Squid在圖片存儲(chǔ)架構(gòu)中的應(yīng)用
將近快一個(gè)月沒寫文章了,太懶散了,今天振作了一下,寫了篇關(guān)于Squid的文章,Squid作為分布式代理緩存服務(wù)器真的非常的棒,希望本文對(duì)你有幫助。
版權(quán)聲明:非商業(yè)自由轉(zhuǎn)載,保留原文內(nèi)容完整性,并署名作者王國(guó)峰和原文鏈接
前言
上一篇我表明了自己對(duì)緩存的立場(chǎng):緩存一切可以緩存的資源。并討論了如何利用IIS自身的緩存功能來輕松滿足中小規(guī)模的圖片緩存需求。關(guān)于IIS的客戶端緩存和服務(wù)器端緩存的介紹大家可以回顧這篇文章。自從上一篇文章發(fā)表后,有不少朋友向我反饋:用IIS自身的緩存功能負(fù)載有限,建議使用Varnish或Squid。是的,我非常同意,所以我今天就和大家來探討一下分布式代理緩存服務(wù)器Squid在圖片存儲(chǔ)架構(gòu)中的應(yīng)用,文中的一些觀點(diǎn),如有錯(cuò)誤,敬請(qǐng)指出,謝謝。
Squid簡(jiǎn)介
Squid是一款高性能分布式代理緩存服務(wù)器,它一般用來做前置Web Cache,加快用戶訪問Web的速度。為了說明其運(yùn)行過程,我將仍舊沿用我前一篇的YD風(fēng)格,再一次請(qǐng)出人見人愛、花見花開、車見爆胎的空空老師,請(qǐng)讀者自覺送出掌聲:
Squid君是時(shí)下***的空空作品代理人,為了讓所有空空迷能更快捷地欣賞到高質(zhì)量的空空作品,Squid君天天加班加點(diǎn),整理和保存空空的***作品,并對(duì)其作進(jìn)一步的優(yōu)化處理,比如去碼。 有一天,我無聊至極,便打電話給Squid君,向他要***的空空寫真圖(向Squid發(fā)出下載請(qǐng)求); Squid君仔細(xì)辨別了一下我的聲音,發(fā)現(xiàn)是老朋友,于是便答應(yīng)了我的請(qǐng)求(Squid中的ACL訪問控制,只接受合法的請(qǐng)求); Squid君對(duì)我說他手頭剛好有一周前的空空寫真,問我看過沒有,我說發(fā)過來看看唄,于是他很快發(fā)給了我(Squid緩存命中,下載極快,哦耶?。?; 我收到寫真圖,發(fā)現(xiàn)是兩天前已經(jīng)看過了的,于是告訴Squid君要***的,Squid君看了看庫存,發(fā)現(xiàn)手頭沒有***的了,于是就說讓我等一會(huì)兒,他去問問其他的代理兄弟有沒有,我說好的,謝謝(Squid支持分布式集群方式,各個(gè)父子節(jié)點(diǎn)、兄弟節(jié)點(diǎn)之間的緩存數(shù)據(jù)可以互相同步); 結(jié)果空歡喜一場(chǎng),他回來和我說其他兄弟也沒有,當(dāng)我非常失落的時(shí)候,他突然說空空今天來杭州,他可以直接向空空要寫真,我一開心就對(duì)他說,快去快去(當(dāng)Squid緩存不命中時(shí),只能從源服務(wù)器獲取數(shù)據(jù)); 過了好久,Squid君回來了,他說見空空的人實(shí)在太多了,排了好久的隊(duì)才拿到她***的寫真圖呢,我謝過之后他就把寫真很快地發(fā)給了我。之后他說他一定要把這個(gè)寫真保存起來,以便提供給其他空空迷和其他兄弟代理(Squid會(huì)把從源服務(wù)器獲取的數(shù)據(jù)保存到自己的緩存中,如果下一個(gè)用戶提出同樣的下載請(qǐng)求,Squid直接把緩存中的數(shù)據(jù)給用戶,當(dāng)然也可以把數(shù)據(jù)奉送給其他兄弟代理,獨(dú)樂樂不如眾樂樂)。 |
- #http_port指令告訴squid在哪個(gè)端口偵聽HTTP請(qǐng)求。默認(rèn)端口是3128,除下面的形式外,也可以是http_port 192.168.63.50:3128
- http_port 3128
- icp_port 3130
- #緩存目錄的設(shè)置,可以設(shè)置多個(gè)緩存目錄,語法為:<cache_dir> <aufs|ufs> <目錄所在> <MBytes大小> <dir1> <dir2>
- cache_dir ufs /var/spool/squid 1000 64 1024
- #下面是關(guān)于日志文件的放置目錄與文件名!
- cache_access_log /var/log/squid/access.log
- cache_log /var/log/squid/cache.log
- cache_store_log /var/log/squid/store.log
- pid_filename /var/run/squid.pid
- #關(guān)閉認(rèn)證機(jī)制,有些版本的 squid 會(huì)自動(dòng)的加入代理認(rèn)證機(jī)制,而普通情況下是不需要的,故找到包括auth_param的行,給它們加上注釋
- #auth_param basic children 5
- #auth_param basic realm Squid proxy-caching web server
- #auth_param basic credentialsttl 2 hours
- #設(shè)置squid用戶及用戶組、管理員賬號(hào)
- cache_effective_user squid
- cache_effective_group squid
- cache_mgr youraccount@your.e.mail
- # 與內(nèi)存有關(guān)的配置:因?yàn)槲业南到y(tǒng)內(nèi)存很小,所以只給 8 MB!如果您的物理內(nèi)存很大的情況下,例如 512 MB,可以考慮加大到 64 或 128 MB。
- cache_mem 128 MB
- # 與磁盤容量有關(guān)的配置(注:下列的 90 與 95 是百分比 ),如果您的 cache_dir 所在磁盤很大時(shí),可以考慮將 4096 改成 32768 KB
- cache_swap_low 90
- cache_swap_high 95
- maximum_object_size 4096 KB
- # 與內(nèi)存保存資料有關(guān)的配置
- maximum_object_size_in_memory 8 KB
- #定義acl(訪問控制列表), 語法為:acl<acl> <acl名稱> <acl類型> <配置的內(nèi)容>
- #黑體為用戶自定義部分
- acl All src 0/0
- acl Manager proto cache_object
- acl Localhost src 127.0.0.1/32
- acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
- acl SSL_ports 443 563
- acl CONNECT method CONNECT
- acl MyNetwork src 192.168.0.0/16
- #利用前面定義的acl,定義訪問控制規(guī)則
- http_access allow Manager Localhost
- http_access deny Manager
- http_access deny !Safe_ports
- http_access deny CONNECT !SSL_ports
- http_access allow MyNetwork
- http_access deny All
- #定義與其它代理服務(wù)器的關(guān)系,語法: <cache_peer> <主機(jī)名稱> <類別> <http_port> <icp_port> <其它參數(shù)>
- cache_peer 192.168.60.6 parent 4480 7 no-query default
- #設(shè)置與其它代理服務(wù)器的關(guān)系:
- # <cache_peer_access> <上層 Proxy > <allow|deny> <acl名稱>
- #cache_peer_access 192.168.60.6 allow aclxxx
- #cache_peer_access 192.168.60.6 deny !aclxxx
- coredump_dir /var/spool/squid
到這里,我相信你已經(jīng)大概明白Squid的工作過程了吧,下面我就對(duì)Squid特點(diǎn)做一下簡(jiǎn)要概括:
- 開源,基于GNU通用公共許可證,意味著你可以在同等開源協(xié)議下使用和修改Squid。
- 支持多種協(xié)議,目前支持http、ftp、gopher、wais、ssl等網(wǎng)絡(luò)協(xié)議。
- 支持分布式集群,Squid使用TCP(HTTP)和UDP(ICP/HTCP)通訊來確定鄰居cache的狀態(tài)。
- 支持訪問控制,通過設(shè)置ACL和ARL來限制某些訪問。
Squid官方網(wǎng)站:http://www.squid-cache.org/
你可以在官網(wǎng)上下載Squid以及閱讀相關(guān)文檔,當(dāng)然接下來我也會(huì)用Chinese向大家介紹Squid的用法。
Squid配置詳細(xì)說明
下面是一份詳細(xì)的Squid的配置清單及其說明:
注意:以上的配置說明來自這里。
配置好以后,我們就可以啟動(dòng)squid了,啟動(dòng)的步驟如下:
1). 我們可以運(yùn)行下面的命令來檢查配置文件的正確性:
# squid -k parse
只有這一步正確你才可以進(jìn)行下一步的操作
2). 初始化cache目錄.即建立緩存目錄的存儲(chǔ)格式
只需在***次啟動(dòng)squid服務(wù)之前執(zhí)行(在初次運(yùn)行squid之前,或者無論何時(shí)你增加了新的cache_dir,你必須初始化cache目錄。)
# squid -z
cache目錄初始化可能花費(fèi)一些時(shí)間,依賴于cache目錄的大小和數(shù)量,以及磁盤驅(qū)動(dòng)器的速度。假如你想觀察這個(gè)過程,請(qǐng)使用-X選項(xiàng):
# squid -zX
3). 啟動(dòng)squid服務(wù)
# service squid start
假定squid安裝在/usr/local/squid目錄下,也可以
# /usr/local/squid/sbin/squid -sD
***,我推薦你去看看Squid權(quán)威指南,并希望你可以利用Squid成功搭建一個(gè)分布式圖片緩存系統(tǒng),Squid真的很棒!
原文鏈接:http://www.itivy.com/ivy/archive/2012/3/10/squid-usage.html