圖片服務一般數據容量較大,並且訪問也頻繁,鑑於此,圖片服務就會有兩種問題,一是存儲問題,二是訪問量問題。nginx
存儲問題就是硬 盤容量問題,花錢買硬盤就能夠了,看似簡單,但着實也是最苦的問題。按目前探索來看,最好的方式是:在任什麼時候刻遇到硬盤空間不夠時,買顆硬盤插上,最多改 改配置,就能馬上利用;另外,硬盤要能充分利用,否則圖片存儲量大再加上備份,很恐怖,最好是每顆硬盤都用上100%的空間。服務器
訪問量 也是個大問題,若是服務不容許防盜鏈,那麼訪問量會引發帶寬、服務器壓力等問題,有錢的話直接扔CDN,沒錢或者有更多的錢,就本身作吧。根據垣古不變的 真理「越老的圖,訪問量也相對較少」這一點,分紅兩大部分,一邊處理最新的圖片,一邊處理老舊的圖片。最新的圖片訪問量大,但存儲量較少;老圖片訪問量 低,但存儲量大。架構
大概分析完了,開始制定方案。負載均衡
1、擬定一個存儲目錄規則:ui
在現有的/a/b/abcde.jpg這樣的hash方式下多加一個日期的目錄變成:/200810/16/a/b/abcde.jpg或者/2008/10/16/a/b/abcde.jpg。按日期制定這個目錄規則後,就能夠按年月來拆機器了。代理
2、分機器,分硬盤圖片
按以前的計劃,分紅兩個組,一組服務器用lvs作負載均衡負責新圖片;另外一組服務器作舊圖片訪問和備份。新圖機器找幾臺好點的服務器,SCSI硬盤;舊 圖機器沒太大要求,PC機就行,找夠硬盤就能夠,如今IDE的1T硬盤也不太貴,最好再搭個raid就省事了,最主要是這些機器要多。hash
說明一下:圖片存儲
使用這個架構的話,硬盤不夠的話,加硬盤就能夠了。若是圖片量實在太大,主服務器連一年的數據都裝不下,那能夠用啓用月份來劃分;若是一個月都裝不下了,那也太誇張了,那就啓用日期吧;若是一天的數據都裝不下,那就使用小時,依次類推。配置