閑談Web網(wǎng)站圖片服務(wù)器
現(xiàn)在很多中小網(wǎng)站(尤其是 Web 2.0 站點(diǎn)) 都允許用戶上傳圖片,如果前期沒有很好的規(guī)劃,那么隨著圖片文件的增多,無論是管理還是性能上都帶來很多問題。就自己的一點(diǎn)理解,拋磚引玉,以期能引出更具價(jià)值的信息。
事關(guān)圖片的存儲(chǔ)
把圖片存儲(chǔ)到什么介質(zhì)上? 如果有足夠的資金購買專用的圖片服務(wù)器硬件或者 NAS 設(shè)備,那么簡單的很;如果有能力自己開發(fā)單獨(dú)存儲(chǔ)圖片的文件系統(tǒng),那么也不用接著往下看了。
如果上述條件不具備,只想在普通的硬盤上存儲(chǔ),首先還是要考慮一下物理硬盤的實(shí)際處理能力。是 7200 轉(zhuǎn)的還是 15000 轉(zhuǎn)的,實(shí)際表現(xiàn)差別就很大。是選擇 ReiserFS 還是 Ext3 ,怎么也要測試一下吧? 創(chuàng)建文件系統(tǒng)的時(shí)候 Inode 問題也要加以考慮,選擇合適大小的 inode size ,在空間和速度上做取舍,同時(shí)防患于未然,注意單個(gè)文件系統(tǒng)下文件個(gè)數(shù)別達(dá)到極限。
獨(dú)立,獨(dú)立的服務(wù)器
無論從管理上,還是從性能上看,只要有可能,盡量部署獨(dú)立的圖片服務(wù)器。這幾乎成為常識(shí)了(不過在我做過面向 Web 的項(xiàng)目之前就這個(gè)問題也被人笑話過)。具備獨(dú)立的圖片服務(wù)器或者服務(wù)器集群后,在 Web 服務(wù)器上就可以有針對(duì)性的進(jìn)行配置優(yōu)化。比如采用傳說中更有效率的 Lighttpd。
如果不想在幾臺(tái)機(jī)器間同步所有圖片,只用 NFS 模式共享一下即可。注意軟、硬連接可能帶來的問題,以及 NFS 特定的傳輸速度。
獨(dú)立,獨(dú)立的域名
如果大部分 Web 頁面必須要載入很多圖片,那么需要注意 IE 瀏覽器的連接數(shù)問題(參見對(duì)該問題的測試。
前幾天有個(gè)朋友在線上問我,”一些大網(wǎng)站,圖片服務(wù)器為什么都用另外一個(gè)域名? 比如yahoo.com 圖片服務(wù)器用了 yimg.com 的域名?” ,粗糙一點(diǎn)的答案:除了管理方便,便于CDN 同步處理,上面說的 IE 連接數(shù)限制也是個(gè)考慮因素吧(其他原因我也不知,有請(qǐng) Yahoo!的同學(xué)發(fā)言)
雅虎 Web 優(yōu)化 14 條
關(guān)于雅虎 YSlow 工具倡導(dǎo)的 優(yōu)化 14 條規(guī)則,建議每個(gè) Web 維護(hù)人員必須倒背如流,當(dāng)然也應(yīng)該辯證來看–介紹這 14 條規(guī)則的頁面本身也只能得到 70 多分…其中的第九條和上面說的獨(dú)立域名之間多少有些矛盾。實(shí)際情況要根據(jù)自己的 Benchmark 與具體需求而確定了。
有效利用客戶端 Cache
很多網(wǎng)站的 UI 設(shè)計(jì)人員為了達(dá)到某些視覺效果,會(huì)在一些用戶需要頻繁訪問的頁面模塊上應(yīng)用大量的圖片。這樣的情況,研究表明,對(duì)于用戶粘度比較高的站點(diǎn), 在Web 服務(wù)器上對(duì)這一類對(duì)象設(shè)置 Expires Headr就是十分有必要的,大量帶寬就這么節(jié)省下來,費(fèi)用也節(jié)省了下來。順便說一下,對(duì)于驗(yàn)證碼這樣的東西,要加個(gè)簡單的規(guī)則過濾掉。
服務(wù)器端的 Cache
在國內(nèi),CDN 也是有錢才能玩得起。而類似 Amazon S3 這樣的一攬子存儲(chǔ)服務(wù),國內(nèi)還沒有出現(xiàn)。所以,充分利用服務(wù)器端的 Cache 也是有必要的。Squid 作為反向代理服務(wù)器,緩沖圖片效果應(yīng)該說尚可,新浪技術(shù)團(tuán)隊(duì)貢獻(xiàn)的 Ncache據(jù)評(píng)測,效果更佳。
高解析圖片問題
如果網(wǎng)站存在大量高解析度的圖片,那么有必要考慮部署 IIPImage 或者類似的軟件。
運(yùn)營問題
很多比較有規(guī)模的網(wǎng)站對(duì)于用戶上傳的圖片不做任何處理,結(jié)果頁面上還能看到很多 BMP 格式的圖片(個(gè)人覺得任何網(wǎng)站出現(xiàn) BMP 格式的圖片都是可恥的)…這完全是運(yùn)營上的策略之誤了。找個(gè)程序員投入一點(diǎn)時(shí)間寫個(gè)圖片處理模塊,對(duì)那些”截屏”得來的圖片做個(gè)轉(zhuǎn)換,投入成本可能遠(yuǎn)比存儲(chǔ)上的開銷小,而用戶再訪問該圖片,質(zhì)量未必能有什么損失,瀏覽速度無疑好多了。哪種處理方式更讓人接受,不言而喻。