圖片是網站中必不可少的一個組成部分,隨着網站的不斷發展,對圖片的處理也將隨着訪問的增長,圖片的增加提出不斷改進的需求。
網站初期,所有的一切都從簡圖片所存在的位置通常會在站點下的Images文件夾。
隨着訪問的增加,IIS壓力的增大,開始做拆分,將圖片文件夾作為單獨站點提取出來如http://images.***.com/(可能根據需要會拆分成多個圖片服務器,與具體業務環境相關),拆分之后很好的將單個IIS應用池的壓力分擔到2個乃至多個上,大大提高訪問瓶頸。
隨着訪問的進一步增加,服務器壓力已經無法支撐,這時我們需要將圖片站點作為獨立服務器存在。
在訪問圖片的過程中,我們可能會面臨一個圖片有多個圖片尺寸的需求,前期我們通常會在保存頁面的過程中保存我們需要的各個尺寸圖片,但隨着所需尺寸的不同,保存圖片時需要的尺寸越來越多,這時我們如何應對?
IIS服務器的並發訪問意味着隨着用戶的進一步增加,我們單台圖片服務器已經不足以應對了,此時我們如何進一步擴展?

如上圖所示,我們此時可針對這兩個問題做出統一解決方案,在前端添加squid緩存服務器,添加一台或者多台動態切圖服務器。
Squid或者Nginx代理緩存服務器能夠極大的提升圖片系統的並發訪問,使系統突破現有限制。動態切圖服務器主要的作用是針對不同尺寸的圖片訪問調取原圖臨時生成符合需求的圖片並返回。原圖的存儲區可以與圖片服務放在一起,也可以講圖片放於單獨的服務器上。
在此種結構中,並發的最大訪問限制將是squid或者其他代理服務器的系統瓶頸,當切圖服務壓力增大時,只需添加相應切圖服務器即可,圖片存儲區的增長也可通過添加硬盤或者服務器進行解決。
如果您的站點訪問量還在進一步增長,squid的訪問瓶頸即將被突破,這時我們又該如何應對呢?

如上圖所示,采用多台Squid或Nginx服務器,在前端添加F5或LVS負載均衡(同時還可開啟緩存功能)。此時將極大提升訪問的並發量,可以根據情況隨時調配服務器。當然此時也存在一定的瑕疵,那就是可能在多台Squid上存在同一張圖片,因為訪問圖片時可能第一次分到squid1,在F5過期后第二次訪問到squid2或者別的,當然相對並發問題的解決,此種少量的冗余完全在我們的允許范圍之內。
在做了這許多的工作后,如果條件允許對圖片服務器做下CDN,那將會對您站點的圖片訪問質量有更大的提升。