阿里云CDN加速OSS
背景介紹
傳統(tǒng)動(dòng)靜不分離的產(chǎn)品架構(gòu),其性能會(huì)隨著系統(tǒng)訪問(wèn)量的增長(zhǎng)而受到限制甚至遭遇瓶頸。產(chǎn)品架構(gòu)如下圖所示:
利用CDN和OSS實(shí)現(xiàn)動(dòng)靜分離,靈活的架構(gòu)可以支持海量用戶訪問(wèn)。產(chǎn)品架構(gòu)如下圖所示:
?適用場(chǎng)景
- 靜態(tài)文件訪問(wèn)量大,服務(wù)器負(fù)載高,I/O問(wèn)題導(dǎo)致用戶訪問(wèn)卡頓。
- 靜態(tài)文件數(shù)量大,服務(wù)器存儲(chǔ)空間不夠。
- 靜態(tài)文件用戶訪問(wèn)量大,且分布在各地。
- 移動(dòng)更新包在某個(gè)時(shí)間段需要高速下載,且并發(fā)下載量高。
?架構(gòu)描述
OSS作為海量文件存儲(chǔ)源,靜態(tài)圖片、視頻文件、下載包、app更新包等均放在OSS上。OSS作為CDN的源站,通過(guò)CDN加速分發(fā),用戶通過(guò)CDN節(jié)點(diǎn)就近獲得文件。架構(gòu)優(yōu)勢(shì):
- 降低Web服務(wù)器負(fù)載,靜態(tài)文件訪問(wèn)負(fù)載全部通過(guò)CDN。
- 存儲(chǔ)費(fèi)用最低,OSS的存儲(chǔ)費(fèi)用僅為ECS磁盤費(fèi)用的50%。
- 海量存儲(chǔ)空間,無(wú)需考慮存儲(chǔ)架構(gòu)升級(jí)。
- 流量費(fèi)用低,相比直接通過(guò)OSS訪問(wèn),除極少額外增加的回源流量外,主要流量使用CDN流量,單價(jià)遠(yuǎn)遠(yuǎn)低于OSS直接訪問(wèn)的外網(wǎng)流量單價(jià)。
?實(shí)戰(zhàn)案例
以一個(gè)常見的Web站點(diǎn)為例。www.acar.com是一個(gè)剛建立的汽車資訊車友交流網(wǎng)站。主站用Php搭建,有10GB的圖片素材和部分JS文件。目前購(gòu)買一臺(tái)ECS放置所有程序代碼,并在ECS上安裝MySQL數(shù)據(jù)庫(kù)。隨著用戶訪問(wèn)量的不斷增長(zhǎng),不少用戶反映,訪問(wèn)網(wǎng)站的速度越來(lái)越慢,圖片加載慢,網(wǎng)站響應(yīng)慢。網(wǎng)站技術(shù)人員也發(fā)現(xiàn)用戶上傳的圖片越來(lái)越多,快超過(guò) 1TB了。
對(duì)于以上案例我們可以利用OSS和CDN對(duì)網(wǎng)站進(jìn)行架構(gòu)優(yōu)化,實(shí)現(xiàn)動(dòng)靜分離的產(chǎn)品架構(gòu),提升用戶訪問(wèn)體驗(yàn),同時(shí)成本也在可控的范圍內(nèi)。
解決方案和步驟:
-
對(duì)ECS上的網(wǎng)站程序進(jìn)行整理,把動(dòng)態(tài)程序部分和靜態(tài)部分分不同的目錄進(jìn)行管理:
- 建立Images目錄,放置所有網(wǎng)站高清素材圖片。
- 建立Javascript目錄,放置所有的JS腳本。
- 建立Attachment目錄,放置所有用戶上傳的圖片和附件。
-
新建一個(gè)Bucket。
根據(jù)您的ECS所在的區(qū)域選擇bucket所在區(qū)域,權(quán)限選擇 公共讀,bucket名稱與ECS上新建的目錄的名稱對(duì)應(yīng),比如“acar-image-bucket”。具體操作請(qǐng)參見 創(chuàng)建存儲(chǔ)空間。
-
綁定域名image.acar.com 并進(jìn)行CDN加速。具體操作請(qǐng)參見 管理域名。
-
上傳文件,體驗(yàn)加速效果。
-
把您在第1步中建立在ECS上的Images目錄下的所有圖片文件上傳到acar-image-bucket下。具體操作請(qǐng)參見 上傳文件。您也可以使用OSS客戶端工具更加方便靈活的完成圖片的上傳。
-
獲取該文件的CDN加速的訪問(wèn)地址,通常為您輸入的加速域名+'/'+'文件名'的格式。具體操作請(qǐng)參見 獲取文件訪問(wèn)地址。
-
逐一完成圖片文件的上傳。
-
-
按照前4步的示意,把其他兩個(gè)文件也通過(guò)CDN加速的方式上傳,分別建立acar-js-bucket和acar-csimages-bucket兩個(gè)使用CDN加速的OSS bucket。
-
在原本ECS系統(tǒng)中,找到原本訪問(wèn)靜態(tài)文件的代碼,把訪問(wèn)URL修改為加速訪問(wèn)的地址。以后用戶訪問(wèn)您的網(wǎng)站的靜態(tài)文件就全部通過(guò)OSS+CDN的方式訪問(wèn),不再占用您ECS的資源。
注意:如果您想把用戶上傳的文件自動(dòng)同步到acar-csimages-bucket中,您可以參考OSS相關(guān)SDK和API的 PutObjcet部分,實(shí)現(xiàn)代碼級(jí)別自動(dòng)上傳。
?CDN緩存自動(dòng)刷新
如果您使用了阿里云的CDN并綁定了加速域名回源到OSS,您就可以使用OSS的CDN緩存自動(dòng)刷新功能,此功能在覆蓋寫的情況下(包括覆蓋一個(gè)已有的文件、刪除一個(gè)已有的文件),OSS會(huì)主動(dòng)刷新CDN,回源到OSS獲取覆蓋后的文件,用戶不需要顯式調(diào)用CDN的刷新接口。刷新的URL規(guī)則如下:
加速域名 + / + Object
例如您綁定的加速域名是image.acar.com,如果這個(gè)域名綁定的bucket覆蓋上傳了一個(gè)文件test.jpg,則OSS會(huì)刷新掉image.acar.com/test.jpg這個(gè)URL,刷新生效的時(shí)間以CDN保證的刷新生效時(shí)間為準(zhǔn),一般在十分鐘以內(nèi)。
開通方法:在Bucket的 域名管理 頁(yè)面,打開 CDN緩存自動(dòng)刷新 功能即可。