分布式架構(gòu)之CDN加速文件訪問

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)率.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚯斯,一起剝皮案震驚了整個(gè)濱河市薄风,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溉跃,老刑警劉巖村刨,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撰茎,居然都是意外死亡嵌牺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門龄糊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逆粹,“玉大人,你說我怎么就攤上這事炫惩∑У” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵他嚷,是天一觀的道長蹋绽。 經(jīng)常有香客問我,道長筋蓖,這世上最難降的妖魔是什么卸耘? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮粘咖,結(jié)果婚禮上蚣抗,老公的妹妹穿的比我還像新娘。我一直安慰自己瓮下,他們只是感情好翰铡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布钝域。 她就那樣靜靜地躺著,像睡著了一般锭魔。 火紅的嫁衣襯著肌膚如雪例证。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天赂毯,我揣著相機(jī)與錄音战虏,去河邊找鬼。 笑死党涕,一個(gè)胖子當(dāng)著我的面吹牛烦感,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膛堤,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼手趣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肥荔?” 一聲冷哼從身側(cè)響起绿渣,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎燕耿,沒想到半個(gè)月后中符,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誉帅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年淀散,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚜锨。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡档插,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亚再,到底是詐尸還是另有隱情郭膛,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布氛悬,位于F島的核電站则剃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏如捅。R本人自食惡果不足惜棍现,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伪朽。 院中可真熱鬧轴咱,春花似錦汛蝙、人聲如沸烈涮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坚洽。三九已至戈稿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讶舰,已是汗流浹背鞍盗。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跳昼,地道東北人般甲。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像鹅颊,于是被迫代替她去往敵國和親敷存。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355