分享一個對象存儲和高防CDN配合使用的話題,一般來講,公有云廠商提供對象存儲的服務(wù)之外,還會附帶一些增值服務(wù),這些服務(wù)是適配不同的應(yīng)用場景的。什么意思?
對象存儲本質(zhì)上解決了海量存儲的問題,但是數(shù)據(jù)不僅要可靠的存儲,大部分情況數(shù)據(jù)還要處理才會有價值,所以一般公有云廠商還會有數(shù)據(jù)處理的服務(wù),比如圖像處理,類似縮略圖,音視*頻轉(zhuǎn)碼,視屏截幀。
其次,數(shù)據(jù)訪問,也有特殊需求,比如一次上傳,多次下載的場景,就配合使用CDN的服務(wù),因為高防CDN的下載流量會比對象存儲服務(wù)下載的成本要低。
什么是CDN?全稱Content Delivery Network,本質(zhì)上是部署在各地的邊緣服務(wù)器,提供數(shù)據(jù)的就近訪問體驗,并有效降低數(shù)據(jù)服務(wù)器后端壓力。
從技術(shù)實現(xiàn)來講,CDN其實是后端服務(wù)器的緩存代理。
示意圖:
公有云廠商提供對象存儲服務(wù)的同時,還會提供cdn服務(wù),因為這兩個服務(wù)都是一家,所以自然方便協(xié)同操作。
數(shù)據(jù)上傳:
數(shù)據(jù)上傳走對象存儲服務(wù)的域名(endpoint);
數(shù)據(jù)下載:
數(shù)據(jù)下載可以走對象存儲服務(wù)的域名;
也可以走cdn域名下載;
對象存儲開啟cdn之后,客戶端使用cdn服務(wù)的域名請求數(shù)據(jù)。如果數(shù)據(jù)不在cdn服務(wù),cdn服務(wù)會自動使用對象存儲Bucket域名回源,拉取數(shù)據(jù)到cdn的緩存下來。這樣之后的壓力全都卸載于cdn服務(wù)上。所以,從以上描述我們再一次體會:cdn其實就是簡單的后端存儲服務(wù)的緩存代理。如果業(yè)務(wù)要使用cdn的話,需要明確cdn服務(wù)的域名,對象存儲的域名,將映射關(guān)系配置在cdn服務(wù)中(這一步其實是公有云廠商幫我們做好)。上傳數(shù)據(jù)使用對象存儲域名,讀取數(shù)據(jù)使用cdn域名。
cdn回源使用方案
cdn在用戶請求不命中的時候,需要回源后端拉取數(shù)據(jù)。那么不知道大家有沒有思考過,CDN加速使用什么樣的方案才能正確的獲取數(shù)據(jù)呢?(因為S3協(xié)議是有權(quán)限校驗的,也就是數(shù)字簽名,S3 v4協(xié)議會把host簽在數(shù)字身份校驗中,也就是說,一般情況,cdn是無法直接轉(zhuǎn)發(fā)的)。一般,對象存儲服務(wù)和cdn配合實現(xiàn)有三種解決方案:
presign
授權(quán)讀
公共讀
presign
presign也叫預(yù)簽名。這種方案是客戶端把簽名完全準(zhǔn)備好,所有的簽名元素和校驗全都在query url里面。cdn這種場景下真的就是做一個純粹轉(zhuǎn)發(fā)代理。但presign有個限制是只能使用S3 V2版本簽名,因為cdn回源時host會變,v4版本簽名會簽host,所以這種情況下簽名校驗會不通過。
Policy授權(quán)方案
這個是通用的方式,S3的Bucket支持細(xì)粒度的權(quán)限分配,也就是Policy策略。它允許把各種操作權(quán)限分配給各種指定的對象。
在公有云上,用戶申請cdn服務(wù)的資源,主要做幾個配置(公有云廠商幫你搞定的):
提供CDN域名與Bucket域名的映射關(guān)系
業(yè)務(wù)和CDN之間的認(rèn)證方式
公有云廠商還會將業(yè)務(wù)方的Bucket授予cdn服務(wù)讀權(quán)限。這樣,當(dāng)cdn未命中,cdn回源,就可以使用自己的賬號向?qū)ο蟠鎯Ψ?wù)請求數(shù)據(jù)(因為開啟CDN加速的時候,已經(jīng)通過policy授權(quán)給cdn了,所以能讀到數(shù)據(jù))。
公共讀方案
S3的Bucket是可以配置成公共讀,也叫做匿名訪問。隨便任何客戶端直接curl都能得到數(shù)據(jù),所以cdn自然也能得到數(shù)據(jù)。這個是一個特殊方案,我們通常不會這樣操作。這種方式可想而知,適用場景有限,因為數(shù)據(jù)安全是無法保證的。