< 返回新聞公共列表

全球資源加速方案經(jīng)驗(yàn)分享:CDN+OSS

發(fā)布時(shí)間:2021-07-06 14:50:07

這些年前端工程領(lǐng)域利用CDN來實(shí)現(xiàn)網(wǎng)頁資源優(yōu)化加速的方案已經(jīng)非常普遍,除了快速的資源分發(fā)外,CDN在高吞吐量訪問、安全防護(hù)也起到非常大的作用,CDN +回源的架構(gòu)已經(jīng)深入人心。今天小編就和大家一起來聊一聊在前端領(lǐng)域利用使用CDN和云存儲(chǔ)構(gòu)建的靈活的適應(yīng)多種場(chǎng)景的方案實(shí)踐經(jīng)驗(yàn)。


下面云存儲(chǔ)統(tǒng)一用OSS代替,OSS是阿里云的云存儲(chǔ)服務(wù),但是沒有特殊說明CDN指的是阿里云CDN。當(dāng)然,每一家云服務(wù)廠商都有對(duì)應(yīng)的CDN和云存儲(chǔ)服務(wù)提供,服務(wù)基本是通用的。


合理的技術(shù)架構(gòu)基本都會(huì)做到動(dòng)靜分離,對(duì)于靜態(tài)的場(chǎng)景,比如版本化管理的的資源文件(JS、CSS、圖片)、周期性更新的頁面都比較適合存儲(chǔ)到OSS,然后通過CDN配置OSS為源站的方式來實(shí)現(xiàn)低維護(hù)成本、高吞吐、快速訪問的技術(shù)方案。


全球資源加速方案經(jīng)驗(yàn)分享:CDN+OSS  .png


一、 緩存時(shí)間與緩存命中率

CDN緩存架構(gòu)下,命中CDN緩存才能實(shí)現(xiàn)訪問的加速,而緩存的命中率是資源的訪問頻率和緩存時(shí)間來共同決定的,訪問次數(shù)越多、緩存時(shí)間越長,資源的緩存命中率就會(huì)越大,那么用戶平均訪問時(shí)長就會(huì)越短。對(duì)于已經(jīng)版本化管理的資源來說,資源的內(nèi)容就是隨版本確定的,該資源的CDN緩存時(shí)間可以是無限期的。無限期緩存可以顯著提高緩存命中率,但是訪問頻率非常低的資源,比如一天只有幾次訪問,還是會(huì)大概率觸發(fā)回源。因?yàn)镃DN本身是分布式緩存的節(jié)點(diǎn),訪問次數(shù)低意味著不一定每一個(gè)節(jié)點(diǎn)都會(huì)有對(duì)應(yīng)的資源緩存,還有一個(gè)原因是CDN本身也不是無限的存儲(chǔ)空間,有一定的按熱度淘汰的算法,訪問次數(shù)越低的資源淘汰的概率越高。

對(duì)于非版本化管理的資源,也就是覆蓋式發(fā)布的資源文件,常見的比如頁面的HTML、一段靜態(tài)配置的數(shù)據(jù)。這種依據(jù)對(duì)應(yīng)資源更新的頻率來進(jìn)行緩存,對(duì)于這種覆蓋式發(fā)布的場(chǎng)景,不建議緩存過長時(shí)間,以免出現(xiàn)問題影響的時(shí)間比較長。如果不幸設(shè)置了比較長的緩存時(shí)間,CDN也有清除緩存的方法,清除緩存不適合大量資源的場(chǎng)景。CDN通常也會(huì)限制大規(guī)模的調(diào)用緩存失效的方法,避免大規(guī)模緩存失效造成流量大量請(qǐng)求源站。 

二、全球資源加速

區(qū)別于CDN的分布式多節(jié)點(diǎn),OSS有地域的概念,在國內(nèi)的優(yōu)異的網(wǎng)絡(luò)基礎(chǔ)設(shè)施下,OSS數(shù)據(jù)中心的網(wǎng)絡(luò)接入通常是多線BGP網(wǎng)絡(luò),不同用戶運(yùn)營商訪問都很流暢,不考慮容災(zāi),單個(gè)地域OSS通常能滿足要求, 何況還有前置CDN的加持,對(duì)于緩存命中率高的頁面,回源時(shí)間可以忽略。對(duì)于命中率低的資源,即使是回源,OSS的訪問速度也足夠的快。

但是在海外的場(chǎng)景下,如果海外的CDN節(jié)點(diǎn)還是回源到國內(nèi)的OSS數(shù)據(jù)中心,跨國網(wǎng)絡(luò)訪問的線路本身就很擁擠,如果沒有專線的帶寬保障,那么回源超時(shí)的問題就不可忽視了,專線的成本是非常高的,很多國家還有數(shù)據(jù)本地存儲(chǔ)的合規(guī)性的要求,所以當(dāng)?shù)氐腃DN節(jié)點(diǎn)回源到當(dāng)?shù)氐腛SS數(shù)據(jù)中心是一個(gè)更好的方案。 

如果不是特別定制,CDN通常只支持配置單個(gè)源站,不支持按照地域解析到不同的源站,要做到當(dāng)?shù)氐腃DN節(jié)點(diǎn)回源到當(dāng)?shù)氐腛SS數(shù)據(jù)中心,需要讓CDN特別的定制支持。對(duì)于CDN的大客戶來講,可能不是一個(gè)問題。但是對(duì)于中小站點(diǎn)還有另一個(gè)更自主的方案,就是利用支持地域解析的DNS,來做到根據(jù)CDN回源請(qǐng)求的源IP,解析到就近的OSS數(shù)據(jù)中心。OSS有一個(gè)限制是一個(gè)域名只能綁定在一個(gè)bucket上面。所以這里我們需要在OSS前面加一層網(wǎng)關(guān)接入層,來支持同一個(gè)域名在不同的地區(qū)解析到最近的OSS。


全球資源加速方案經(jīng)驗(yàn)分享:CDN+OSS  .png


三、OSS多區(qū)域文件同步

解決了讀取的問題,再來談一談多個(gè)區(qū)域的OSS資源如何同步的問題,OSS海外區(qū)域不支持自動(dòng)同步,所以我們需要從邏輯上來保證用戶訪問數(shù)據(jù)的一致性。在我們實(shí)踐的業(yè)務(wù)場(chǎng)景中,按照不同的業(yè)務(wù)類型,分為: 1、國內(nèi)業(yè)務(wù) 2、海外業(yè)務(wù),海外又會(huì)按照地理區(qū)域劃分,比如東南亞、歐美。一個(gè)資源按照業(yè)務(wù)訪問屬性,可能只會(huì)在某一類地區(qū)被訪問到,也會(huì)有一些全局的資源,每一個(gè)地區(qū)都會(huì)被訪問到。


全球資源加速方案經(jīng)驗(yàn)分享:CDN+OSS  .png


最直接的方案是資源發(fā)布時(shí),系統(tǒng)內(nèi)部調(diào)用不同區(qū)域的OSS發(fā)布,全部成功才認(rèn)為成功。這種方案能夠保證所有區(qū)域的一致性,邏輯上也簡單,但是存在幾個(gè)問題: 1. 業(yè)務(wù)上不是每一個(gè)資源都需要海外加速,全部同步造成資源浪費(fèi),也會(huì)影響發(fā)布時(shí)間。2. 如果某一個(gè)區(qū)域OSS出現(xiàn)問題,影響整體發(fā)布成功的判斷。所以我們最終實(shí)現(xiàn)的是按照資源被訪問的區(qū)域進(jìn)行打標(biāo),如果資源屬于國內(nèi)業(yè)務(wù),只同步國內(nèi)OSS,如果資源屬于海外特定區(qū)域使用,則只同步特定區(qū)域,如果資源確實(shí)所有區(qū)域都會(huì)被訪問,則所有區(qū)域發(fā)布時(shí)同步。


全球資源加速方案經(jīng)驗(yàn)分享:CDN+OSS  .png


當(dāng)我們把大部分資源做到版本化管理時(shí),利用OSS的鏡像回源功能,發(fā)布又會(huì)簡化很多。對(duì)于版本化管理的資源來說,一個(gè)資源一旦正式發(fā)布,確定了唯一的版本號(hào),該版本的內(nèi)容就無法修改。OSS鏡像回源的功能是,當(dāng)請(qǐng)求在OSS沒有找到文件,會(huì)自動(dòng)到源站抓取對(duì)應(yīng)文件保存到OSS,并將內(nèi)容直接返回到。我們確定一個(gè)中心區(qū)域的OSS,設(shè)置為其他區(qū)域的源站,當(dāng)其他區(qū)域的OSS訪問某一個(gè)資源不存在時(shí),從中心來拉取并同步到該區(qū)域,下一次在該區(qū)域訪問該資源時(shí),資源就已經(jīng)存在,直接本區(qū)域返回。這樣做的好處是資源發(fā)布測(cè)邏輯變得簡單,只需要發(fā)布到中心OSS,保證中心OSS是全量的內(nèi)容,不需要考慮其他區(qū)域的同步、重試邏輯, 速度也會(huì)有保障。同時(shí),資源做到按照訪問區(qū)域按需同步,減少資源存儲(chǔ)冗余。在新增一個(gè)區(qū)域部署的時(shí)候,也能夠用這種方式快速同步新區(qū)域的資源。


以上就是全球資源加速方案CDN+OSS的經(jīng)驗(yàn)分享,希望能幫助到大家。



/template/Home/Zkeys724/PC/Static