CDN概念基本介紹

来源:http://www.cnblogs.com/xinxiucan/archive/2017/11/14/7832368.html
-Advertisement-
Play Games

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的工作原理

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

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

主要特點:
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時,用戶瀏覽器與伺服器是如何交互的:

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java學習路線: 作為Java程式員來說,最痛苦的事情莫過於可以選擇的範圍太廣,可以讀的書太多,往往容易無所適從。我想就我自己讀過的技術書籍中挑選出來一些,按照學習的先後順序,推薦給大家,特別是那些想不斷提高自己技術水平的Java程式員們。此外,大家可以加入457036818交流群,互相分享一下關 ...
  • Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the d ...
  • 1 Servlet簡介 Servlet(服務端小程式)是使用Java語言編寫的服務端小程式,可以像JSP一樣,生成動態的Web頁; Servlet運行在伺服器端,並由伺服器調用執行,是一種按照Servlet標準開發的類; Servlet程式是Java對CGI程式的實現,與傳統的CGI程式的多線程處理 ...
  • 一、關於Docker 什麼是Docker?Docker 採用go語言編寫,是一個開源的應用容器引擎。讓開發者可以快速打包他們的應用以及依賴包到一個封裝的可移植的容器Image中,然後發佈到任何流行的機器( Linux ,windows,Mac等)上,也可以實現虛擬化。容器是使用完全獨立的沙箱機制,相 ...
  • package ty; abstract class A { public abstract void fun(); }; package ty; class B extends A { public void fun() { System.out.println("what is your nam... ...
  • 介紹 釘釘,阿裡巴巴出品,專為中國企業打造的免費智能移動辦公平臺,含PC版,Web版和手機版。智能辦公電話,消息已讀未讀,DING消息任務管理,讓溝通更高效;移動辦公考勤,簽到,審批,企業郵箱,企業網盤,企業通訊錄,讓工作更簡單;酷公司,用釘釘,隨時隨地移動辦公。 由於目前的版本郵件警報暫時走不通, ...
  • 負載均衡集群企業級應用實戰-LVS 實現基於LVS負載均衡集群的電商網站架構 隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,網站已經不堪重負,響應緩慢,面對此場景,單純靠單台LNMP的架構已經無法承載更多的用戶訪問,此時需要用負載均衡技術,對網站容量 ...
  • 恢復內容開始 設計模式(design patterns)是一套被反覆使用,多數人知曉的,經過分類編目的,使用設計模式是 為了可重用代碼,讓代碼更容易更容易被他人理解,保證代碼可靠性。 設計模式一共有23種: 1. 設計者模式分類 (三大類) 創建者模式: 一共分5種 工廠方法模式 , 抽象工廠模式, ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...