網(wǎng)站建設——CDN及CDN加速原理

本想自己寫這個主題的文章唱逢,但網(wǎng)上已經(jīng)有人寫了一篇非常好的文章,覺得難以望其項背谷饿。就沒有必要再寫惶我,直接轉(zhuǎn)載如下:

在不同地域的用戶訪問網(wǎng)站的響應速度存在差異,為了提高用戶訪問的響應速度、優(yōu)化現(xiàn)有Internet中信息的流動,需要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度博投,從最接近用戶的地方獲得所需的信息绸贡,徹底解決網(wǎng)絡擁塞,提高響應速度毅哗,是目前大型網(wǎng)站使用的流行的應用方案.

1. CDN 概述

CDN的全稱是Content Delivery Network听怕,即內(nèi)容分發(fā)網(wǎng)絡。其目的是通過在現(xiàn)有的Internet中增加一層新的CACHE(緩存)層虑绵,將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡”邊緣“的節(jié)點尿瞭,使用戶可以就近取得所需的內(nèi)容,提高用戶訪問網(wǎng)站的響應速度翅睛。從技術上全面解決由于網(wǎng)絡帶寬小声搁、用戶訪問量大、網(wǎng)點分布不均等原因捕发,提高用戶訪問網(wǎng)站的響應速度疏旨。

CDN網(wǎng)絡節(jié)點

Cache層的技術,消除數(shù)據(jù)峰值訪問造成的結(jié)點設備阻塞扎酷。Cache服務器具有緩存功能檐涝,所以大部分網(wǎng)頁對象(Web page object),如html, htm, PHP等頁面文件,gif,tif,png,bmp等圖片文件,以及其他格式的文件谁榜,在有效期(TTL)內(nèi)幅聘,對于重復的訪問,不必從原始網(wǎng)站重新傳送文件實體, 只需通過簡單的認證(Freshness Validation)- 傳送幾十字節(jié)的Header窃植,即可將本地的副本直接傳送給訪問者帝蒿。由于緩存服務器通常部署在靠近用戶端,所以能獲得近似局域網(wǎng)的響應速度撕瞧,并有效減少廣域帶寬的消耗陵叽。不僅能提高響應速度,節(jié)約帶寬丛版,對于加速Web服務器巩掺,有效減輕源服務器的負載是非常有效的。

根據(jù)加速對象不同页畦,分為客戶端加速和服務器加速

  • 客戶端加速 : Cache部署在網(wǎng)絡出口處胖替,把常訪問的內(nèi)容緩存在本地,提高響應速度和節(jié)約帶寬豫缨;
  • 服務器加速 : Cache部署在服務器前端独令,作為Web服務器的代理緩存機,提高Web服務器的性能好芭,加速訪問速度燃箭。 如果多臺Cache加速服務器且分布在不同地域,需要通過有效地機制管理Cache網(wǎng)絡舍败,引導用戶就近訪問(比如通過DNS引導用戶)招狸,全局負載均衡流量,這是CDN內(nèi)容傳輸網(wǎng)絡的基本思想邻薯。

CDN對網(wǎng)絡的優(yōu)化作用主要體現(xiàn)在如下幾個方面

  • 解決服務器端的“第一公里”問題
  • 緩解甚至消除了不同運營商之間互聯(lián)的瓶頸造成的影響
  • 減輕了各省的出口帶寬壓力
  • 緩解了骨干網(wǎng)的壓力
  • 優(yōu)化了網(wǎng)上熱點內(nèi)容的分布

2. CDN 的工作原理

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

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


傳統(tǒng)訪問過程傳統(tǒng)訪問過程

由上圖可見,用戶訪問未使用CDN緩存網(wǎng)站的過程為:

  1. 用戶輸入訪問的域名,操作系統(tǒng)向 LocalDns 查詢域名的ip地址.
  2. LocalDns向 ROOT DNS 查詢域名的授權服務器(這里假設LocalDns緩存過期)
  3. ROOT DNS將域名授權dns記錄回應給 LocalDns
  4. LocalDns得到域名的授權dns記錄后,繼續(xù)向域名授權dns查詢域名的ip地址
  5. 域名授權dns 查詢域名記錄后厕诡,回應給 LocalDns
  6. LocalDns 將得到的域名ip地址累榜,回應給 用戶端
  7. 用戶得到域名ip地址后,訪問站點服務器
  8. 站點服務器應答請求灵嫌,將內(nèi)容返回給客戶端.

2.2 CDN訪問過程(使用緩存服務)

CDN網(wǎng)絡是在用戶和服務器之間增加Cache層壹罚,主要是通過接管DNS實現(xiàn),將用戶的請求引導到Cache上獲得源服務器的數(shù)據(jù)。下面讓我們看看訪問使用CDN緩存后的網(wǎng)站的過程:


CDN訪問過程CDN訪問過程

通過上圖寿羞,我們可以了解到猖凛,使用了CDN緩存后的網(wǎng)站的訪問過程變?yōu)椋?/p>

  1. 用戶輸入訪問的域名,操作系統(tǒng)向 LocalDns 查詢域名的ip地址.
  2. LocalDns向 ROOT DNS 查詢域名的授權服務器(這里假設LocalDns緩存過期)
  3. ROOT DNS將域名授權dns記錄回應給 LocalDns
  4. LocalDns得到域名的授權dns記錄后,繼續(xù)向域名授權dns查詢域名的ip地址
  5. 域名授權dns 查詢域名記錄后(一般是CNAME),回應給 LocalDns
  6. LocalDns 得到域名記錄后,向智能調(diào)度DNS查詢域名的ip地址
  7. 智能調(diào)度DNS 根據(jù)一定的算法和策略(比如靜態(tài)拓撲稠曼,容量等),將最適合的CDN節(jié)點ip地址回應給 LocalDns
  8. LocalDns 將得到的域名ip地址形病,回應給 用戶端
  9. 用戶得到域名ip地址后,訪問站點服務器
  10. CDN節(jié)點服務器應答請求霞幅,將內(nèi)容返回給客戶端.(緩存服務器一方面在本地進行保存漠吻,以備以后使用,二方面把獲取的數(shù)據(jù)返回給客戶端司恳,完成數(shù)據(jù)服務過程)

通過以上的分析我們可以得到途乃,為了實現(xiàn)對普通用戶透明(使用緩存后用戶客戶端無需進行任何設置)訪問,需要使用DNS(域名解析)來引導用戶來訪問Cache服務器扔傅,以實現(xiàn)透明的加速服務. 由于用戶訪問網(wǎng)站的第一步就是域名解析,所以通過修改dns來引導用戶訪問是最簡單有效的方式.

2.3. CDN網(wǎng)絡的組成要素

對于普通的Internet用戶耍共,每個CDN節(jié)點就相當于一個放置在它周圍的網(wǎng)站服務器. 通過對dns的接管,用戶的請求被透明地指向離他最近的節(jié)點猎塞,節(jié)點中CDN服務器會像網(wǎng)站的原始服務器一樣试读,響應用戶的請求. 由于它離用戶更近,因而響應時間必然更快.

從上面圖中 虛線圈起來的那塊荠耽,就是CDN層,這層是位于 用戶端 和 站點服務器 之間.

  • 智能調(diào)度DNS(比如f5的3DNS)
    智能調(diào)度DNS是CDN服務中的關鍵系統(tǒng).當用戶訪問加入CDN服務的網(wǎng)站時钩骇,域名解析請求將最終由 “智能調(diào)度DNS”負責處理。它通過一組預先定義好的策略铝量,將當時最接近用戶的節(jié)點地址提供給用戶倘屹,使用戶可以得到快速的服務。同時它需要與分布在各地的CDN節(jié)點保持通信慢叨,跟蹤各節(jié)點的健康狀態(tài)纽匙、容量等信息,確保將用戶的請求分配到就近可用的節(jié)點上.
  • 緩存功能服務
    負載均衡設備(如lvs,F5的BIG/IP)
    內(nèi)容Cache服務器(如squid)
    共享存儲(根據(jù)緩存數(shù)據(jù)量多少決定是否需要)

3. CDN 智能調(diào)度Dns 實例分析

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服務商) 去跳轉(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服務商) 去跳轉(zhuǎn)到 智能調(diào)度器上的.

總結(jié):一般來說,網(wǎng)站需要使用到CDN服務時赠尾,一般都是將需要加速訪問的域名 CNAME到 CDN服務商的域名上力穗。緩存服務和調(diào)度功能都是由服務商來完成。

4. CDN的 智能調(diào)度Dns 簡化實現(xiàn)

4.1. 調(diào)度策略說明

在用戶請求解析域名的時候气嫁,智能DNS判斷用戶的LocalDns的IP当窗,然后跟DNS服務器內(nèi)部的IP表范圍匹配一下,看看用戶是電信還是網(wǎng)通用戶寸宵,然后給用戶返回對應的IP地址崖面。這里使用的是靜態(tài)拓撲的方法,只是判斷LocalDns的IP.要想使用更復雜的調(diào)度算法可以考慮商業(yè)產(chǎn)品,如F5的3DNS。

4.2. 假設CDN節(jié)點規(guī)劃

在這里我們將使用 BIND 的View功能來實現(xiàn)運營商的區(qū)分,假設我們在每個運營商的機房都放有一個CDN節(jié)點,列表如下:

域名 運營商(view) 服務地址
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 默認(ANY) 192.168.0.4

4.3. bind view 配置

以下是named.conf配置文件的部分截取梯影,只是涉及到 View 的部分,其他細節(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范圍(默認)
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的語法 請參考互聯(lián)網(wǎng).

域名解析流程簡要說明

  1. 用戶向 LocalDns 查詢域名 www.cdntest.com
  2. LocalDns 向 授權DNS 查詢www.cdntest.com
  3. 授權DNS 判斷用戶使用的 LocalDns的ip地址,匹配上述設置的ip范圍,如果范圍在網(wǎng)通甲棍,就將網(wǎng)通對應的ip地址(192.168.0.1),回應給LocalDns(其他依此類推)
  4. LocalDns 將得到的域名ip地址简识,回應給 用戶端 (域名解析完成)
說明:再此過程中,我們簡化了主DNS 到 智能DNS 之間的CNAME過程(為了簡要說明問題).

這里使用的是靜態(tài)拓撲(根據(jù)ip范圍)的方法,也稱為地域化方法,只是判斷LocalDns的IP.

此簡化方案中的存在的問題

  1. 如果用戶設置錯誤的dns,可能會導致用戶訪問比原來慢(比如網(wǎng)通用戶設置了電信的DNS)
  2. 不能判斷CDN節(jié)點服務器的健康狀態(tài)和容量狀態(tài)七扰,可能會把用戶定向到不可用的CDN節(jié)點
  3. 由于靜態(tài)拓撲方法,可能存在用戶訪問的CDN節(jié)點不是最優(yōu)化和最快的
  4. …..可能還有其他想不到的….

5. 總結(jié)(Summary)

  • 在建立CDN網(wǎng)路時奢赂,最關鍵的就是 智能調(diào)度DNS,這個是CND網(wǎng)絡總協(xié)調(diào),通過高效的調(diào)度算法颈走,可以使用戶得到最佳的訪問體驗.
  • 其次就是 CND節(jié)點的管理,比如涉及到 內(nèi)容的同步機制膳灶,配置文件的更新等等,都需要有一套機制來保證.
  • 當然在大型網(wǎng)站中立由,也要考建設CDN體系的成本和回報率.

自:陽光日志

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轧钓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锐膜,更是在濱河造成了極大的恐慌毕箍,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件道盏,死亡現(xiàn)場離奇詭異霉晕,居然都是意外死亡,警方通過查閱死者的電腦和手機捞奕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門牺堰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颅围,你說我怎么就攤上這事伟葫。” “怎么了院促?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵筏养,是天一觀的道長。 經(jīng)常有香客問我常拓,道長渐溶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任弄抬,我火速辦了婚禮茎辐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掂恕。我一直安慰自己拖陆,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布懊亡。 她就那樣靜靜地躺著依啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪店枣。 梳的紋絲不亂的頭發(fā)上速警,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天叹誉,我揣著相機與錄音,去河邊找鬼闷旧。 笑死桂对,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鸠匀。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼逾柿,長吁一口氣:“原來是場噩夢啊……” “哼缀棍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起机错,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤爬范,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弱匪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體青瀑,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年萧诫,在試婚紗的時候發(fā)現(xiàn)自己被綠了斥难。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡帘饶,死狀恐怖哑诊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情及刻,我是刑警寧澤镀裤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站缴饭,受9級特大地震影響暑劝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颗搂,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一担猛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丢氢,春花似錦毁习、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稍浆,卻和暖如春载碌,著一層夾襖步出監(jiān)牢的瞬間猜嘱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工嫁艇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朗伶,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓步咪,卻偏偏與公主長得像论皆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子猾漫,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容