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