淺談Squid在圖片存儲架構(gòu)中的應(yīng)用
從我的獨立博客中同步過來的,一起探討
將近快一個月沒寫文章了,太懶散了,今天振作了一下,寫了篇關(guān)于Squid的文章,Squid作為分布式代理緩存服務(wù)器真的非常的棒,希望本文對你有幫助。
版權(quán)聲明:非商業(yè)自由轉(zhuǎn)載,保留原文內(nèi)容完整性,并署名作者王國峰和原文鏈接
前言
上一篇我表明了自己對緩存的立場:緩存一切可以緩存的資源。并討論了如何利用IIS自身的緩存功能來輕松滿足中小規(guī)模的圖片緩存需求。關(guān)于IIS的客戶端緩存和服務(wù)器端緩存的介紹大家可以回顧這篇文章。自從上一篇文章發(fā)表后,有不少朋友向我反饋:用IIS自身的緩存功能負(fù)載有限,建議使用Varnish或Squid。是的,我非常同意,所以我今天就和大家來探討一下分布式代理緩存服務(wù)器Squid在圖片存儲架構(gòu)中的應(yīng)用,文中的一些觀點,如有錯誤,敬請指出,謝謝。
Squid簡介
Squid是一款高性能分布式代理緩存服務(wù)器,它一般用來做前置Web Cache,加快用戶訪問Web的速度。為了說明其運行過程,我將仍舊沿用我前一篇的YD風(fēng)格,再一次請出人見人愛、花見花開、車見爆胎的空空老師,請讀者自覺送出掌聲:
Squid君是時下最受歡迎的空空作品代理人,為了讓所有空空迷能更快捷地欣賞到高質(zhì)量的空空作品,Squid君天天加班加點,整理和保存空空的最新作品,并對其作進(jìn)一步的優(yōu)化處理,比如去碼。
有一天,我無聊至極,便打電話給Squid君,向他要最新的空空寫真圖(向Squid發(fā)出下載請求); Squid君仔細(xì)辨別了一下我的聲音,發(fā)現(xiàn)是老朋友,于是便答應(yīng)了我的請求(Squid中的ACL訪問控制,只接受合法的請求); Squid君對我說他手頭剛好有一周前的空空寫真,問我看過沒有,我說發(fā)過來看看唄,于是他很快發(fā)給了我(Squid緩存命中,下載極快,哦耶?。?/p> 我收到寫真圖,發(fā)現(xiàn)是兩天前已經(jīng)看過了的,于是告訴Squid君要最新的,Squid君看了看庫存,發(fā)現(xiàn)手頭沒有最新的了,于是就說讓我等一會兒,他去問問其他的代理兄弟有沒有,我說好的,謝謝(Squid支持分布式集群方式,各個父子節(jié)點、兄弟節(jié)點之間的緩存數(shù)據(jù)可以互相同步); 結(jié)果空歡喜一場,他回來和我說其他兄弟也沒有,當(dāng)我非常失落的時候,他突然說空空今天來杭州,他可以直接向空空要寫真,我一開心就對他說,快去快去(當(dāng)Squid緩存不命中時,只能從源服務(wù)器獲取數(shù)據(jù)); 過了好久,Squid君回來了,他說見空空的人實在太多了,排了好久的隊才拿到她最新的寫真圖呢,我謝過之后他就把寫真很快地發(fā)給了我。之后他說他一定要把這個寫真保存起來,以便提供給其他空空迷和其他兄弟代理(Squid會把從源服務(wù)器獲取的數(shù)據(jù)保存到自己的緩存中,如果下一個用戶提出同樣的下載請求,Squid直接把緩存中的數(shù)據(jù)給用戶,當(dāng)然也可以把數(shù)據(jù)奉送給其他兄弟代理,獨樂樂不如眾樂樂)。 |
到這里,我相信你已經(jīng)大概明白Squid的工作過程了吧,下面我就對Squid特點做一下簡要概括:
- 開源,基于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)然接下來我也會用Chinese向大家介紹Squid的用法。
Squid配置詳細(xì)說明
下面是一份詳細(xì)的Squid的配置清單及其說明:
- #http_port指令告訴squid在哪個端口偵聽HTTP請求。默認(rèn)端口是3128,除下面的形式外,也可以是http_port 192.168.63.50:3128
- http_port 3128
- icp_port 3130
- #緩存目錄的設(shè)置,可以設(shè)置多個緩存目錄,語法為:<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 會自動的加入代理認(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用戶及用戶組、管理員賬號
- cache_effective_user squid
- cache_effective_group squid
- cache_mgr youraccount@your.e.mail
- # 與內(nèi)存有關(guān)的配置:因為我的系統(tǒng)內(nèi)存很小,所以只給 8 MB!如果您的物理內(nèi)存很大的情況下,例如 512 MB,可以考慮加大到 64 或 128 MB。
- cache_mem 128 MB
- # 與磁盤容量有關(guān)的配置(注:下列的 90 與 95 是百分比 ),如果您的 cache_dir 所在磁盤很大時,可以考慮將 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
注意:以上的配置說明來自這里。
配置好以后,我們就可以啟動squid了,啟動的步驟如下:
1). 我們可以運行下面的命令來檢查配置文件的正確性:
- # squid -k parse
只有這一步正確你才可以進(jìn)行下一步的操作
2). 初始化cache目錄.即建立緩存目錄的存儲格式
只需在第一次啟動squid服務(wù)之前執(zhí)行(在初次運行squid之前,或者無論何時你增加了新的cache_dir,你必須初始化cache目錄。)
- # squid -z
cache目錄初始化可能花費一些時間,依賴于cache目錄的大小和數(shù)量,以及磁盤驅(qū)動器的速度。假如你想觀察這個過程,請使用-X選項:
- # squid -zX
3). 啟動squid服務(wù)
- # service squid start
假定squid安裝在/usr/local/squid目錄下,也可以
- # /usr/local/squid/sbin/squid -sD
最后,我推薦你去看看Squid權(quán)威指南,并希望你可以利用Squid成功搭建一個分布式圖片緩存系統(tǒng),Squid真的很棒!
為了你和你家人的健康,轉(zhuǎn)載請注明原文出處:http://www.itivy.com/ivy/archive/2012/3/10/squid-usage.html
另外,我覺得你可能還會對下面架構(gòu)相關(guān)的文章感興趣:
優(yōu)酷網(wǎng)架構(gòu)學(xué)習(xí)筆記
百萬級訪問量網(wǎng)站的技術(shù)準(zhǔn)備工作
Facebook圖片存儲架構(gòu)的學(xué)習(xí)
全文完,謝謝閱讀!
原文鏈接:http://www.cnblogs.com/sxwgf/archive/2012/03/10/2389470.html