1.介紹
現(xiàn)在很多的網(wǎng)站上都會用到大量的圖片,而圖片是網(wǎng)頁傳輸中占主要的數(shù)據(jù)量,也是影響網(wǎng)站性能的主要因素。因此很多網(wǎng)站都會將圖片存儲從網(wǎng)站中分離出來,另外架構一個或多個服務器來存儲圖片,將圖片放到一個虛擬目錄中,而網(wǎng)頁上的圖片都用一個URL地址來指向這些服務器上的圖片的地址,這樣的話網(wǎng)站的性能就明顯提高了,圖片服務器(ImageServer)的概念也就產(chǎn)生了。
1.1 圖片服務器的優(yōu)勢
1, 分擔Web服務器的I/O負載-將耗費資源的圖片服務分離出來,提高服務器的性能和穩(wěn)定性。
2, 能夠?qū)iT對圖片服務器進行優(yōu)化-為圖片服務設置有針對性的緩存方案,減少帶寬成本,提高訪問速度。
3, 提高網(wǎng)站的可擴展性-通過增加圖片服務器,提高圖片吞吐能力。
1.2 圖片服務器的注意事項
1, 選擇適合圖片存儲的物理介質(zhì)和文件系統(tǒng)
2, 使用物理上獨立的服務器
3, 如果擁有多臺圖片服務器,要考慮服務器之間的圖片同步問題
4, 使用獨立域名
5, 制定合理的緩存策略
6, 使用圖片處理模塊對用戶上傳的圖片進行再加工
1.3 圖片服務器的架構
圖片是網(wǎng)站中必不可少的一個組成部分,隨著網(wǎng)站的不斷發(fā)展,對圖片的處理也將隨著訪問的增長,圖片的增加提出不斷改進的需求, 網(wǎng)站初期,所有的一切都從簡圖片所存在的位置通常會在站點下的Images文件夾。
隨著訪問的增加,IIS壓力的增大,開始做拆分,將圖片文件夾作為單獨站點提取出來如http://images.***.com/(可能根據(jù)需要會拆分成多個圖片服務器,與具體業(yè)務環(huán)境相關),拆分之后很好的將單個IIS應用池的壓力分擔到2個乃至多個上,大大提高訪問瓶頸。隨著訪問的進一步增加,服務器壓力已經(jīng)無法支撐,這時我們需要將圖片站點作為獨立服務器存在。在訪問圖片的過程中,我們可能會面臨一個圖片有多個圖片尺寸的需求,前期我們通常會在保存頁面的過程中保存我們需要的各個尺寸圖片,但隨著所需尺寸的不同,保存圖片時需要的尺寸越來越多,這時我們?nèi)绾螒獙Γ?/p>
IIS服務器的并發(fā)訪問意味著隨著用戶的進一步增加,我們單臺圖片服務器已經(jīng)不足以應對了,此時我們?nèi)绾芜M一步擴展?
如上圖所示,我們此時可針對這兩個問題做出統(tǒng)一解決方案,在前端添加squid緩存服務器,添加一臺或者多臺動態(tài)切圖服務器。Squid或者Nginx代理緩存服務器能夠極大的提升圖片系統(tǒng)的并發(fā)訪問,使系統(tǒng)突破現(xiàn)有限制。動態(tài)切圖服務器主要的作用是針對不同尺寸的圖片訪問調(diào)取原圖臨時生成符合需求的圖片并返回。原圖的存儲區(qū)可以與圖片服務放在一起,也可以講圖片放于單獨的服務器上。
在此種結構中,并發(fā)的最大訪問限制將是squid或者其他代理服務器的系統(tǒng)瓶頸,當切圖服務壓力增大時,只需添加相應切圖服務器即可,圖片存儲區(qū)的增長也可通過添加硬盤或者服務器進行解決。
如果您的站點訪問量還在進一步增長,squid的訪問瓶頸即將被突破,這時我們又該如何應對呢?
如上圖所示,采用多臺Squid或Nginx服務器,在前端添加F5或LVS負載均衡(同時還可開啟緩存功能)。此時將極大提升訪問的并發(fā)量,可以根據(jù)情況隨時調(diào)配服務器。當然此時也存在一定的瑕疵,那就是可能在多臺Squid上存在同一張圖片,因為訪問圖片時可能第一次分到squid1,在F5過期后第二次訪問到squid2或者別的,當然相對并發(fā)問題的解決,此種少量的冗余完全在我們的允許范圍之內(nèi)。在做了這許多的工作后,如果條件允許對圖片服務器做下CDN,那將會對您站點的圖片訪問質(zhì)量有更大的提升。
新聞熱點
疑難解答