這就是CDN回源原理和CDN多級緩存啊!

小明對項目中的cdn緩存一直不是太明白……

CDN回源

回源原理

  • 回源是指瀏覽器在發送請求報文時,響應該請求報文的是源站點的服務器,而不是各節點上的緩存服務器(比如nginx開啓緩存),那麼這個過程相對於通過各節點上的緩存服務器來響應的話就稱作爲回源。回源的請求或流量太多的話,有可能會讓源站點的服務器承載着過大的訪問壓力,進而影響服務的正常訪問。

  • 回源域名一般是cdn領域的專業術語,通常情況下,是直接用ip進行回源的,但是如果客戶源站有多個ip,並且ip地址會經常變化,對於cdn廠商來說,爲了避免經常更改配置(回源ip),會採用回源域名方式進行回源,這樣即使源站的ip變化了,也不影響原有的配置。

  • 常規的CDN都是回源的。即:當有用戶訪問某一個URL的時候,如果被解析到的那個CDN節點沒有緩存響應的內容,或者是緩存已經到期,就會回源站去獲取。如果沒有人訪問,那麼CDN節點不會主動去源站拿的。

  • 源站內容有更新的時候,源站可以主動把內容推送到CDN節點。參考阿里雲url預熱https://help.aliyun.com/knowledge_detail/40106.html?spm=a2c4e.11153987.0.0.419f6ec5UvPSJ1

  • CDN本來是給我們的網站加速的,但是有時會因爲不合適的回源策略給服務器帶來負擔,只有選擇正確的策略才能給自己的網站帶來更高的訪問效率。

CDN回源率計算方法

回源比分爲回源請求數比例及回源流量比例兩種:

回源請求數比

統計數據來自所有邊緣節點上的請求記錄,其中,對於沒有緩存或緩存過期(可緩存)的請求以及不可緩存的請求,均計入回源請求中,其他直接命中緩存的,則爲命中請求。

回源流量比

回源流量是回源請求文件大小產生的流量和請求本身產生的流量   回源流量比=回源流量/回源流量+用戶請求訪問的流量

CDN常見多級緩存

CDN概念

CDN的全稱是Content Delivery Network,即內容分發網絡。其基本思路是儘可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。

CDN工作方法

客戶端瀏覽器先檢查是否有本地緩存是否過期,如果過期,則向CDN邊緣節點發起請求,CDN邊緣節點會檢測用戶請求數據的緩存是否過期,如果沒有過期,則直接響應用戶請求,此時一個完成http請求結束;如果數據已經過期,那麼CDN還需要向源站發出回源請求(back to the source request),來拉取最新的數據。CDN的典型拓撲圖如下:

CDN的典型拓撲圖

CDN層級劃分:

  • CDN系統中,直接面向用戶,負責給用戶提供內容服務的的Cache設備都部署在整個 CDN網絡的邊緣位置,所以將這一層稱爲邊緣層。

  • CDN系統中,中心層負責全局的管理和控制,同時也保存了最多的內容Cache。在邊緣層設備未能命中Cache時,需要向中心層設備請求;而中心層未能命中時,則需要向源站請求。不同的CDN系統設計存在差異,中心層可能具備用戶服務的能力,也可能只會向下一層提供服務。

  • 如果CDN系統比較龐大,邊緣層向中心層請求內容太多,會造成中心層負載壓力太大。此時,需要在中心層和邊緣層之間部署一個區域層,負責一個區域的管理和控制,也可以提供一些內容Cache供邊緣層訪問。

CDN緩存

瀏覽器本地緩存失效後,瀏覽器會向CDN邊緣節點發起請求。類似瀏覽器緩存,CDN邊緣節點也存在着一套緩存機制。

CDN緩存的缺點

CDN的分流作用不僅減少了用戶的訪問延時,也減少的源站的負載。但其缺點也很明顯:當網站更新時,如果CDN節點上數據沒有及時更新,即便用戶再瀏覽器使用Ctrl +F5的方式使瀏覽器端的緩存失效,也會因爲CDN邊緣節點沒有同步最新數據而導致用戶訪問異常。

CDN緩存策略

  • CDN邊緣節點緩存策略因服務商不同而不同,但一般都會遵循http標準協議,通過http響應頭中的Cache-control: max-age的字段來設置CDN邊緣節點數據緩存時間。

  • 當客戶端向CDN節點請求數據時,CDN節點會判斷緩存數據是否過期,若緩存數據並沒有過期,則直接將緩存數據返回給客戶端;否則,CDN節點就會向源站發出回源請求,從源站拉取最新數據,更新本地緩存,並將最新數據返回給客戶端。

  • CDN服務商一般會提供基於文件後綴、目錄多個維度來指定CDN緩存時間,爲用戶提供更精細化的緩存管理。

  • CDN緩存時間會對“回源率”產生直接的影響。若CDN緩存時間較短,CDN邊緣節點上的數據會經常失效,導致頻繁回源,增加了源站的負載,同時也增大的訪問延時;若CDN緩存時間太長,會帶來數據更新時間慢的問題。開發者需要增對特定的業務,來做特定的數據緩存時間管理。

CDN緩存刷新

CDN邊緣節點對開發者是透明的,相比於瀏覽器Ctrl+F5的強制刷新來使瀏覽器本地緩存失效,開發者可以通過CDN服務商提供的“刷新緩存”接口來達到清理CDN邊緣節點緩存的目的。這樣開發者在更新數據後,可以使用“刷新緩存”功能來強制CDN節點上的數據緩存過期,保證客戶端在訪問時,拉取到最新的數據。

參考文獻

  • https://blog.csdn.net/mountains2001/article/details/52766431

  • https://blog.csdn.net/wangxin1982314/article/details/51050206/

  • https://blog.csdn.net/songchunmin_/article/details/69942991

  • https://www.jianshu.com/p/7b749b49201a

歡迎關注微信公衆號,獲取更多資源

程序員小明


本文分享自微信公衆號 - 程序員小明(coderxiaoming)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章