web網站加速之CDN(Content Delivery Network)技術原理

來源:互聯網
上載者:User

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

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

     

     

  • 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緩衝後的網站的訪問過程變為:

  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.INA    ;; ANSWER SECTION:  img.alibaba.com.600INCNAMEimg.alibaba.com.edgesuite.net.  img.alibaba.com.edgesuite.net. 7191 INCNAMEimg.alibaba.com.georedirector.akadns.net.  img.alibaba.com.georedirector.akadns.net. 3592 IN CNAMEa1366.g.akamai.net.  a1366.g.akamai.net.12INA204.203.18.145  a1366.g.akamai.net.12INA204.203.18.160    ; 部分省略

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

     

  • 分析www.discovery.com網域名稱

     

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

      #dig www.discovery.com    ; 部分省略    ;; QUESTION SECTION:  ;www.discovery.com.INA    ;; ANSWER SECTION:  www.discovery.com.1077INCNAMEwww.discovery.com.edgesuite.net.  www.discovery.com.edgesuite.net. 21477 IN CNAMEa212.g.akamai.net.  a212.g.akamai.net.20INA204.203.18.154  a212.g.akamai.net.20INA204.203.18.147    ; 部分省略

    從上面查詢結果可以看出 www.discovery.com. IN CNAMEwww.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體系的成本和回報率.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.