< 返回新聞公共列表

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

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

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


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


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


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


一、 緩存時間與緩存命中率

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

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

二、全球資源加速

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

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

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


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


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

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


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


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


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


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


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



/template/Home/Zkeys724/PC/Static