CDN及CDN加速原理

本想本身寫這個主題的文章,但網上已經有人寫了一篇很是好的文章,以爲難以望其項背。就沒有必要再寫,直接轉載以下:php

在不一樣地域的用戶訪問網站的響應速度存在差別,爲了提升用戶訪問的響應速度、優化現有Internet中信息的流動,須要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度,從最接近用戶的地方得到所需的信息,完全解決網絡擁塞,提升響應速度,是目前大型網站使用的流行的應用方案.html

1. CDN 概述

CDN的全稱是Content Delivery Network,即內容分發網絡。其目的是經過在現有的Internet中增長一層新的CACHE(緩存)層,將網站的內容發佈到最接近用戶的網絡」邊緣「的節點,使用戶能夠就近取得所需的內容,提升用戶訪問網站的響應速度。從技術上全面解決因爲網絡帶寬小、用戶訪問量大、網點分佈不均等緣由,提升用戶訪問網站的響應速度。前端

 


CDN網絡節點 
CDN網絡節點 

 

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緩存訪問方式與未加緩存訪問方式的差異: 網絡

傳統訪問過程傳統訪問過程

 

由上圖可見,用戶訪問未使用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訪問過程CDN訪問過程

 

經過上圖,咱們能夠了解到,使用了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 實例分析

3.1 分析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.145
a1366.g.akamai.net. 12  IN  A   204.203.18.160

; 部分省略

 

從上面查詢結果能夠看出 img.alibaba.com. CNAME img.alibaba.com.edgesuite.net. 後面的CNAME是由 Akamai(CDN服務商) 去跳轉到 智能調度器上的.

3。2 分析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.154
a212.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節點,列表以下:

域名 運營商(view) 服務地址
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記錄不同,其餘的都是同樣.

域名 zone配置文件 A記錄地址
www.cdntest.com cnc_cdntest.zone 192.168.0.1
www.cdntest.com tel_cdntest.zone 192.168.0.2
www.cdntest.com edu_cdntest.zone 192.168.0.3
www.cdntest.com default_cdntest.zone 192.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://blog.csdn.net/luoweifu/article/details/51031099

相關文章
相關標籤/搜索