轉(zhuǎn)自:http://blog.chinaunix.net/uid-401789-id-2407919.html
什么是Dns本地化?Dns本地化是指在個人計算機上建立小型的dns服務(wù)器,以供該個人計算機使用。
那么本地化Dns的意義何在?
我們先來說說互聯(lián)網(wǎng)上Dns所處的地位。
我們都知道現(xiàn)在的互聯(lián)網(wǎng)上,域名是重要的組成部分之一。個人用戶上網(wǎng)需要對于大量域名的訪問。對于域名的服務(wù)一般由各地的ISP服務(wù)商提供2-4個Dns域名服務(wù)器,供本地的上網(wǎng)者使用。
這就形成了這樣一個局面:上網(wǎng)的人很多,而實際服務(wù)的Dns服務(wù)器很少。
這種局面的形成與多方面有關(guān)。
一方面:Dns服務(wù)器的負載壓力比較小(Dns查詢采用UDP協(xié)議,每個Dns包的大小都比較小),所以單臺Dns服務(wù)器在正常情況下可以給相當多的用戶提供服務(wù)。
另一方面:Dns服務(wù)器本身只是提供一種單純的服務(wù),這個服務(wù)對于各個ISP服務(wù)商來說基本沒有盈利的能力。配置很多臺Dns服務(wù)器也沒有意義。
所以,在國內(nèi),實際可以使用的Dns服務(wù)器就相當少(相對于上網(wǎng)用戶數(shù)來說)。
在幾個月之前,國內(nèi)發(fā)生了兩次斷網(wǎng)事件,都是由于Dns服務(wù)器被大流量訪問壓垮的原因。Dns服務(wù)器是互聯(lián)網(wǎng)的一大弱點,在很早以前大家就都認識到了,可是這個架構(gòu)已經(jīng)形成,很難對這個架構(gòu)進行改革。
那么現(xiàn)在,我們將Dns服務(wù)本地化。也就是說,當用戶訪問一個域名時,他最先訪問的是自己機器上的Dns服務(wù)器,由本地提供該域名的解析,這樣就將原來的缺少Dns服務(wù)器的局面完全改變。甚至于可以入手對域名體系結(jié)構(gòu)進行改革。
由于本地化的Dns服務(wù)器是新編寫的,這就可以實現(xiàn)許多新的功能,從而產(chǎn)生商業(yè)價值。
那現(xiàn)在說一下Dns本地化的具體實現(xiàn)。
我們的本地Dns服務(wù)都要實現(xiàn)哪些功能:
1.本地Dns查詢發(fā)送到本地Dns服務(wù)器,然后本服務(wù)器先查找本地緩存,查找不到相應(yīng)數(shù)據(jù)的話再去特定的dns服務(wù)器上取回相應(yīng)的結(jié)果,然后發(fā)送給本地請求端。
2.dns緩存功能。當取回一條dns記錄后,本地緩存。本地的Dns查詢都從本地直接取得。
3.從新構(gòu)造Dns數(shù)據(jù)包,將原來復雜的Dns數(shù)據(jù)包(例如:當查詢www.google.com時,返回的數(shù)據(jù)包包含一個CNAME記錄,多個A記錄,還有很多其他部分,而實際我們使用的一般就是第一個A記錄,所以本地Dns服務(wù)器返回給本地客戶端時將其他記錄都去掉,只保留一個A記錄,減少本地客戶端的解析工作)。
4.定時更新dns數(shù)據(jù)的功能。每3分鐘檢查一次,所有超過1個小時以上的Dns數(shù)據(jù)再自動更新,更新成功后去掉原來的數(shù)據(jù),更新不成功則繼續(xù)保留原來的數(shù)據(jù)。
5.dns查詢統(tǒng)計功能。統(tǒng)計每個域名被查詢的次數(shù)。
6.本地返回A記錄時,從本地緩存數(shù)組中隨機選取一個,這樣實現(xiàn)Dns的動態(tài)負載平衡。
7.dns數(shù)據(jù)定時記錄到本地,當下次該軟件啟動時,可以直接取回Dns數(shù)據(jù)。
Ok,這就完成了一個基本的本地化Dns服務(wù)器的功能。上述功能,在我的Dns_server程序第二版中都已經(jīng)實現(xiàn)。
讓我們看看實際應(yīng)用以后的表現(xiàn)。
測試環(huán)境:操作系統(tǒng):winxp 硬件:AMD雙核 2G內(nèi)存 網(wǎng)速:3M adsl
我們的官方Dns服務(wù)器地址:202.102.152.3
通過抓包獲取到:
1.當測試機器的帶寬充足的時候:
到202.102.152.3,每個Dns查詢的時間平均為:0.0250秒
到127.0.0.1,每個Dns查詢時間平均為:0.0016秒
2.當測試機器的帶寬不充足的時候(有大量的下載占用了80%的帶寬):
到202.102.152.3,每個Dns查詢的時間平均為:0.1482秒
到127.0.0.1,每個Dns查詢時間平均為:0.0016秒
也就是說,本地化Dns比原先的速度快了最少是15倍,而當網(wǎng)絡(luò)繁忙時快了約90倍。
那每次訪問網(wǎng)站,拿網(wǎng)易,搜狐與新浪三個網(wǎng)站來說(瀏覽器為ie 7.0 ,firefox 3.0):
新浪網(wǎng)每次訪問主頁需做:30次Dns查詢 30*0.0250=0.75秒(使用官方的服務(wù)器,帶寬足) 30*0.1482=4.4秒(使用官方的服務(wù)器,帶寬不足) 30*0.0016=0.048秒(使用本地化Dns服務(wù)器)
網(wǎng)易每次訪問主頁需做:20次Dns查詢
搜狐每次訪問主頁需做:28次Dns查詢
結(jié)論:
這樣可以看出,使用本地化Dns服務(wù)器后,對于客戶端的上網(wǎng)來說,可以提高0.7-4秒的時間,而一次這些門戶網(wǎng)站的訪問時間總共也就20多秒,所以本地化Dns最高可以提高20%的上網(wǎng)速度,越是網(wǎng)絡(luò)帶寬不足或者質(zhì)量差,就越能體現(xiàn)本地化Dns服務(wù)器的作用。更為關(guān)鍵的是,本地化Dns服務(wù)器可以保證整個上網(wǎng)過程的平穩(wěn)與無故障。這些特點對于用戶來說是有實際意義的。Google的Chrome瀏覽器通過預先進行Dns查詢來提高瀏覽器的性能,本地化Dns服務(wù)以后,對于所有瀏覽器,大家都是平等的,都可以獲得更快的網(wǎng)絡(luò)瀏覽速度。