在不同地區的使用者訪問網站的響應速度存在差異,為了提高使用者訪問的響應速度、最佳化現有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層,這層是位於 使用者端 和 站台伺服器之間.
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的文法 請參考互連網.
- 使用者向 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體系的成本和回報率.