tft每日頭條

 > 生活

 > 為什麼現在都用cdn

為什麼現在都用cdn

生活 更新时间:2025-02-01 02:04:19

在互聯網有一個“8秒原則”,即如果有一個頁面的響應時間超過8秒,那麼大部分的用戶就會放棄加載,從而放棄使用該頁面或網站。淘寶,京東,蘇甯等電商每天都有成千上萬的訪問量,在618電商節,雙十一購物逛歡節更是具有數以萬計的秒殺活動,是什麼能夠支撐系統在如此高并發情況下還能正常運行?這就不得不提CDN了,CDN是什麼呢,讓我們一探究竟。

CDN是什麼?CDN其全稱是Content Delivery Network,即内容分發網絡。CDN是構建在網絡上的内容分發網絡,具備内容存儲和分發兩個關鍵要素。其基本原理是廣泛采用各種緩存服務器,将這些緩存服務器分布到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術将用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求。比如說,北京的用戶讓他訪問北京的節點,上海的用戶讓它訪問上海的節點,而不是北京的用戶訪問上海的節點,上海的用戶訪問北京的節點,這樣會極大增加用戶的訪問時長,及訪問的成本。通過就近訪問,加速用戶對網站的訪問,解決Internet網絡擁堵狀況,提高用戶訪問網絡的響應速度。CDN就像網絡中的快遞小哥,把你網購的商品從最近的倉庫拿出并選擇最優的路線,并将包裹及時地送到指定收貨地點。CDN就是扮演護航及加速的角色,使得每一個網絡請求能夠請求更快,時延更小,響應更快,帶來更為極緻的用戶體驗。當我們在浏覽器訪問一個頁面的時候,

CDN是如何發揮自己的作用呢?主要有以下步驟

1. 當用戶點擊網站頁面上的内容URL,經過本地DNS系統解析,DNS系統會最終将域名的解析權交給CNAME指向的CDN專用DNS服務器;

2. CDN的DNS服務器将CDN的全局負載均衡設備IP地址返回用戶;

3. 用戶向CDN的全局負載均衡設備發起内容URL訪問請求;

4. CDN全局負載均衡設備根據用戶IP地址,以及用戶請求的内容URL,選擇一台用戶所屬區域的區域負載均衡設備,告訴用戶向這台設備發起請求;

5. 區域負載均衡設備會根據用戶IP,訪問資源以及服務能力為用戶選擇一台合适的緩存服務器提供服務;

6. 全局負載均衡設備把服務器的IP地址返回給用戶;

7. 用戶向緩存服務器發起請求,緩存服務器響應用戶請求,将用戶所需内容傳送到用戶終端。如果這台緩存服務器上并沒有用戶想要的内容,那麼這台服務器就向網站的源服務器請求内容,源服務器返回内容給緩存服務器,并根據用戶自定義的緩存策略判斷是否進行緩存,并返回給用戶。

對于程序員而言,需要了解哪些資源比較适合使用CDN進行加速呢?我們都知道,一個完整的網頁資源包括CSS,JS,圖片,音頻,視頻和頁面等文件。JS、CSS、圖片、音頻和視頻等都是靜态文件,一個成熟的網站在上線過程中對靜态文件的變更是比較少的或是不會變更的,這些類型的文件是最适合使用CDN進行加速。通過CDN将這些靜态資源分發至全國各地的服務器節點,便可以實現從任何一個地方訪問網頁都可選擇最近的節點服務器進行下載資源。頁面文件主要分為靜态頁面文件和動态頁面文件。像各大公司的官網首頁,退出頁面等一般都是靜态文件,靜态頁面文件的結構一般是不會改變的,主要做展示用,這類靜态頁面文件也很适合做CDN加速。動态頁面文件指的是頁面會根據服務器端返回的響應内容進行動态渲染,例如JSP,PHP文件等。這些頁面文件内容是動态獲取的,所以并不适合做CDN加速。因為網頁的内容是動态變化的,在服務器端存儲的内容有效期是比較短的,這樣在浏覽器請求到CDN服務器上的内容後會總是以過期來處理,最終還是要向源站服務器發送請求,在這種情況下,CDN的存在就沒有意義了。訪問浏覽器頁面時,我們也可以按F12通過浏覽器控制台查看頁面資源的一些緩存配置。比如通過谷歌浏覽器訪問百度網站,打開控制台可以查看到頁面加載過程中請求的資源。選擇一個圖片資源并查看對應的頭部消息,如下圖所示:

為什麼現在都用cdn(科普什麼是CDN)1

如圖

返回消息中與緩存相關的字段有:Cache-Control、Etag、Expires、Last-Modifie、Pragma等,在這裡一一做解釋。

Expires: Sun, 03 Nov 2019 09:04:35 GMT;Expires為緩存過期時間配置,如果http響應報文中設置了Expires,在Expires過期之前,就可以避免和服務器之間的連接。此時,浏覽器無需向浏覽器發出請求,隻需要自己判斷手中的材料是否過期就可以了,完全不需要增加服務器的負擔。

Cache-Control: max-age=0;Cache-Control為緩存控制,Cache-Control除了在響應中使用,在請求中也可以使用。控制緩存的開關,用于标志請求或訪問中是否開啟了緩存,使用了哪種緩存方式。Cache-Control常使用no-cache,no-store,max-age=delta-seconds等配置類型;no-cache為告知(代理)服務器不直接使用緩存,要求向源服務器發起請求。no-store為所有的内容都不會緩存,max-age為告知服務器客戶端希望接收一個存在時間不大于delta-seconds秒的配置資源。

Last-Modified: Mon, 10 Jun 2019 09:12:15 GMT;Last-Modified為當前文件版本的上一次修改時間,服務器為了通知浏覽器當前文件的版本,會發送一個上次修改時間的标簽,這樣浏覽器就知道他收到的這個文件創建時間。

Etag: "2046392041";對應實體内容的一個實體标簽,與實體内容緊密相關,實體内容發生任何改變都會使值發生變化。ETag是一個文件的唯一标志符,就像一個哈希或者指紋,每個文件都有一個單獨的标志,隻要這個文件發生了改變,這個标志就會發生變化。主要為了解決 Last-Modified 無法解決的一些問題。比如一些文件也許會周期性的更改,但是他的内容并不改變(僅僅改變的修改時間),這個時候我們并不希望客戶端認為這個文件被修改了,而重新請求;或者某些文件修改非常頻繁,比如在秒以下的時間内進行修改,(比方說1s内修改了N次),If-Modified-Since能檢查到的粒度是s級的,這種修改無法判斷(或者說UNIX記錄MTIME隻能精确到秒),以及某些服務器不能精确的得到文件的最後修改時間等;

Pragma: no-cache;Pragma的值為no-cache時,表示禁用緩存;Pragma是舊産物,已經逐步抛棄,有些網站為了向下兼容還保留了這兩個字段。如果一個報文中同時出現Pragma和Cache-Control時,以Pragma為準。同時出現Cache-Control和Expires時,以Cache-Control為準。即優先級從高到低是 Pragma -> Cache-Control -> Expires。

當不使用CDN的時候,用戶在訪問網站的時候,浏覽器将網站中的圖片和靜态資源文件保存到本地,這樣用戶再次訪問該網站的時候,浏覽器就不用再下載全部的文件,減少了下載量,從而提高了頁面加載的速度。使用CDN後,将浏覽器訪問服務器的中間增加一層CDN,浏覽器訪問服務器時先檢查是否有本地緩存是否過期,如果過期,則向CDN邊緣節點發起請求,CDN邊緣節點會檢測用戶請求數據的緩存是否過期,如果沒有過期,則直接響應用戶請求;如果數據已經過期,那麼CDN還需要向源站發出回源請求,來拉取最新的數據。

浏覽器緩存内容中有Expires或者Cache-Control設置了max-age響應頭的時候,浏覽器就不會向服務器發起校驗請求,而是直接複用本地緩存。如果此時服務器進行了資源的更新,用戶就無法獲取到最新的資源,隻能通過強制刷新浏覽器緩存來跟服務器請求最新的資源。使用CDN緩存可以避免浏覽器緩存資源更新延遲的現象。CDN緩存不僅可以減少用戶的訪問延時,而且可以減少源服務器的負載,但需要注意的是,當源服務器資源更新後,如果CDN節點上緩存數據還未同步,用戶訪問到的依舊是過期的緩存資源,這會導緻用戶最終訪問出現偏差。此時需要手動刷新相關資源,使CDN緩存保持為最新的狀态。

浏覽器以最少的請求來獲取網頁的數據,并對所有沒有過期的内容直接使用本地緩存,從而減少了對服務器的請求。使用CDN技術,最大的好處就是加速了網站的訪問速度,使用戶與内容之間的物理距離縮短,以及用戶的等待時間縮短,從而提高用戶的體驗。

作者:曾建,目前就職于蘇甯易購,專注于CDN相關系統開發。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved