在中國一般有電信(telecom)和聯通(Unicom)兩大運營商,但是電信和聯通的網絡都是各自獨立的,而兩大網絡相連處的帶寬相對很小;所以如果你是電信的網絡去聯通的服務器上下載數據一般來說要比去電信的服務器下載要慢。
在我們去某些網站下載數據時,經常會看到網站建議你使用電信高速下載或者聯通高速下載,甚至有華南電信,華北網通等的區分;而這些都是爲了加速你的下載速度,即讓你訪問距離你最近且和你屬於一個運營商的服務器
比如像淘寶這樣的大型站點。它一般講中國劃成了許多區域,在每個區域內都有一組服務器,進行用戶的訪問請求響應,而用戶的訪問請求一般也會分到距離他最近的那個服務器上,這就需要用到CDN網絡
並且有時候也會爲每個服務器提供雙網卡,一個是電信的IP,一個是聯通的IP,如果是電信的用戶請求就用電信的網絡進行數據傳送,反之則用聯通的;而通過對用戶IP的判斷知道他是屬於哪個運營商的就需要用到智能DNS解析
一般來說用戶訪問的距離他最近的網站服務器很可能只是一個緩存服務器而不是原始服務器,而要對網站的內容進行修改則運行商只需要將原始服務器的數據修改,而用戶訪問緩存服務器時,第一次請求可能響應會相對較慢,因爲緩存服務器要去它的上游服務器(很可能還是個緩存服務器)上去找,甚至要去原始服務器上去找,然後緩存再本地在進行用戶的響應,而第二次請求相同的內容則會大大提高響應速度
CDN(content delivery network)內容分發網絡:即原始服務器會將用戶的訪問數據發送到距離他最近的服務器上緩存下來,並且通過判斷用戶的IP進行智能DNS解析,讓用戶直接訪問距離他最近的緩存服務器,從而大大提高了用戶的訪問速度;而web服務器一般緩存的數據大多數爲靜態內容,也可以用策略將大多數的動態資源靜態化也放到緩存服務器上,而只保留少量不能靜態化的動態資源到原始服務器上,這樣不僅提高了用戶的訪問速度也大大降低了原始服務器的訪問壓力
CDN的前提:
要能夠判斷客戶端的來源,屬於哪個地區哪個運營商
根據客戶端的來源讓客戶端訪問距離他最近的那臺服務器
而以上的兩個前提必須用智能DNS實現
構建一個DNS服務器 172.16.0.0/16 和127.0.0.0/8的客戶端屬於電信網絡
192.168.0.0/24的客戶端屬於聯通網絡
配置智能DNS解析,讓不同網段的客戶端解析到不同的結果必須用到DNS的視圖(view)功能
注:一旦定義了view,則所有的區域都必須定義在視圖中,根區域只需定義在需要進行遞歸的視圖中
本機IP爲172.16.100.1
#vim /etc/named.conf
acl innet { #acl訪問控制列表,相當於變量多次引用,要放在子上邊
172.16.0.0/16;
127.0.0.0/8;
};
options {
directory "/var/named";
allow-recursion { innet;}; 只允許172.16.0.0/16 和127.0.0.1/8的客戶端進行遞歸
};
view telecom {
match-clients {innet;}; telecom的只匹配172.16.0.0/16 和127.0.0.1/8的客戶端
zone "fade.com" IN {
type master;
file "telecom.fade.com.zone";
};
zone "a.net" IN {
type master;
file "a.net.zone";
};
};
view unicom {
match-clients { any;}; 電信不匹配的全部匹配到聯通
zone "fade.com" IN {
type master;
file "unicom.fade.com.zone";
};
zone "a.net" IN {
type master;
file "a.net.zone";
};
};
注:a.net域在電信和聯通兩個中都有定義,這樣就可以做到不對a.net域的解析進行客戶端來源劃分
且一個DNS中可以定義多個域,本實驗爲fade.com和a.net兩個域
然後建立DNS資源記錄文件
# vim /var/named/telecom.fade.com.zone
$TTL 600
@ IN SOA ns1.fade.com. admin.fade.com(
2017022201
1H
10M
1D
2D)
IN NS ns1
IN MX 10 mail
ns1 IN A 172.16.100.1
mail IN A 172.16.100.2
www IN A 172.16.100.3
#chgrp named /var/named/telecom.fade.com.zone
#chmod 640 /var/named/telecom.fade.com.zone
# vim /var/named/unicom.fade.com.zone
$TTL 600
@ IN SOA ns1.fade.com. admin.fade.com(
2017022201
1H
10M
1D
2D)
IN NS ns1
IN MX 10 mail
ns1 IN A 172.16.100.1
mail IN A 172.16.100.11
www IN A 172.16.100.12
#chgrp named /var/named/unicom.fade.com.zone
#chmod 640 /var/named/unicom.fade.com.zone
#vim /var/named/a.net.zone
$TTL 600
@ IN SOA ns1.a.net admin.a.net(
2017022201
1H
10M
1D
2D)
IN NS ns1
IN MX 10 mail
ns1 IN A 172.16.100.1
mail IN A 172.16.100.20
www IN A 172.16.100.21
#chgrp named /var/named/a.net.zone
#chmod 640 /var/named/a.net.zone
#service named restart
然後就可以用不同網段的客戶端進行測試
192.168.0.2#dig -t A www.fade.com @172.16.100.1
結果應該是172.16.100.12
172.16.100.2#dig -t A www.fade.com @172.16.100.1
結果應該是172.16.100.3
192.168.0.2#dig -t A www.a.net @172.16.100.1
結果應該是172.16.100.21
172.168.0.2#dig -t A www.a.net @172.16.100.1
結果應該是172.16.100.21
而當一個DNS服務器要解析很多個域時,這種將DNS數據保存在數據庫中的方法會非常的麻煩(修改記錄必須打開文件加鎖修改等)
所以可以將DNS的數據記錄保存在數據庫中如MySQL,一旦有DNS請求可以臨時性的查詢數據庫,也可以做到實時修改實時生效;而dlz機制就可以實現將DNS數據導入MySQL數據庫在,除此外還可以用bind-sdb實現等等
國內比較知名的DNS運營商有
dnsport