CDN架構以及原理分析

詳見: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61?

在不同地域的用戶訪問網站的響應速度存在差異,為了提高用戶訪問的響應速度、優化現有Internet中信息的流動,需要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度,從最接近用戶的地方獲得所需的信息,徹底解決網絡擁塞,提高響應速度,是目前大型網站使用的流行的應用方案.

1. CDN 概述

  • CDN的全稱是Content Delivery Network,即內容分發網絡。其目的是通過在現有的Internet中增加一層新的CACHE(緩存)層,將網站的內容發布到最接近用戶的網絡"邊緣"的節點,使用戶可以就近取得所需的內容,提高用戶訪問網站的響應速度。從技術上全面解決由于網絡帶寬小、用戶訪問量大、網點分布不均等原因,提高用戶訪問網站的響應速度。

    ?

    cdn_overview.gif

    ?

  • Cache層的技術,消除數據峰值訪問造成的結點設備阻塞。Cache服務器具有緩存功能,所以大部分網頁對象(Web page object),如html, htm, php等頁面文件,gif,tif,png,bmp等圖片文件,以及其他格式的文件,在有效期(TTL)內,對于重復的訪問,不必從原始網站重新傳送文件實體, 只需通過簡單的認證(Freshness Validation)- 傳送幾十字節的Header,即可將本地的副本直接傳送給訪問者。由于緩存服務器通常部署在靠近用戶端,所以能獲得近似局域網的響應速度,并有效減少廣域帶寬的消耗。不僅能提高響應速度,節約帶寬,對于加速Web服務器,有效減輕源服務器的負載是非常有效的。

    ?

  • 根據加速對象不同,分為 客戶端加速 和 服務器加速

    ?

    • 客戶端加速?: Cache部署在網絡出口處,把常訪問的內容緩存在本地,提高響應速度和節約帶寬;
    • 服務器加速?: Cache部署在服務器前端,作為Web服務器的代理緩存機,提高Web服務器的性能,加速訪問速度?
      如果多臺Cache加速服務器且分布在不同地域,需要通過有效地機制管理Cache網絡,引導用戶就近訪問(比如通過DNS引導用戶),全局負載均衡流量,這是CDN內容傳輸網絡的基本思想.

      ?

  • CDN對網絡的優化作用主要體現在如下幾個方面  - 解決服務器端的“第一公里”問題  - 緩解甚至消除了不同運營商之間互聯的瓶頸造成的影響  - 減輕了各省的出口帶寬壓力  - 緩解了骨干網的壓力  - 優化了網上熱點內容的分布

2. CDN 的工作原理

2.1. 傳統訪問過程(未加速緩存服務)

我們先看傳統的未加緩存服務的訪問過程,以便了解CDN緩存訪問方式與未加緩存訪問方式的差別:

normal.png

由上圖可見,用戶訪問未使用CDN緩存網站的過程為:

  1. 用戶輸入訪問的域名,操作系統向?LocalDns?查詢域名的ip地址.
  2. LocalDns向?ROOT DNS?查詢域名的授權服務器(這里假設LocalDns緩存過期)
  3. ROOT DNS將域名授權dns記錄回應給?LocalDns
  4. LocalDns得到域名的授權dns記錄后,繼續向域名授權dns查詢域名的ip地址
  5. 域名授權dns 查詢域名記錄后,回應給?LocalDns
  6. LocalDns?將得到的域名ip地址,回應給 用戶端
  7. 用戶得到域名ip地址后,訪問站點服務器
  8. 站點服務器應答請求,將內容返回給客戶端.

2.2. CDN訪問過程(使用緩存服務)

CDN網絡是在用戶和服務器之間增加Cache層,主要是通過接管DNS實現,將用戶的請求引導到Cache上獲得源服務器的數據
下面讓我們看看訪問使用CDN緩存后的網站的過程:

cdn.png

通過上圖,我們可以了解到,使用了CDN緩存后的網站的訪問過程變為:

  1. 用戶輸入訪問的域名,操作系統向?LocalDns?查詢域名的ip地址.
  2. LocalDns向?ROOT DNS?查詢域名的授權服務器(這里假設LocalDns緩存過期)
  3. ROOT DNS將域名授權dns記錄回應給?LocalDns
  4. LocalDns得到域名的授權dns記錄后,繼續向域名授權dns查詢域名的ip地址
  5. 域名授權dns 查詢域名記錄后(一般是CNAME),回應給?LocalDns
  6. LocalDns?得到域名記錄后,向智能調度DNS查詢域名的ip地址
  7. 智能調度DNS 根據一定的算法和策略(比如靜態拓撲,容量等),將最適合的CDN節點ip地址回應給?LocalDns
  8. LocalDns?將得到的域名ip地址,回應給 用戶端
  9. 用戶得到域名ip地址后,訪問站點服務器
  10. CDN節點服務器應答請求,將內容返回給客戶端.(緩存服務器一方面在本地進行保存,以備以后使用,二方面把獲取的數據返回給客戶端,完成數據服務過程)

通過以上的分析我們可以得到,為了實現對普通用戶透明(使用緩存后用戶客戶端無需進行任何設置)訪問,需要使用DNS(域名解析)來引導用戶來訪問Cache服務器,以實現透明的加速服務. 由于用戶訪問網站的第一步就是?域名解析?,所以通過修改dns來引導用戶訪問是最簡單有效的方式.

2.3. CDN網絡的組成要素

對于普通的Internet用戶,每個CDN節點就相當于一個放置在它周圍的網站服務器.?
通過對dns的接管,用戶的請求被透明地指向離他最近的節點,節點中CDN服務器會像網站的原始服務器一樣,響應用戶的請求.?
由于它離用戶更近,因而響應時間必然更快.

從上面圖中 虛線圈起來的那塊,就是CDN層,這層是位于 用戶端 和 站點服務器之間.

  • 智能調度DNS(比如f5的3DNS)

    ?

    智能調度DNS是CDN服務中的關鍵系統.當用戶訪問加入CDN服務的網站時,域名解析請求將最終由 智能調度DNS 負責處理.
    它通過一組預先定義好的策略,將當時最接近用戶的節點地址提供給用戶,使用戶可以得到快速的服務.
    同時它需要與分布在各地的CDN節點保持通信,跟蹤各節點的健康狀態,容量等,確保將用戶的請求分配到就近可用的節點上.

    ?

  • 緩存功能服務
    • 負載均衡設備(如lvs,F5的BIG/IP)
    • 內容Cache服務器(如squid)
    • 共享存儲(根據緩存數據量多少決定是否需要)

3. CDN 智能調度Dns 實例分析

  • 分析img.alibaba.com域名

    ?

    在系統中,執行dig命令,輸出如下:

    ?

      #dig img.alibaba.com       ; 部分省略;; QUESTION SECTION:;img.alibaba.com.		IN	A;; ANSWER SECTION:img.alibaba.com.	600	IN	CNAME	img.alibaba.com.edgesuite.net.img.alibaba.com.edgesuite.net. 7191 IN	CNAME	img.alibaba.com.georedirector.akadns.net.img.alibaba.com.georedirector.akadns.net. 3592 IN CNAME	a1366.g.akamai.net.a1366.g.akamai.net.	12	IN	A	204.203.18.145a1366.g.akamai.net.	12	IN	A	204.203.18.160; 部分省略
    
    從上面查詢結果可以看出 img.alibaba.com. CNAME img.alibaba.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服務商) 去跳轉到 智能調度器上的.

    ?

  • 分析www.discovery.com域名

    ?

    在系統中,繼續執行dig命令,輸出如下:
      #dig www.discovery.com; 部分省略;; QUESTION SECTION:;www.discovery.com.		IN	A;; ANSWER SECTION:www.discovery.com.	1077	IN	CNAME	www.discovery.com.edgesuite.net.www.discovery.com.edgesuite.net. 21477 IN CNAME	a212.g.akamai.net.a212.g.akamai.net.	20	IN	A	204.203.18.154a212.g.akamai.net.	20	IN	A	204.203.18.147; 部分省略
    
    從上面查詢結果可以看出?www.discovery.com. IN CNAME www.discovery.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服務商) 去跳轉到 智能調度器上的.

    ?

    總結:一般來說,網站需要使用到CDN服務時,一般都是將需要加速訪問的域名 CNAME到 CDN服務商的域名上.
    緩存服務和調度功能都是由服務商來完成.

4. CDN的 智能調度Dns 簡化實現

4.1. 調度策略說明

在用戶請求解析域名的時候,智能DNS判斷用戶的LocalDns的IP,然后跟DNS服務器內部的IP表范圍匹配一下,看看用戶是電信還是網通用戶,然后給用戶返回對應的IP地址?
這里使用的是靜態拓撲的方法,只是判斷LocalDns的IP.要想使用更復雜的調度算法可以考慮商業產品,如F5的3DNS.

4.2. 假設CDN節點規劃

在這里我們將使用 BIND 的View功能來實現運營商的區分,假設我們在每個運營商的機房都放有一個CDN節點,列表如下:

www.cdntest.com網通(CNC)192.168.0.1
www.cdntest.com電信(TELECOM)192.168.0.2
www.cdntest.com教育網(EDU)192.168.0.3
www.cdntest.com默認(ANY)192.168.0.4

4.3. bind view 配置

  • 以下是named.conf配置文件的部分截取,只是涉及到?View?的部分,其他細節可參考互聯網.

    ?

      acl "cnc_iprange"{   //定義ip范圍(網通)192.168.1.0/24;  192.168.2.0/24;//此處只是示例,其他省略};  acl "tel_iprange"{  //定義ip范圍(電信)192.168.3.0/24;  192.168.4.0/24;//其他省略};acl "edu_iprange"{  //定義ip范圍(教育網)192.168.5.0/24;  192.168.6.0/24;//其他省略};acl "default_iprange"{ //定義ip范圍(默認)192.168.7.0/24;  192.168.8.0/24;//其他省略}; view "CNC" {Match-clients{cnc_iprange};zone "." IN {type hint;file "named.root";};zone "localhost" IN {type master;file "localhost.zone";allow-update { none; };};zone "cdntest.com" IN {type master;file "cnc_cdntest.zone";};};view "TEL" {Match-clients{tel_iprange};zone "." IN {type hint;file "named.root";};zone "localhost" IN {type master;file "localhost.zone";allow-update { none; };};zone "cdntest.com" IN {type master;file "tel_cdntest.zone";};};view "EDU" {Match-clients{edu_iprange};zone "." IN {type hint;file "named.root";};zone "localhost" IN {type master;file "localhost.zone";allow-update { none; };};zone "cdntest.com" IN {type master;file "edu_cdntest.zone";};};view "DEFAULT" {Match-clients{default_iprange};zone "." IN {type hint;file "named.root";};zone "localhost" IN {type master;file "localhost.zone";allow-update { none; };};zone "cdntest.com" IN {type master;file "default_cdntest.zone";};};
    
  • zone文件的配置說明

    ?

    這4個zone配置文件(cnc_cdntest.zone,tel_cdntest.zone,edu_cdntest.zone,default_cdntest.zone)中,只有www.cndtest.com的A記錄不一樣,其他的都是一樣.

    ?

www.cdntest.comcnc_cdntest.zone192.168.0.1
www.cdntest.comtel_cdntest.zone192.168.0.2
www.cdntest.comedu_cdntest.zone192.168.0.3
www.cdntest.comdefault_cdntest.zone192.168.0.4

以上只列出了?www.cdntest.com?的A記錄地址,其他關于zone的語法 請參考互聯網.

  • 域名解析流程簡要說明

    ?

  1. 用戶向?LocalDns?查詢域名?www.cdntest.com
  2. LocalDns?向 授權DNS 查詢www.cdntest.com
  3. 授權DNS 判斷用戶使用的 LocalDns的ip地址,匹配上述設置的ip范圍,如果范圍在網通,就將網通對應的ip地址(192.168.0.1),回應給LocalDns(其他依此類推)
  4. LocalDns?將得到的域名ip地址,回應給 用戶端 (域名解析完成)

    ?

    說明:再此過程中,我們簡化了主DNS?到?智能DNS?之間的CNAME過程(為了簡要說明問題).?
    這里使用的是靜態拓撲(根據ip范圍)的方法,也稱為地域化方法,只是判斷LocalDns的IP.

    ?

  • 此簡化方案中的存在的問題

    ?

  1. 如果用戶設置錯誤的dns,可能會導致用戶訪問比原來慢(比如網通用戶設置了電信的DNS)
  2. 不能判斷CDN節點服務器的健康狀態和容量狀態,可能會把用戶定向到不可用的CDN節點
  3. 由于靜態拓撲方法,可能存在用戶訪問的CDN節點不是最優化和最快的
  4. .....可能還有其他想不到的....

5. 總結(Summary)

在建立CDN網路時,最關鍵的就是?智能調度DNS,這個是CND網絡總協調,通過高效的調度算法,可以使用戶得到最佳的訪問體驗.
其次就是 CND節點的管理,比如涉及到 內容的同步機制,配置文件的更新等等,都需要有一套機制來保證.
當然在大型網站中,也要考建設CDN體系的成本和回報率.

轉自:http://www.51know.info/system_performance/cdn/cdn.html

轉載于:https://www.cnblogs.com/grefr/p/5046310.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256256.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256256.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于VS2019的Eigen庫安裝詳解

概念 Eigen是一個C開源線性代數庫,以提供有關矩陣的的線性代數運算,解方程等功能。Eigen在很多領域如信號處理,圖像處理,深度學習等起到重要作用,學習其操作方法,可以靈活的對線性代數、矩陣和矢量將進行計…

【圖像處理】——Python圖像分割邊緣檢測算法之二階梯度算子(laplace、log、dog算子)

目錄 一、二階算子簡介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常見的運算符功能匯總

介紹 C#有很多運算符,可分為以下幾種:算數運算符,比較運算符,條件運算符,賦值運算符,邏輯運算符。下面對不常見的運算符進行匯總。 概念 條件運算符 ?(可空類型修飾符) 引用類型可以使用空引用表示一…

SQL Server2012中如何通過bak文件還原SQL Server2012數據庫

1 登陸完數據庫后,不要新建數據庫,直接點擊“數據庫”然后右擊"還原數據庫"。 2 在"源"選項中選擇"設備"。 3 選擇相應的bak文件并進行添加。 4 添加完之后點擊確定,注意在目標這一欄中數據庫名稱都可以不用寫…

【圖像處理】——Python OpenCV實現形態學膨脹、腐蝕開閉操作(可以用于圖像濾波、圖像分割等)

轉載博客請注明詳細地址,謝謝本文講了形態學基本操作膨脹腐蝕開閉操作的原理本文講解了用OpenCV-Python實現形態學操作目錄 一、形態學簡述 1、簡介 2、一些基本定義 3、結構元素

thrift服務windows環境編譯失敗

為什么80%的碼農都做不了架構師&#xff1f;>>> 修改maven的pom文件 <!--thrift服務 api 層&#xff0c;開發時 windows系統需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

編譯包含Google Play服務App的SDK版本問題

編譯包含Google Play服務App的SDK版本問題 錯誤信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’這個錯誤通常是App引用了Google Play時候發生。Xamarin編譯該類App&#xff0c;需要目標SDK版本必須是21或者更高…

《第一行代碼》學習筆記35-服務Service(2)

1.Android的UI線程不安全&#xff0c;想要更新應用程序里的UI元素&#xff0c;則須在主線程中進行&#xff0c;否則會出現異常。 2.Android不允許在子線程里進行UI操作&#xff0c;對于該情況&#xff0c;Android提供了一套異步消息處理機制&#xff0c;完美解決在子線程中進行…

C#中HP-Socket通信組件詳解

概念 HP-Socket 是國產的TCP、UDP和HTTP 通信框架&#xff0c;包含服務端、客戶端和 Agent 組件&#xff0c;提供 C/C、C#、Java、Python 等多種編程語言接口。 與傳統TCP通訊區別的是HP-Socket 對通信層做到了完全封裝&#xff0c;程序不必關注通信層的任何細節&#xff1b;H…

mail發送的內容顯示為附件的解決辦法

利用命令: cat data.mail | mail -v -s "mail test" xxxqq.com 發送的內容在收件箱中顯示為附件tcmimi.xxx.bin. 這是因為mail期望文件輸入的是unix格式的文本,也就是說換行符使用\n而不是\r\n,如果文本中包含\r(使用set list,顯示為^M),這種情況下mail會認為該文件…

【圖像處理】——Python+opencv實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(findcontours函數和contourArea函數)

目錄 一、函數 cv.findContours 二、輪廓層級(返回參數hierarchy) 三、輪廓尋找方式 1. RETR_LIST 2. RETR_TREE

基于C#的ico圖標制作與應用

一、簡介 ICO是什么 ICO 是 Windows 開發的一種圖標格式&#xff0c;是一種可以存儲多張圖案、多尺寸、多色板的圖標文件。 一般用IcoFX軟件來創建或修改ico文件。 點擊下載 Ico文件創建與應用 1.單擊打開按鈕&#xff0c;選擇一個圖像文件&#xff0c;確定后一般出現以下…

第5章--高級數據管理

5.1 數值和字符處理函數 常用的數學函數 統計函數 例子&#xff1a; > x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949 默認情況下&#xff0c;函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化&#xff1a; newdata <- scal…

在思科無線控制器上查看5GHz和2.4GHz的客戶端數量

在圖形界面下找了好長時間也沒有看到在哪里&#xff0c;在CLI界面下找到了相應的命令&#xff0c;命令如下&#xff1a; (Cisco Controller) >show client ap 802.11a allMAC Address AP Id Status WLAN Id Authenticated ----------------- ------ -…

【圖像處理】——實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(connectedComponentsWithStats()函數和connectedComponents()函數)

目錄 一、cv2.connectedComponents() 函數原型: 輸入參數解析: 返回參數解析: 二、cv2.connectedC

Halcon閾值分割方法簡析

1. 基于直方圖的自動閾值分割 1.1 關鍵算子 auto_threshold(Image : Regions : Sigma : )&#xff1a;使用多閾值分割單通道圖像。 首先&#xff0c;計算圖像的灰度直方圖。 然后&#xff0c;使用標準差為Sigma的一維高斯濾波器對直方圖進行濾波。 進而&#xff0c;從直方圖中…

GSM BTS Hacking: 利用BladeRF和開源BTS 5搭建基站

GSM BTS Hacking: 利用BladeRF和開源BTS 5搭建基站 引文 如果你已經購買了Nuand&#xff08;官方&#xff09;BladeRF x40&#xff0c;那么就可以在上面運行OpenBTS并可以輸入一些指令來完成一些任務。一般來說HackRF&#xff0c;是一款覆蓋頻率最寬的SDR板卡。它幾乎所有的信息…

夜深人靜,想規劃一下短期

截止寫到這里的時候&#xff0c;已經是農歷的十一月初六了&#xff0c;算算時間&#xff0c;距離過年也不太遙遠了。就只有短短50多天左右。 很多事想做沒有時間&#xff0c;很多程序要改&#xff0c;沒有時間&#xff1b;很多想法想付諸行動&#xff0c;總是半途而廢。時間久這…

【圖像處理】——Python+opencv實現提取圖像的幾何特征(面積、周長、細長度、區間占空比、重心、不變矩等)

轉載請注明詳細地址本文簡單介紹了圖像常見幾何特征的概念以及求解方法本文介紹了Python和opencv求解幾何特征的常用方法目錄 其他形狀外接輪廓的方法可以參考:《OpenCV-Python——第17.3章:輪廓形狀擬合(邊界矩形,最小外接圓...)及性質》 一、獲得輪廓 二、面積 1、c…

Linux 中斷處理淺析

最近在研究異步消息處理, 突然想起linux內核的中斷處理, 里面由始至終都貫穿著”重要的事馬上做, 不重要的事推后做”的異步處理思想. 于是整理一下~第一階段&#xff0d;&#xff0d;獲取中斷號每個CPU都有響應中斷的能力, 每個CPU響應中斷時都走相同的流程. 這個流程就是內核…