CDN緩存是什么意思 解析CDN加速的那些事
  • 更新時間:2024-12-28 10:06:13
  • 建站經(jīng)驗
  • 發(fā)布時間:2年前
  • 527

CDN是一項和加速網(wǎng)站訪問速度和用戶下載資源速度的服務(wù),那么,CDN緩存是什么意思?有什么優(yōu)點和缺點?對此,本文就來告訴大家CDN加速的那些事,有興趣的伙伴們記得了解下。


CDN是什么 ?

關(guān)于CDN是什么 ,此前推來客已經(jīng)為大家詳細介紹過,如果還有不了解的伙伴們可以重新了解下。


簡單的說,CDN是Content Delivery Network的簡稱,即“內(nèi)容分發(fā)網(wǎng)絡(luò)”的意思。一般我們所說的CDN加速,一般是指網(wǎng)站加速或者用戶下載資源加速。


可能這種專業(yè)的說,很多朋友不好理解,下面給大家分享一個小編記憶深刻的例子。


舉個通俗的例子:

談到CDN的作用,可以用8年買火車票的經(jīng)歷來形象比喻:8年前,還沒有火車票代售點一說,12306.cn更是無從說起。那時候火車票還只能在火車站的售票大廳購買,而我所住的小縣城并不通火車,火車票都要去市里的火車站購買,而從縣城到市里,來回就是4個小時車程,簡直就是浪費生命。


后來就好了,小縣城里出現(xiàn)了火車票代售點,可以直接在代售點購買火車,方便了不少,全市人民再也不用在一個點苦逼的排隊買票了。

CDN就可以理解為分布在每個縣城的火車票代售點,用戶在瀏覽網(wǎng)站的時候,CDN會選擇一個離用戶最近的CDN邊緣節(jié)點來響應(yīng)用戶的請求,這樣海南移動用戶的請求就不會千里迢迢跑到北京電信機房的服務(wù)器(假設(shè)源站部署在北京電信機房)上了。


CDN的優(yōu)勢很明顯:

(1)CDN節(jié)點解決了跨運營商和跨地域訪問的問題,訪問延時大大降低;

(2)大部分請求在CDN邊緣節(jié)點完成,CDN起到了分流作用,減輕了源站的負載。


CDN緩存是什么?

這里不深究CDN背后高大上的架構(gòu),也不討論CDN如何做到全局流量調(diào)度策略,本文著重討論在有了CDN后,數(shù)據(jù)是如何被緩存的。緩存是一個到處都存在的用空間換時間的例子。通過使用多余的空間,我們能夠獲取更快的速度。


相關(guān)技巧:【怎么看網(wǎng)站有沒開啟CDN 測試網(wǎng)站全國訪問速度方法】。

首先,看看沒有網(wǎng)站沒有接入CDN時,用戶瀏覽器與服務(wù)器是如何交互的:



用戶在瀏覽網(wǎng)站的時候,瀏覽器能夠在本地保存網(wǎng)站中的圖片或者其他文件的副本,這樣用戶再次訪問該網(wǎng)站的時候,瀏覽器就不用再下載全部的文件,減少了下載量意味著提高了頁面加載的速度。

如果中間加上一層CDN,那么用戶瀏覽器與服務(wù)器的交互如下:



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



可以看到,在存在CDN的場景下,數(shù)據(jù)經(jīng)歷了客戶端(瀏覽器)緩存和CDN邊緣節(jié)點緩存兩個階段,下面分別對這兩個階段的緩存進行詳細的剖析


客戶端(瀏覽器)緩存

1)客戶端緩存的缺點

客戶端緩存減少了的服務(wù)器請求,避免了文件重復(fù)加載,顯著地提升了用戶地方。但是當網(wǎng)站發(fā)生了更新的時候(如替換了css、js以及圖片文件),瀏覽器本地仍保存著舊版本的文件,從而導(dǎo)致無法預(yù)料后果。


曾幾何時,一個頁面加載出來,頁面各元素位置亂飄,按鈕點擊失效,前端GG都會習(xí)慣性地問一句:“緩存清了沒?”,然后Ctrl+F5 ,Everything is OK。但有些時候,如果我們是簡單地在瀏覽器地址欄中敲一個回車,或者是僅僅按F5刷新,問題依然沒有解決,你可知道這三種不同的操作方式,決定瀏覽器不同的刷新緩存策略?


瀏覽器如何來確定使用本地文件還是使用服務(wù)器上的新文件?下面來介紹幾種判斷的方法。


瀏覽器緩存策略

Expires

Expires:Sat, 24 Jan 2015 20:30:54 GMT

如果http響應(yīng)報文中設(shè)置了Expires,在Expires過期之前,我們就避免了和服務(wù)器之間的連接。此時,瀏覽器無需想瀏覽器發(fā)出請求,只需要自己判斷手中的材料是否過期就可以了,完全不需要增加服務(wù)器的負擔(dān)。

Cache-control: max-age

Expires的方法很好,但是我們每次都得算一個精確的時間。max-age 標簽可以讓我們更加容易的處理過期時間。我們只需要說,這份資料你只能用一個星期就可以了。

Max-age 使用秒來計量,如:

Cache-Control:max-age=645672

指定頁面645672秒(7.47天)后過期。

Last-Modified

服務(wù)器為了通知瀏覽器當前文件的版本,會發(fā)送一個上次修改時間的標簽,例如:

Last-Modified:Tue, 06 Jan 2015 08:26:32 GMT

這樣瀏覽器就知道他收到的這個文件創(chuàng)建時間,在后續(xù)的請求中,瀏覽器會按照下面的規(guī)則進行驗證:

1. 瀏覽器:Hey,我需要jquery.min.js這個文件,如果是在 Tue, 06 Jan 2015 08:26:32 GMT 之后修改過的,請發(fā)給我。

2. 服務(wù)器:(檢查文件的修改時間)

3. 服務(wù)器:Hey,這個文件在那個時間之后沒有被修改過,你已經(jīng)有最新的版本了。

4. 瀏覽器:太好了,那我就顯示給用戶了。

在這種情況下,服務(wù)器僅僅返回了一個304的響應(yīng)頭,減少了響應(yīng)的數(shù)據(jù)量,提高了響應(yīng)的速度。

下圖是按F5刷新頁面后,頁面返回304響應(yīng)頭。

ETag

通常情況下,通過修改時間來比較文件是可行的。但是在一些特殊情況,例如服務(wù)器的時鐘發(fā)生了錯誤,服務(wù)器時鐘進行修改,夏時制DST到來后服務(wù)器時間沒有及時更新,這些都會引起通過修改時間比較文件版本的問題。

ETag可以用來解決這種問題。ETag是一個文件的唯一標志符。就像一個哈?;蛘咧讣y,每個文件都有一個單獨的標志,只要這個文件發(fā)生了改變,這個標志就會發(fā)生變化。

服務(wù)器返回ETag標簽:

ETag:"39001d-1762a-50bf790757e00"

接下來的訪問順序如下所示:

1. 瀏覽器:Hey,我需要jquery.min.js這個文件,有沒有不匹配"39001d-1762a-50bf790757e00"這個串的

2. 服務(wù)器:(檢查ETag…)

3. 服務(wù)器:Hey,我這里的版本也是"39001d-1762a-50bf790757e00",你已經(jīng)是最新的版本了

4. 瀏覽器:好,那就可以使用本地緩存了

如同 Last-modified 一樣,ETag 解決了文件版本比較的問題。只不過 ETag 的級別比 Last-Modified 高一些。

額外的標簽

緩存標簽永遠不會停止工作,但是有時候我們需要對已經(jīng)緩存的內(nèi)容進行一些控制。

Cache-control: public 表示緩存的版本可以被代理服務(wù)器或者其他中間服務(wù)器識別。

Cache-control: private 意味著這個文件對不同的用戶是不同的。只有用戶自己的瀏覽器能夠進行緩存,公共的代理服務(wù)器不允許緩存。

Cache-control: no-cache 意味著文件的內(nèi)容不應(yīng)當被緩存。這在搜索或者翻頁結(jié)果中非常有用,因為同樣的URL,對應(yīng)的內(nèi)容會發(fā)生變化。

瀏覽器緩存刷新

1. 在地址欄中輸入網(wǎng)址后按回車或點擊轉(zhuǎn)到按鈕

瀏覽器以最少的請求來獲取網(wǎng)頁的數(shù)據(jù),瀏覽器會對所有沒有過期的內(nèi)容直接使用本地緩存,從而減少了對瀏覽器的請求。所以,Expires,max-age標記只對這種方式有效。

2. 按F5或瀏覽器刷新按鈕

瀏覽器會在請求中附加必要的緩存協(xié)商,但不允許瀏覽器直接使用本地緩存,它能夠讓 Last-Modified、ETag發(fā)揮效果,但是對Expires無效。

3. 按Ctrl+F5或按Ctrl并點擊刷新按鈕

這種方式就是強制刷新,總會發(fā)起一個全新的請求,不使用任何緩存。


CDN緩存

瀏覽器本地緩存失效后,瀏覽器會向CDN邊緣節(jié)點發(fā)起請求。類似瀏覽器緩存,CDN邊緣節(jié)點也存在著一套緩存機制。

CDN緩存的缺點

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


CDN緩存策略

CDN邊緣節(jié)點緩存策略因服務(wù)商不同而不同,但一般都會遵循h(huán)ttp標準協(xié)議,通過http響應(yīng)頭中的Cache-control: max-age的字段來設(shè)置CDN邊緣節(jié)點數(shù)據(jù)緩存時間。

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

CDN服務(wù)商一般會提供基于文件后綴、目錄多個維度來指定CDN緩存時間,為用戶提供更精細化的緩存管理。


CDN緩存時間會對“回源率”產(chǎn)生直接的影響。若CDN緩存時間較短,CDN邊緣節(jié)點上的數(shù)據(jù)會經(jīng)常失效,導(dǎo)致頻繁回源,增加了源站的負載,同時也增大的訪問延時;若CDN緩存時間太長,會帶來數(shù)據(jù)更新時間慢的問題。開發(fā)者需要增對特定的業(yè)務(wù),來做特定的數(shù)據(jù)緩存時間管理。


CDN緩存刷新

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

我們專注高端建站,小程序開發(fā)、軟件系統(tǒng)定制開發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開發(fā)、各類API接口對接開發(fā)等。十余年開發(fā)經(jīng)驗,每一個項目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!

本文章出于推來客官網(wǎng),轉(zhuǎn)載請表明原文地址:https://www.tlkjt.com/experience/7334.html
推薦文章

在線客服

掃碼聯(lián)系客服

3985758

回到頂部