CDN概念基本介紹

CDN概念基本介紹

一 . CDN簡介

什麼是CDN?css

CDN的全稱是Content Delivery Network,即內容分發網絡。html

其基本思路是儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。經過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統可以實時地根據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近的服務節點上。web

其目的是使用戶可就近取得所需內容,解決Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。瀏覽器

爲何須要CDN?緩存

一般用戶滿意的網頁打開時間是在2秒如下。互聯網有一項著名的8秒原則。用戶在訪問Web網頁時
,若是時間超過8秒就會感到不耐煩,若是下載須要太長時間,他們就會放棄訪問。服務器

CDN的優點網絡

(1)CDN節點解決了跨運營商和跨地域訪問的問題,訪問延時大大下降;
(2)大部分請求在CDN邊緣節點完成,CDN起到了分流做用,減輕了源站的負載。併發

二 . CDN的工做原理

傳統的瀏覽器訪問網站應步驟:app

  1. 在瀏覽器輸入網址
  1. 瀏覽器請求dns服務器,查詢到對應的IP
  2. 瀏覽器向服務器發起TCP鏈接
  3. 瀏覽器經過創建的TCP鏈接發送HTTP協議報文
  4. 服務器向瀏覽器發送頁面內容
  5. 瀏覽器將頁面展示出來

圖片1.png

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.請求結果發給用戶。

主要特色:
一、本地Cache加速
提升了企業站點(尤爲含有大量圖片和靜態頁面站點)的訪問速度,並大大提升以上性質站點的穩定性
二、鏡像服務
消除了不一樣運營商之間互聯的瓶頸形成的影響,實現了跨運營商的網絡加速,保證不一樣網絡中的用戶都能獲得良好的訪問質量。
三、遠程加速
遠程訪問用戶根據DNS負載均衡技術 智能自動選擇Cache服務器,選擇最快的Cache服務器,加快遠程訪問的速度
四、帶寬優化
自動生成服務器的遠程Mirror(鏡像)cache服務器,遠程用戶訪問時從cache服務器上讀取數據,減小遠程訪問的帶寬、分擔網絡流量、減輕原站點WEB服務器負載等功能。
五、集羣抗攻擊
普遍分佈的CDN節點加上節點之間的智能冗餘機制,能夠有效地預防黑客入侵以及下降各類D.D.o.S攻擊對網站的影響,同時保證較好的服務質量 。

CDN對網絡的優化:

1.解決服務器端的「第一千米」問題

2.緩解甚至消除了不一樣運營商之間互聯的瓶頸形成的影響

3.減輕了各省的出口帶寬壓力

4.緩解了骨幹網的壓力

5.優化了網上熱點內容的分佈

第一千米
是指萬維網流量向用戶傳送的第一個出口,是網站服務器接入互聯網的鏈路所能提供的帶寬。
這個帶寬決定了一個 網站能爲用戶提供的訪問速度和併發訪問量。若是業務繁忙,用戶的訪問數越多,擁塞越嚴重,網站會在最須要向用戶提供服務時失去用戶。

中間一千米
表明互聯網中節點與節點之間的傳輸網絡

最後一千米
萬維網流量向用戶傳送的最後一段接入鏈路

三 . CDN的應用場景

網站站點/應用加速

站點或者應用中大量靜態資源的加速分發,建議將站點內容進行動靜分離,動態文件能夠結合雲服務器ECS,靜態資源如各種型圖片、html、css、js文件等,建議結合 對象存儲OSS 存儲海量靜態資源,能夠有效加速內容加載速度,輕鬆搞定網站圖片、短視頻等內容分發

視音頻點播/大文件下載分發加速

支持各種文件的下載、分發,支持在線點播加速業務,如mp四、flv視頻文件或者平均單個文件大小在20M以上,主要的業務場景是視音頻點播、大文件下載(如安裝包下載)等,建議搭配對象存儲OSS使用,可提高回源速度,節約近2/3回源帶寬成本。

視頻直播加速(內測中)

視頻流媒體直播服務,支持媒資存儲、切片轉碼、訪問鑑權、內容分發加速一體化解決方案。結合彈性伸縮服務,及時調整服務器帶寬,應對突發訪問流量;結合媒體轉碼服務,享受高速穩定的並行轉碼,且任務規模無縫擴展。目前CDN直播加速已服務內部用戶測試並優化,即將上線

移動應用加速

移動APP更新文件(apk文件)分發,移動APP內圖片、頁面、短視頻、UGC等內容的優化加速分發。提供httpDNS服務,避免DNS劫持並得到實時精確的DNS解析結果,有效縮短用戶訪問時間,提高用戶體驗。

四 . CDN緩存

緩存是什麼?

緩存是一個處處都存在的用空間換時間的例子。經過使用多餘的空間,咱們可以獲取更快的速度。
首先,看看沒有網站沒有接入CDN時,用戶瀏覽器與服務器是如何交互的:

1.png

用戶在瀏覽網站的時候,瀏覽器可以在本地保存網站中的圖片或者其餘文件的副本,這樣用戶再次訪問該網站的時候,瀏覽器就不用再下載所有的文件,減小了下載量意味着提升了頁面加載的速度。

中間加上一層CDN,那麼用戶瀏覽器與服務器的交互以下:

2.png

客戶端瀏覽器先檢查是否有本地緩存是否過時,
若是過時,則向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是一個文件的惟一標誌符。就像一個哈希或者指紋,每一個文件都有一個單獨的標誌,只要這個文件發生了改變,這個標誌就會發生變化。

瀏覽器緩存刷新

  1. 在地址欄中輸入網址後按回車或點擊轉到按鈕
    瀏覽器以最少的請求來獲取網頁的數據,瀏覽器會對全部沒有過時的內容直接使用本地緩存,從而減小了對瀏覽器的請求。因此,Expires,max-age標記只對這種方式有效。

  2. 按F5或瀏覽器刷新按鈕
    瀏覽器會在請求中附加必要的緩存協商,但不容許瀏覽器直接使用本地緩存,它可以讓 Last-Modified、ETag發揮效果,可是對Expires無效。

  3. 按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節點上的數據緩存過時,保證客戶端在訪問時,拉取到最新的數據。

相關文章
相關標籤/搜索