CDN的全稱是Content Delivery Network,即内容分發網絡。
其基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使内容傳輸的更快、更穩定。通過在網絡各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛拟網絡,CDN系統能夠實時地根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上。
CDN概念基本介紹
一 . CDN簡介
什麼是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節點上的資料緩存過期,保證用戶端在通路時,拉取到最新的資料。