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

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

1. CDN 概述

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

wKiom1aUgjyis4XlAACHpcxTES8158.gif

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


3) 根據加速對象不同,分爲 客戶端加速 和 服務器加速

客戶端加速 : Cache部署在網絡出口處,把常訪問的內容緩存在本地,提高響應速度和節約帶寬;

服務器加速 : Cache部署在服務器前端,作爲Web服務器的代理緩存機,提高Web服務器的性能,加速訪問速度 .如果多臺Cache加速服務器且分佈在不同地域,需要通過有效地機制管理Cache網絡,引導用戶就近訪問(比如通過DNS引導用戶),全局負載均衡流量,這是CDN內容傳輸網絡的基本思想.

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


2. CDN 的工作原理

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

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

wKioL1aUgv7Q-XCRAAAkSvUlN8A966.png

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

  1. 用戶輸入訪問的域名,操作系統向 LocalDns 查詢域名的ip地址.

  2. LocalDnsROOT 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緩存後的網站的過程: 

wKiom1aUgwLhQ0ZEAABKJ00-2KM669.png

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

  1. 用戶輸入訪問的域名,操作系統向 LocalDns 查詢域名的ip地址.

  2. LocalDnsROOT 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.145
  a1366.g.akamai.net.	12	IN	A	204.203.18.160

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


#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節點,列表如下: 

wKiom1aUhALASR1XAAAgN_-yiGA143.png

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記錄不一樣,其他的都是一樣.

wKiom1aUhQnRJ6qRAAAWL2ctbDE696.png

以上只列出了 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體系的成本和回報率.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章