CDN的快取與回源機制解析

2021-09-23 23:39:50 字數 2425 閱讀 5179

cdn(content delivery network, 內容分發網路)指的是一組分布在各個地區的伺服器。這些伺服器儲存著資料的副本, 因此伺服器可以根據哪些伺服器與使用者距離更近, 來滿足資料的請求。 cdn提供快速服務, 較少受高流量影響。

快取、本地儲存帶來的效能提公升,是不是只能在「獲取到資源並把它們存起來」這件事情發生之後?也就是說,首次請求資源的時候,這些招數都是救不了我們的。要提公升首次請求的響應能力,我們還需要借助 cdn 的能力。

借中國地圖來舉個簡單的例子:

假設我的根伺服器在杭州, 同時在圖示的五個城市裡都有自己可用的機房。

此時有一位北京的使用者向我請求資源。在網路頻寬小 使用者訪問量大的情況下, 杭州的這一台伺服器或許不那麼給力, 不能給使用者非常寬的響應速度。於是我靈機一動, 把這批資源copy了一批放在北京的機房裡。當使用者請求資源時, 就近請求北京的伺服器, 北京這台伺服器低頭一看, 這個資源我存了, 離得那麼近, 響應速度肯定噌噌噌的! 那如果北京這台伺服器沒有copy這批資源呢?他會再向杭州的根伺服器再去要這個資源。在這個過程中, 北京這台伺服器就扮演著cdn的角色。

cdn的核心點有兩個, 乙個是快取, 乙個是回源。

這兩個概念非常好理解。對標到上面描述的過程, 快取就是說我們把該資源copy乙份到cdn伺服器上的這個過程, 回源就是說cdn發現自己沒有這個資源(一般是快取的資料過期了), 轉頭像根伺服器,或者他的上層伺服器去要這個資源。

cdn往往被認為是前端不需要了解的東西。

具體來說, 很多人對其的了解止步於:部署介面上有個部署到cdn按鈕 點一下資源就在cdn上了

眼下業務開發用不到的可以暫緩了解, 這是沒毛病的。 但前端工程師首先是軟體工程師。 對整個技術架構的理解, 將會反哺我們對某一具體環節的理解;知識點的適當拓展, 也會對大家技術高度和技術廣度的提公升大有裨益。

那麼, 我們了解下cdn是怎麼幫助前端的。

cdn往往被用來存放靜態資源。上文中我們距離所提到的根伺服器本質是業務伺服器,他的核心任務在於生成動態頁面或返回非純靜態頁面,這兩種過程都是需要計算的。業務伺服器彷彿乙個車間, 車間裡運轉的機器轟鳴著我們產出所需的資源 相比之下,cdn伺服器則像乙個倉庫, 他只充當資源的棲息地和搬運工。

所謂靜態資源就像js css 等不需要業務伺服器進行計算得到的資源。而動態資源, 顧名思義就是i需要後端實時動態生成的資源, 較為常見的就是jsp asp 或者依賴服務端渲染得到的html頁面。

什麼是非純靜態資源? 它是指需要伺服器在頁面之外做額外計算的html頁面。具體來說,當我們開啟某一**之前, 該**需要通過許可權認證等一些列手段確認我的身份 進而決定是否要把html頁面呈現給我。 這種情況下html確實是靜態的, 但他和業務伺服器的操作耦合,我們把它丟到cdn上顯然是不合適的。

靜態資源本身具有訪問頻率高, 承接流量大的特點, 因此靜態資源載入速度始終是前端效能的乙個非常關鍵的指標。cdn是靜態資源提速的重要手段,在許多一線的網際網路公司, 靜態資源走cdn並不是乙個建議 而是乙個規定。

比如以**為代表的阿里系產品, 就遵循著這個規定。

開啟**受首頁, 我們可以在network面板中看到, 非純淨態的html頁面, 是向業務伺服器請求來的:

相應的, 我們宿便點開乙個靜態資源, 可以看到他都是從cdn伺服器上請求來的

比如說再比如js, css

如何讓cdn的效用最大化? 這又是需要前後端程式設計師一起思考的龐大命題。 它涉及到cdn伺服器本身的效能優化 cdn節點的位址選取等。 

cdn的網域名稱選取

先看一下剛剛選取的**首頁的例子, 我們注意到業務伺服器的網域名稱是這個:

www.taobao.com

而cdn伺服器的網域名稱是這個:

g.alicdn.com

沒錯 我們不一樣

再看另一方面, 我們講到cookie的時候, 為了凸顯local storage的優越性, 曾經提到過:

cookie是緊跟網域名稱的。 同乙個網域名稱下的所有請求, 都會攜帶cookie。 大家試想, 如果我們此刻僅僅是請求一張或者乙個css檔案, 我們也要攜帶乙個cookie跑來跑去(關鍵是cookie裡儲存的資訊我現在並不需要),這是一件多麼老命傷財的事情。cookie雖然小, 請求卻可以有很多, 隨著請求的疊加, 這樣不必要的cookie帶來的開銷殭屍無法想象的

同乙個網域名稱下的請求會不分青紅皂白的攜帶cookie, 而靜態資源往往並不需要cookie攜帶什麼認證資訊。把靜態資源和主頁面置於不同的網域名稱下, 完美的避免了不必要的cookie的出現

看起來是乙個不起眼的小細節, 但帶來的效用卻是驚人的。 以電商**靜態資源的流量之龐大, 如果沒把這個多餘的cookie拿下來, 不僅使用者體驗會大打折扣, 每年因效能浪費帶來的經濟開銷也將是乙個非常恐怖的數字。

CDN 的快取與回源機制解析

cdn content delivery network,即內容分發網路 指的是一組分布在各個地區的伺服器。這些伺服器儲存著資料的副本,因此伺服器可以根據哪些伺服器與使用者距離最近,來滿足資料的請求。cdn 提供快速服務,較少受高流量影響。cdn 的核心點有兩個,乙個是快取,乙個是回源。cdn 往往...

cdn回源php 小談CDN回源函式計算的應用場景

cdn團隊聯合函式計算團隊近期推出了乙個全新功能,即通過cdn把回源流量指向函式計算進行處理,該功能旨在幫助cdn使用者能通過函式計算快速處理和便捷處理回源資料為目的,使用者僅僅需要在cdn回源位址填寫函式計算的自定義網域名稱即可把請求 到函式計算進行處理,配置簡單,費用低廉,先前cdn回源可以設定...

簡述回源原理和CDN常見多級快取

1 回源原理 2 cdn回源率計算方法 回源比分為回源請求數比例及回源流量比例兩種 1 cdn概念 2 cdn工作方法 cdn的典型拓撲圖 3 cdn層級劃分 4 cdn快取 瀏覽器本地快取失效後,瀏覽器會向cdn邊緣節點發起請求。類似瀏覽器快取,cdn邊緣節點也存在著一套快取機制。5 cdn快取的...