Web程序中對資源文件的緩存

    項目中碰到一個需要緩存用戶自定義資源文件的問題,需要緩存用戶所指定的CSS、JS等資源文件。和同事初步的討論是使用文件系統進行緩存,並在前面架設SQUID進行進一步的緩存。今天剛好又看到的一篇Web圖片服務器存儲的文檔,雖然阿是對圖片而言,但對於CSS、JS等類型的資源文件同樣適用。挺有用的,ZZ了下來。

閒談 Web 圖片服務器

現在很多中小網站(尤其是 Web 2.0 站點) 都允許用戶上傳圖片,如果前期沒有很好的規劃,那麼隨着圖片文件的增多,無論是管理還是性能上都帶來很多問題。就自己的一點理解,拋磚引玉,以期能引出更具價值的信息。

事關圖片的存儲

把圖片存儲到什麼介質上? 如果有足夠的資金購買專用的圖片服務器硬件或者 NAS 設備,那麼簡單的很;如果有能力自己開發單獨存儲圖片的文件系統,那麼也不用接着往下看了。

如果上述條件不具備,只想在普通的硬盤上存儲,首先還是要考慮一下物理硬盤的實際處理能力。是 7200 轉的還是 15000 轉的,實際表現差別就很大。是選擇 ReiserFS 還是 Ext3 ,怎麼也要測試一下吧? 創建文件系統的時候 Inode 問題也要加以考慮,選擇合適大小的 inode size ,在空間和速度上做取捨,同時防患於未然,注意單個文件系統下文件個數別達到極限。

獨立,獨立的服務器

無論從管理上,還是從性能上看,只要有可能,儘量部署獨立的圖片服務器。這幾乎成爲常識了(不過在我做過面向 Web 的項目之前就這個問題也被人笑話過)。具備獨立的圖片服務器或者服務器集羣后,在 Web 服務器上就可以有針對性的進行配置優化。比如採用傳說中更有效率的 Lighttpd

如果不想在幾臺機器間同步所有圖片,只用 NFS 模式共享一下即可。注意軟、硬連接可能帶來的問題,以及 NFS 特定的傳輸速度。

獨立,獨立的域名

如果大部分 Web 頁面必須要載入很多圖片,那麼需要注意 IE 瀏覽器的連接數問題(參見對該問題的測試)。

前幾天有個朋友在線上問我,"一些大網站,圖片服務器爲什麼都用另外一個域名? 比如yahoo.com 圖片服務器用了 yimg.com 的域名?" ,粗糙一點的答案:除了管理方便,便於CDN 同步處理,上面說的 IE 連接數限制也是個考慮因素吧(其他原因我也不知,有請 Yahoo!的同學發言) 【還有一個我沒考慮到的是 Cookie 的因素,參加樓下高春輝的留言】

雅虎 Web 優化 14 條

關於雅虎 YSlow 工具倡導的 優化 14 條規則,建議每個 Web 維護人員必須倒背如流,當然也應該辯證來看--介紹這 14 條規則的頁面本身也只能得到 70 多分...其中的第九條和上面說的獨立域名之間多少有些矛盾。實際情況要根據自己的 Benchmark 與具體需求而確定了。

有效利用客戶端 Cache

很多網站的 UI 設計人員爲了達到某些視覺效果,會在一些用戶需要頻繁訪問的頁面模塊上應用大量的圖片。這樣的情況,研究表明,對於用戶粘度比較高的站點, 在Web 服務器上對這一類對象設置 Expires Header 就是十分有必要的,大量帶寬就這麼節省下來,費用也節省了下來。順便說一下,對於驗證碼這樣的東西,要加個簡單的規則過濾掉。

服務器端的 Cache

在國內,CDN 也是有錢才能玩得起。而類似 Amazon S3 這樣的一攬子存儲服務,國內還沒有出現。所以,充分利用服務器端的 Cache 也是有必要的。Squid 作爲反向代理服務器,緩衝圖片效果應該說尚可,新浪技術團隊貢獻的 Ncache 據評測,效果更佳。

高解析圖片問題

如果網站存在大量高解析度的圖片,那麼有必要考慮部署 IIPImage 或者類似的軟件。

運營問題

很多比較有規模的網站對於用戶上傳的圖片不做任何處理,結果頁面上還能看到很多 BMP 格式的圖片(個人覺得任何網站出現 BMP 格式的圖片都是可恥的)...這完全是運營上的策略之誤了。找個程序員投入一點時間寫個圖片處理模塊,對那些"截屏"得來的圖片做個轉換,投入成本可能遠 比存儲上的開銷小,而用戶再訪問該圖片,質量未必能有什麼損失,瀏覽速度無疑好多了。哪種處理方式更讓人接受,不言而喻。

--EOF--

(ZZ Done)
發佈了45 篇原創文章 · 獲贊 4 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章