1.簡介
CDN加速大家應(yīng)該都不陌生,至少是有聽說過的,其實(shí)我們應(yīng)該每天都會無形中使用到它,大多數(shù)比較優(yōu)秀的互聯(lián)網(wǎng)公司都會用到它來提高網(wǎng)站的響應(yīng)速度,比如阿里,騰訊等.CDN是Content Delivery Network的簡稱履恩,即“內(nèi)容分發(fā)網(wǎng)絡(luò)”的意思,一般是指網(wǎng)站加速或者用戶下載資源加速.
簡單來說,CDN相當(dāng)于一個(gè)中間代理,原來我們需要請求某個(gè)網(wǎng)址比如www.baidu.com,請求會直接發(fā)送至百度的服務(wù)器上,假如請求者在新疆,但百度的服務(wù)器在北京,這樣的話請求和響應(yīng)都會受距離影響慢一些,但有了CDN后,請求是先發(fā)至距離請求IP定位最近的CDN服務(wù)器上,該服務(wù)器上緩存了www.baidu.com頁面上的一些靜態(tài)文件,比如js,css.html,圖片等,這樣對請求的發(fā)起者來說,獲取這些靜態(tài)資源就比較近了,因此可以起到一定的加速效果.至于動態(tài)的資源,因?yàn)槭强勺兊?所以無法通過緩存的方式存儲在CDN服務(wù)器上,仍需要通過CDN去請求對應(yīng)服務(wù)器獲取資源,所以CDN加速僅限于靜態(tài)資源.下圖是某CDN第三方在國內(nèi)部署的CDN節(jié)點(diǎn).
在分布式系統(tǒng)中,CDN可以一定程度的減輕服務(wù)器的IO壓力,提高響應(yīng)速度,而且在使用CDN后用戶的請求是發(fā)送到CDN服務(wù)器上的,可以避免用戶直接訪問源服務(wù)器,從而可以一定程度上提高系統(tǒng)安全性,降低被黑客攻擊的可能性,類似于保護(hù)代理...
但CDN的架設(shè)成本比較高,就像快遞公司的網(wǎng)點(diǎn)一樣,如果需要提高服務(wù)效率和質(zhì)量,需要在全國各個(gè)地區(qū)都設(shè)有網(wǎng)點(diǎn),而且在人口稠密地區(qū)需要架設(shè)更多的網(wǎng)點(diǎn)來緩解單個(gè)網(wǎng)點(diǎn)的壓力,這筆成本可以說是非常高了,所以一般CDN加速都是由專門的第三方大公司去做的,比如阿里,七牛云等,對小公司而言,自己架設(shè)成本太高,如果需要CDN加速,直接付費(fèi)使用第三方提供的即可,價(jià)格合理,治理方便,一般第三方會提供詳細(xì)的使用文檔和優(yōu)質(zhì)的服務(wù).
?2.CDN 的工作原理
CDN網(wǎng)絡(luò)是在用戶和服務(wù)器之間增加Cache層,主要是通過接管DNS實(shí)現(xiàn),將用戶的請求引導(dǎo)到Cache上獲得源服務(wù)器的數(shù)據(jù)。步驟如下:
用戶輸入訪問的域名,操作系統(tǒng)向 LocalDns 查詢域名的ip地址.
LocalDns向 ROOT DNS 查詢域名的授權(quán)服務(wù)器(這里假設(shè)LocalDns緩存過期)
ROOT DNS將域名授權(quán)dns記錄回應(yīng)給 LocalDns
LocalDns得到域名的授權(quán)dns記錄后,繼續(xù)向域名授權(quán)dns查詢域名的ip地址
域名授權(quán)dns 查詢域名記錄后(一般是CNAME),回應(yīng)給 LocalDns
LocalDns 得到域名記錄后,向智能調(diào)度DNS查詢域名的ip地址
智能調(diào)度DNS 根據(jù)一定的算法和策略(比如靜態(tài)拓?fù)洌萘康?,將最適合的CDN節(jié)點(diǎn)ip地址回應(yīng)給 LocalDns
LocalDns 將得到的域名ip地址,回應(yīng)給 用戶端
用戶得到域名ip地址后,訪問站點(diǎn)服務(wù)器
CDN節(jié)點(diǎn)服務(wù)器應(yīng)答請求翅溺,將內(nèi)容返回給客戶端.(緩存服務(wù)器一方面在本地進(jìn)行保存,以備以后使用髓抑,二方面把獲取的數(shù)據(jù)返回給客戶端咙崎,完成數(shù)據(jù)服務(wù)過程)
?通過以上的分析我們可以得到,為了實(shí)現(xiàn)對普通用戶透明(使用緩存后用戶客戶端無需進(jìn)行任何設(shè)置)訪問吨拍,需要使用DNS(域名解析)來引導(dǎo)用戶來訪問Cache服務(wù)器褪猛,以實(shí)現(xiàn)透明的加速服務(wù). 由于用戶訪問網(wǎng)站的第一步就是域名解析,所以通過修改dns來引導(dǎo)用戶訪問是最簡單有效的方式.
CDN網(wǎng)絡(luò)的組成要素
對于普通的Internet用戶,每個(gè)CDN節(jié)點(diǎn)就相當(dāng)于一個(gè)放置在它周圍的網(wǎng)站服務(wù)器. 通過對dns的接管羹饰,用戶的請求被透明地指向離他最近的節(jié)點(diǎn)伊滋,節(jié)點(diǎn)中CDN服務(wù)器會像網(wǎng)站的原始服務(wù)器一樣,響應(yīng)用戶的請求. 由于它離用戶更近队秩,因而響應(yīng)時(shí)間必然更快.
從上面圖中 虛線圈起來的那塊笑旺,就是CDN層,這層是位于 用戶端 和 站點(diǎn)服務(wù)器 之間.
智能調(diào)度DNS(比如f5的3DNS)?
智能調(diào)度DNS是CDN服務(wù)中的關(guān)鍵系統(tǒng).當(dāng)用戶訪問加入CDN服務(wù)的網(wǎng)站時(shí),域名解析請求將最終由 “智能調(diào)度DNS”負(fù)責(zé)處理馍资。它通過一組預(yù)先定義好的策略筒主,將當(dāng)時(shí)最接近用戶的節(jié)點(diǎn)地址提供給用戶,使用戶可以得到快速的服務(wù)鸟蟹。同時(shí)它需要與分布在各地的CDN節(jié)點(diǎn)保持通信乌妙,跟蹤各節(jié)點(diǎn)的健康狀態(tài)、容量等信息建钥,確保將用戶的請求分配到就近可用的節(jié)點(diǎn)上.
緩存功能服務(wù)?
負(fù)載均衡設(shè)備(如lvs,F5的BIG/IP)?
內(nèi)容Cache服務(wù)器(如squid)?
共享存儲(根據(jù)緩存數(shù)據(jù)量多少決定是否需要)
3. CDN 智能調(diào)度Dns 實(shí)例分析
3.1 分析img.alibaba.com域名
在系統(tǒng)中藤韵,執(zhí)行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
; 部分省略
從上面查詢結(jié)果可以看出 img.alibaba.com. CNAME img.alibaba.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服務(wù)商) 去跳轉(zhuǎn)到 智能調(diào)度器上的.
3.2 分析www.discovery.com域名
在系統(tǒng)中,繼續(xù)執(zhí)行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
; 部分省略
從上面查詢結(jié)果可以看出 www.discovery.com. IN CNAME www.discovery.com.edgesuite.net. 后面的CNAME是由 Akamai(CDN服務(wù)商) 去跳轉(zhuǎn)到 智能調(diào)度器上的.
總結(jié):一般來說锦针,網(wǎng)站需要使用到CDN服務(wù)時(shí),一般都是將需要加速訪問的域名 CNAME到 CDN服務(wù)商的域名上置蜀。緩存服務(wù)和調(diào)度功能都是由服務(wù)商來完成奈搜。
4. CDN的 智能調(diào)度Dns 簡化實(shí)現(xiàn)
4.1. 調(diào)度策略說明
在用戶請求解析域名的時(shí)候,智能DNS判斷用戶的LocalDns的IP盯荤,然后跟DNS服務(wù)器內(nèi)部的IP表范圍匹配一下馋吗,看看用戶是電信還是網(wǎng)通用戶,然后給用戶返回對應(yīng)的IP地址秋秤。這里使用的是靜態(tài)拓?fù)涞姆椒?只是判斷LocalDns的IP.要想使用更復(fù)雜的調(diào)度算法可以考慮商業(yè)產(chǎn)品,如F5的3DNS宏粤。
4.2. 假設(shè)CDN節(jié)點(diǎn)規(guī)劃
在這里我們將使用 BIND 的View功能來實(shí)現(xiàn)運(yùn)營商的區(qū)分,假設(shè)我們在每個(gè)運(yùn)營商的機(jī)房都放有一個(gè)CDN節(jié)點(diǎn),列表如下:
域名 運(yùn)營商(view) 服務(wù)地址
www.cdntest.com 網(wǎng)通(CNC) 192.168.0.1
www.cdntest.com 電信(TELECOM) 192.168.0.2
www.cdntest.com 教育網(wǎng)(EDU) 192.168.0.3
www.cdntest.com 默認(rèn)(ANY) 192.168.0.4
4.3. bind view 配置
以下是named.conf配置文件的部分截取脚翘,只是涉及到 View 的部分,其他細(xì)節(jié)可參考互聯(lián)網(wǎng).
acl "cnc_iprange"{ //定義ip范圍(網(wǎng)通)
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范圍(教育網(wǎng))
192.168.5.0/24;
192.168.6.0/24;
//其他省略
};
acl "default_iprange"{ //定義ip范圍(默認(rèn))
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個(gè)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記錄地址,其他關(guān)于zone的語法 請參考互聯(lián)網(wǎng).
域名解析流程簡要說明
用戶向 LocalDns 查詢域名 www.cdntest.com
LocalDns 向 授權(quán)DNS 查詢www.cdntest.com
授權(quán)DNS 判斷用戶使用的 LocalDns的ip地址,匹配上述設(shè)置的ip范圍,如果范圍在網(wǎng)通来农,就將網(wǎng)通對應(yīng)的ip地址(192.168.0.1),回應(yīng)給LocalDns(其他依此類推)
LocalDns 將得到的域名ip地址,回應(yīng)給 用戶端 (域名解析完成)
說明:再此過程中崇堰,我們簡化了主DNS?到?智能DNS?之間的CNAME過程(為了簡要說明問題).?
這里使用的是靜態(tài)拓?fù)?根據(jù)ip范圍)的方法,也稱為地域化方法,只是判斷LocalDns的IP.
此簡化方案中的存在的問題
如果用戶設(shè)置錯(cuò)誤的dns沃于,可能會導(dǎo)致用戶訪問比原來慢(比如網(wǎng)通用戶設(shè)置了電信的DNS)
不能判斷CDN節(jié)點(diǎn)服務(wù)器的健康狀態(tài)和容量狀態(tài),可能會把用戶定向到不可用的CDN節(jié)點(diǎn)
由于靜態(tài)拓?fù)浞椒?可能存在用戶訪問的CDN節(jié)點(diǎn)不是最優(yōu)化和最快的
…..可能還有其他想不到的….
5. 總結(jié)(Summary)
在建立CDN網(wǎng)路時(shí)海诲,最關(guān)鍵的就是?智能調(diào)度DNS繁莹,這個(gè)是CND網(wǎng)絡(luò)總協(xié)調(diào),通過高效的調(diào)度算法,可以使用戶得到最佳的訪問體驗(yàn).
其次就是 CND節(jié)點(diǎn)的管理,比如涉及到 內(nèi)容的同步機(jī)制特幔,配置文件的更新等等咨演,都需要有一套機(jī)制來保證.
當(dāng)然在大型網(wǎng)站中,也要考建設(shè)CDN體系的成本和回報(bào)率.