Jquery中文網 伊蒂哈德7比2 www.jvkwgx.com.cn
Jquery中文網 >  服務器技術  >  應用加速  >  正文 web網站加速之CDN技術原理

阿布扎比瓦赫达对吉达伊蒂哈德:web網站加速之CDN技術原理

發布時間:2014-08-15   編輯:伊蒂哈德7比2 www.jvkwgx.com.cn
web網站加速之CDN技術原理

伊蒂哈德7比2 www.jvkwgx.com.cn         CDN全稱Content Delivery Network,即內容分發網絡。其基本思路是盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。

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

1. CDN 概述

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

  img1

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

img2

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

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

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

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

img3

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

    用戶輸入訪問的域名,操作系統向 LocalDns 查詢域名的ip地址.
    LocalDns向 ROOT DNS 查詢域名的授權服務器(這里假設LocalDns緩存過期)
    ROOT DNS將域名授權dns記錄回應給 LocalDns
    LocalDns得到域名的授權dns記錄后,繼續向域名授權dns查詢域名的ip地址
    域名授權dns 查詢域名記錄后(一般是CNAME),回應給 LocalDns
    LocalDns 得到域名記錄后,向智能調度DNS查詢域名的ip地址
    智能調度DNS 根據一定的算法和策略(比如靜態拓撲,容量等),將最適合的CDN節點ip地址回應給 LocalDns
    LocalDns 將得到的域名ip地址,回應給 用戶端
    用戶得到域名ip地址后,訪問站點服務器
    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.145
      a1366.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.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的語法 請參考互聯網.

    域名解析流程簡要說明

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

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

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

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

5. 總結(Summary)

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

本文轉自: //www.51know.info/system_performance/cdn/cdn.html
作者:北方人

您可能感興趣的文章:
web網站加速之CDN技術原理
squid反向代理配置(web服務器的前端內容緩存器)
(圖文)IIS6.0壓縮配置
怎么讓百度快速收錄新網站
用緩沖技術提高JSP應用的性能和穩定性
apache啟用gzip壓縮方法
IIS壓縮及性能優化
php添加關聯鏈接的代碼
jQuery cdn使用介紹
web開發人員學習jQuery的6大理由及jQuery的優勢介紹

[關閉]