CDN架構以及原理分析
在不同地域的使用者訪問網站的響應速度存在差異,為了提高使用者訪問的響應速度、優化現有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快取網站的過程為:
- 使用者輸入訪問的域名,作業系統向 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快取後的網站的過程:
通過上圖,我們可以瞭解到,使用了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節點,列表如下:
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記錄不一樣,其他的都是一樣.
cnc_cdntest.zone | 192.168.0.1 |
tel_cdntest.zone | 192.168.0.2 |
edu_cdntest.zone | 192.168.0.3 |
default_cdntest.zone | 192.168.0.4 |
以上只列出了 www.cdntest.com 的A記錄地址,其他關於zone的語法 請參考網際網路.
- 域名解析流程簡要說明
- 授權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體系的成本和回報率.