這些年前端工程領域利用CDN來實現網頁資源優化加速的方案已經非常普遍,除了快速的資源分發外,CDN在高吞吐量訪問、安全防護也起到非常大的作用,CDN +回源的架構已經深入人心。今天小編就和大家一起來聊一聊在前端領域利用使用CDN和云存儲構建的靈活的適應多種場景的方案實踐經驗。
下面云存儲統一用OSS代替,OSS是阿里云的云存儲服務,但是沒有特殊說明CDN指的是阿里云CDN。當然,每一家云服務廠商都有對應的CDN和云存儲服務提供,服務基本是通用的。
合理的技術架構基本都會做到動靜分離,對于靜態的場景,比如版本化管理的的資源文件(JS、CSS、圖片)、周期性更新的頁面都比較適合存儲到OSS,然后通過CDN配置OSS為源站的方式來實現低維護成本、高吞吐、快速訪問的技術方案。

一、 緩存時間與緩存命中率
CDN緩存架構下,命中CDN緩存才能實現訪問的加速,而緩存的命中率是資源的訪問頻率和緩存時間來共同決定的,訪問次數越多、緩存時間越長,資源的緩存命中率就會越大,那么用戶平均訪問時長就會越短。對于已經版本化管理的資源來說,資源的內容就是隨版本確定的,該資源的CDN緩存時間可以是無限期的。無限期緩存可以顯著提高緩存命中率,但是訪問頻率非常低的資源,比如一天只有幾次訪問,還是會大概率觸發回源。因為CDN本身是分布式緩存的節點,訪問次數低意味著不一定每一個節點都會有對應的資源緩存,還有一個原因是CDN本身也不是無限的存儲空間,有一定的按熱度淘汰的算法,訪問次數越低的資源淘汰的概率越高。
對于非版本化管理的資源,也就是覆蓋式發布的資源文件,常見的比如頁面的HTML、一段靜態配置的數據。這種依據對應資源更新的頻率來進行緩存,對于這種覆蓋式發布的場景,不建議緩存過長時間,以免出現問題影響的時間比較長。如果不幸設置了比較長的緩存時間,CDN也有清除緩存的方法,清除緩存不適合大量資源的場景。CDN通常也會限制大規模的調用緩存失效的方法,避免大規模緩存失效造成流量大量請求源站。
二、全球資源加速
區別于CDN的分布式多節點,OSS有地域的概念,在國內的優異的網絡基礎設施下,OSS數據中心的網絡接入通常是多線BGP網絡,不同用戶運營商訪問都很流暢,不考慮容災,單個地域OSS通常能滿足要求, 何況還有前置CDN的加持,對于緩存命中率高的頁面,回源時間可以忽略。對于命中率低的資源,即使是回源,OSS的訪問速度也足夠的快。
但是在海外的場景下,如果海外的CDN節點還是回源到國內的OSS數據中心,跨國網絡訪問的線路本身就很擁擠,如果沒有專線的帶寬保障,那么回源超時的問題就不可忽視了,專線的成本是非常高的,很多國家還有數據本地存儲的合規性的要求,所以當地的CDN節點回源到當地的OSS數據中心是一個更好的方案。
如果不是特別定制,CDN通常只支持配置單個源站,不支持按照地域解析到不同的源站,要做到當地的CDN節點回源到當地的OSS數據中心,需要讓CDN特別的定制支持。對于CDN的大客戶來講,可能不是一個問題。但是對于中小站點還有另一個更自主的方案,就是利用支持地域解析的DNS,來做到根據CDN回源請求的源IP,解析到就近的OSS數據中心。OSS有一個限制是一個域名只能綁定在一個bucket上面。所以這里我們需要在OSS前面加一層網關接入層,來支持同一個域名在不同的地區解析到最近的OSS。

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

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

當我們把大部分資源做到版本化管理時,利用OSS的鏡像回源功能,發布又會簡化很多。對于版本化管理的資源來說,一個資源一旦正式發布,確定了唯一的版本號,該版本的內容就無法修改。OSS鏡像回源的功能是,當請求在OSS沒有找到文件,會自動到源站抓取對應文件保存到OSS,并將內容直接返回到。我們確定一個中心區域的OSS,設置為其他區域的源站,當其他區域的OSS訪問某一個資源不存在時,從中心來拉取并同步到該區域,下一次在該區域訪問該資源時,資源就已經存在,直接本區域返回。這樣做的好處是資源發布測邏輯變得簡單,只需要發布到中心OSS,保證中心OSS是全量的內容,不需要考慮其他區域的同步、重試邏輯, 速度也會有保障。同時,資源做到按照訪問區域按需同步,減少資源存儲冗余。在新增一個區域部署的時候,也能夠用這種方式快速同步新區域的資源。
以上就是全球資源加速方案CDN+OSS的經驗分享,希望能幫助到大家。
Copyright ? 2013-2020. All Rights Reserved. 恒訊科技 深圳市恒訊科技有限公司 粵ICP備20052954號 IDC證:B1-20230800.移動站


