本想本身寫這個主題的文章,但網上已經有人寫了一篇很是好的文章,以爲難以望其項背。就沒有必要再寫,直接轉載以下:php
在不一樣地域的用戶訪問網站的響應速度存在差別,爲了提升用戶訪問的響應速度、優化現有Internet中信息的流動,須要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度,從最接近用戶的地方得到所需的信息,完全解決網絡擁塞,提升響應速度,是目前大型網站使用的流行的應用方案.html
CDN的全稱是Content Delivery Network,即內容分發網絡。其目的是經過在現有的Internet中增長一層新的CACHE(緩存)層,將網站的內容發佈到最接近用戶的網絡」邊緣「的節點,使用戶能夠就近取得所需的內容,提升用戶訪問網站的響應速度。從技術上全面解決因爲網絡帶寬小、用戶訪問量大、網點分佈不均等緣由,提升用戶訪問網站的響應速度。前端
Cache層的技術,消除數據峯值訪問形成的結點設備阻塞。Cache服務器具備緩存功能,因此大部分網頁對象(Web page object),如html, htm, php等頁面文件,gif,tif,png,bmp等圖片文件,以及其餘格式的文件,在有效期(TTL)內,對於重複的訪問,沒必要從原始網站從新傳送文件實體, 只需經過簡單的認證(Freshness Validation)- 傳送幾十字節的Header,便可將本地的副本直接傳送給訪問者。因爲緩存服務器一般部署在靠近用戶端,因此能得到近似局域網的響應速度,並有效減小廣域帶寬的消耗。不只能提升響應速度,節約帶寬,對於加速Web服務器,有效減輕源服務器的負載是很是有效的。算法
根據加速對象不一樣,分爲客戶端加速和服務器加速緩存
CDN對網絡的優化做用主要體如今以下幾個方面 服務器
咱們先看傳統的未加緩存服務的訪問過程,以便了解CDN緩存訪問方式與未加緩存訪問方式的差異: 網絡
由上圖可見,用戶訪問未使用CDN緩存網站的過程爲:負載均衡
CDN網絡是在用戶和服務器之間增長Cache層,主要是經過接管DNS實現,將用戶的請求引導到Cache上得到源服務器的數據。下面讓咱們看看訪問使用CDN緩存後的網站的過程: 性能
經過上圖,咱們能夠了解到,使用了CDN緩存後的網站的訪問過程變爲:優化
經過以上的分析咱們能夠獲得,爲了實現對普通用戶透明(使用緩存後用戶客戶端無需進行任何設置)訪問,須要使用DNS(域名解析)來引導用戶來訪問Cache服務器,以實現透明的加速服務. 因爲用戶訪問網站的第一步就是域名解析,因此經過修改dns來引導用戶訪問是最簡單有效的方式.
對於普通的Internet用戶,每一個CDN節點就至關於一個放置在它周圍的網站服務器. 經過對dns的接管,用戶的請求被透明地指向離他最近的節點,節點中CDN服務器會像網站的原始服務器同樣,響應用戶的請求. 因爲它離用戶更近,於是響應時間必然更快.
從上面圖中 虛線圈起來的那塊,就是CDN層,這層是位於 用戶端 和 站點服務器 之間.
在系統中,執行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服務商) 去跳轉到 智能調度器上的.
在系統中,繼續執行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服務商的域名上。緩存服務和調度功能都是由服務商來完成。
在用戶請求解析域名的時候,智能DNS判斷用戶的LocalDns的IP,而後跟DNS服務器內部的IP表範圍匹配一下,看看用戶是電信仍是網通用戶,而後給用戶返回對應的IP地址。這裏使用的是靜態拓撲的方法,只是判斷LocalDns的IP.要想使用更復雜的調度算法能夠考慮商業產品,如F5的3DNS。
在這裏咱們將使用 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 |
如下是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的語法 請參考互聯網.
域名解析流程簡要說明
說明:再此過程當中,咱們簡化了主DNS 到 智能DNS 之間的CNAME過程(爲了簡要說明問題).
這裏使用的是靜態拓撲(根據ip範圍)的方法,也稱爲地域化方法,只是判斷LocalDns的IP.
此簡化方案中的存在的問題
參考:http://blog.csdn.net/luoweifu/article/details/51031099