CDN的全稱是Content Delivery Network,即內容分髮網絡。 其基本思路是儘可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各處放置節點伺服器所構成的在現有的互聯網基礎之上的一層智能虛擬網路,CDN系統能夠實時地根據網路流量和... ...
CDN概念基本介紹
一 . CDN簡介
什麼是CDN?
CDN的全稱是Content Delivery Network,即內容分髮網絡。
其基本思路是儘可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各處放置節點伺服器所構成的在現有的互聯網基礎之上的一層智能虛擬網路,CDN系統能夠實時地根據網路流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。
其目的是使用戶可就近取得所需內容,解決Internet網路擁擠的狀況,提高用戶訪問網站的響應速度。
為什麼需要CDN?
通常用戶滿意的網頁打開時間是在2秒以下。互聯網有一項著名的8秒原則。用戶在訪問Web網頁時
,如果時間超過8秒就會感到不耐煩,如果下載需要太長時間,他們就會放棄訪問。
CDN的優勢
(1)CDN節點解決了跨運營商和跨地域訪問的問題,訪問延時大大降低;
(2)大部分請求在CDN邊緣節點完成,CDN起到了分流作用,減輕了源站的負載。
二 . CDN的工作原理
傳統的瀏覽器訪問網站應步驟:
- 在瀏覽器輸入網址
- 瀏覽器請求dns伺服器,查詢到對應的IP
- 瀏覽器向伺服器發起TCP連接
- 瀏覽器通過建立的TCP連接發送HTTP協議報文
- 伺服器向瀏覽器發送頁面內容
- 瀏覽器將頁面展現出來
CDN用戶訪問流程:
1.用戶向瀏覽器輸入www.web.com這個功能變數名稱,瀏覽器第一次發現本地沒有dns緩存,則向網站的DNS伺服器請求;
2.網站的DNS功能變數名稱解析器設置了CNAME,指向了www.web.51cdn.com,請求指向了CDN網路中的智能DNS負載均衡系統;
3.智能DNS負載均衡系統解析功能變數名稱,把對用戶響應速度最快的IP節點返回給用戶;
4.用戶向該IP節點(CDN伺服器)發出請求;
5.由於是第一次訪問,CDN伺服器會向原web站點請求,並緩存內容;
6.請求結果發給用戶。
主要特點:
1、本地Cache加速
提高了企業站點(尤其含有大量圖片和靜態頁面站點)的訪問速度,並大大提高以上性質站點的穩定性
2、鏡像服務
消除了不同運營商之間互聯的瓶頸造成的影響,實現了跨運營商的網路加速,保證不同網路中的用戶都能得到良好的訪問質量。
3、遠程加速
遠程訪問用戶根據DNS負載均衡技術 智能自動選擇Cache伺服器,選擇最快的Cache伺服器,加快遠程訪問的速度
4、帶寬優化
自動生成伺服器的遠程Mirror(鏡像)cache伺服器,遠程用戶訪問時從cache伺服器上讀取數據,減少遠程訪問的帶寬、分擔網路流量、減輕原站點WEB伺服器負載等功能。
5、集群抗攻擊
廣泛分佈的CDN節點加上節點之間的智能冗餘機制,可以有效地預防黑客入侵以及降低各種D.D.o.S攻擊對網站的影響,同時保證較好的服務質量 。
CDN對網路的優化:
1.解決伺服器端的“第一公裡”問題
2.緩解甚至消除了不同運營商之間互聯的瓶頸造成的影響
3.減輕了各省的出口帶寬壓力
4.緩解了骨幹網的壓力
5.優化了網上熱點內容的分佈
第一公裡
是指萬維網流量向用戶傳送的第一個出口,是網站伺服器接入互聯網的鏈路所能提供的帶寬。
這個帶寬決定了一個 網站能為用戶提供的訪問速度和併發訪問量。如果業務繁忙,用戶的訪問數越多,擁塞越嚴重,網站會在最需要向用戶提供服務時失去用戶。
中間一公裡
代表互聯網中節點與節點之間的傳輸網路
最後一公裡
萬維網流量向用戶傳送的最後一段接入鏈路
三 . CDN的應用場景
網站站點/應用加速
站點或者應用中大量靜態資源的加速分發,建議將站點內容進行動靜分離,動態文件可以結合雲伺服器ECS,靜態資源如各類型圖片、html、css、js文件等,建議結合 對象存儲OSS 存儲海量靜態資源,可以有效加速內容載入速度,輕鬆搞定網站圖片、短視頻等內容分發
視音頻點播/大文件下載分發加速
支持各類文件的下載、分發,支持線上點播加速業務,如mp4、flv視頻文件或者平均單個文件大小在20M以上,主要的業務場景是視音頻點播、大文件下載(如安裝包下載)等,建議搭配對象存儲OSS使用,可提升回源速度,節約近2/3回源帶寬成本。
視頻直播加速(內測中)
視頻流媒體直播服務,支持媒資存儲、切片轉碼、訪問鑒權、內容分發加速一體化解決方案。結合彈性伸縮服務,及時調整伺服器帶寬,應對突發訪問流量;結合媒體轉碼服務,享受高速穩定的並行轉碼,且任務規模無縫擴展。目前CDN直播加速已服務內部用戶測試並優化,即將上線
移動應用加速
移動APP更新文件(apk文件)分發,移動APP內圖片、頁面、短視頻、UGC等內容的優化加速分發。提供httpDNS服務,避免DNS劫持並獲得實時精確的DNS解析結果,有效縮短用戶訪問時間,提升用戶體驗。
四 . CDN緩存
緩存是什麼?
緩存是一個到處都存在的用空間換時間的例子。通過使用多餘的空間,我們能夠獲取更快的速度。
首先,看看沒有網站沒有接入CDN時,用戶瀏覽器與伺服器是如何交互的:
用戶在瀏覽網站的時候,瀏覽器能夠在本地保存網站中的圖片或者其他文件的副本,這樣用戶再次訪問該網站的時候,瀏覽器就不用再下載全部的文件,減少了下載量意味著提高了頁面載入的速度。
中間加上一層CDN,那麼用戶瀏覽器與伺服器的交互如下:
客戶端瀏覽器先檢查是否有本地緩存是否過期,
如果過期,則向CDN邊緣節點發起請求,CDN邊緣節點會檢測用戶請求數據的緩存是否過期,如果沒有過期,則直接響應用戶請求,此時一個完成http請求結束;
如果數據已經過期,那麼CDN還需要向源站發出回源請求(back to the source request),來拉取最新的數據。
瀏覽器緩存策略
Expires策略
Expires是web伺服器 響應消息頭欄位,在響應http請求時告訴瀏覽器在過期時間前,瀏覽器可以直接從瀏覽器緩存讀取數據,而無需再次請求,它的值對應一個GMT(格林尼治時間),比如“Mon, 22 Jul 2012 11:15:08 GMT”來告訴瀏覽器資源緩存過期時間,如果還沒過該時間點則不發請求。
不過Expires是HTTP 1.0的東西。
現在瀏覽器都是預設HTTP 1.1的了。所以基本可以忽略它。
Expires有一個缺點,就是它的過期時間是伺服器的時間,比如我的客戶端時間和伺服器時間相差很大,那誤差就很大。
比如伺服器返回的是2016年7月16號過期,我的電腦時間被我修改了,快了一天為2016年7月17號,那客戶端緩存就過期了。所以它被Cache-Control:max-age=秒 替代了。
Cache-control策略
Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數據還是重新發請求到伺服器取數據。
只不過Cache-Control的選擇更多,設置更細緻,如果同時設置的話,其優先順序高於Expires。
Cache-Control可擁有如下值:
Public
任何情況下都得緩存該資源。
Private
指示對於單個用戶的整個或部分響應消息,不能被共用緩存處理。緩存只開放給某些特定的用戶,比如伺服器的用戶,其他用戶則不能緩存這些數據。
no-cache
指示請求或響應消息不能緩存,該選項並不是說可以設置”不緩存“,容易望文生義~。要求向伺服器發起新鮮度檢驗
no-store
用於防止重要的信息被無意的發佈。在請求消息中發送將使得請求和響應消息都不使用緩存,完全不存下來。主要用於一些機密文件
max-age
指示客戶端該端時間內緩存都是最新的。以秒為單位。比如:Cache-Control:max-age=120 表示2分鐘之後過期。
min-fresh
指示客戶端希望獲取一個在小於指定的時間內被更新過的資源,單位為秒:例如:Cache-Control:min-fresh =120 。向伺服器獲取2分鐘內被更新過的資源
max-stale
指示客戶端可以接收超出超時期間的響應消息。例如:Cache-Control:max-stale =120 ,向伺服器獲取超過緩存時間2分鐘的資源。
must-revalidate:作用與no-cache相同,但更嚴格,強制意味更明顯
Last-Modified:
標示這個響應資源的最後修改時間,web伺服器在響應請求時,告訴瀏覽器資源的最後修改時間。
If-Modified-Since:
當資源過期時(也就是Cache-Control:max-age=0,),發現資源具有Last-Modified聲明,則再次向web伺服器請求時帶上頭If-Modified-Since,表示請求時間。web伺服器收到請求後發現有頭If-Modified-Since 則與被請求資源的最後修改時間進行比對。若Last-Modified的時間較新,說明最後修改時間較新,說明資源又被改動過,則響應整的資源重新從伺服器讀取,而不是讀取緩存,返回200狀態嗎;若If-Modified-Since的時間比Last-Modified新或者相等,說明伺服器的內容沒有更新,直接讀取緩存即可,返回304狀態碼,告知瀏覽器繼續使用所保存的cache
Etag
通常情況下,通過修改時間來比較文件是可行的。但是在一些特殊情況,例如伺服器的時鐘發生了錯誤,伺服器時鐘進行修改,夏時制DST到來後伺服器時間沒有及時更新,這些都會引起通過修改時間比較文件版本的問題。
ETag可以用來解決這種問題。ETag是一個文件的唯一標誌符。就像一個哈希或者指紋,每個文件都有一個單獨的標誌,只要這個文件發生了改變,這個標誌就會發生變化。
瀏覽器緩存刷新
在地址欄中輸入網址後按回車或點擊轉到按鈕
瀏覽器以最少的請求來獲取網頁的數據,瀏覽器會對所有沒有過期的內容直接使用本地緩存,從而減少了對瀏覽器的請求。所以,Expires,max-age標記只對這種方式有效。按F5或瀏覽器刷新按鈕
瀏覽器會在請求中附加必要的緩存協商,但不允許瀏覽器直接使用本地緩存,它能夠讓 Last-Modified、ETag發揮效果,但是對Expires無效。按Ctrl+F5或按Ctrl並點擊刷新按鈕
這種方式就是強制刷新,總會發起一個全新的請求,不使用任何緩存。
CDN緩存
瀏覽器本地緩存失效後,瀏覽器會向CDN邊緣節點發起請求。類似瀏覽器緩存,CDN邊緣節點也存在著一套緩存機制。
CDN緩存的缺點
CDN的分流作用不僅減少了用戶的訪問延時,也減少的源站的負載。但其缺點也很明顯:當網站更新時,如果CDN節點上數據沒有及時更新,即便用戶再瀏覽器使用Ctrl+F5的方式使瀏覽器端的緩存失效,也會因為CDN邊緣節點沒有同步最新數據而導致用戶訪問異常。
CDN的緩存機制
CDN邊緣節點緩存策略因服務商不同而不同,但一般都會遵循http標準協議,通過http響應頭中的Cache-control: max-age的欄位來設置CDN邊緣節點數據緩存時間。
當客戶端向CDN節點請求數據時,CDN節點會判斷緩存數據是否過期,若緩存數據並沒有過期,則直接將緩存數據返回給客戶端;否則,CDN節點就會向源站發出回源請求,從源站拉取最新數據,更新本地緩存,並將最新數據返回給客戶端。所以,如果我們修改了內容,最好加個版本號,來容CDN重新獲取資源,從而減少不必要的麻煩,比如 :
app.js?v=20171114 或者 style.css?v=20171114
CDN緩存刷新
CDN邊緣節點對開發者是透明的,相比於瀏覽器Ctrl+F5的強制刷新來使瀏覽器本地緩存失效,開發者可以通過CDN服務商提供的“刷新緩存”介面來達到清理CDN邊緣節點緩存的目的。這樣開發者在更新數據後,可以使用“刷新緩存”功能來強制CDN節點上的數據緩存過期,保證客戶端在訪問時,拉取到最新的數據。