速度法拉利 Google DNS服務(wù)器提速技術(shù)揭秘
原創(chuàng)【51CTO.com獨(dú)家特稿】Google推出了“Google免費(fèi)公共DNS服務(wù)器”據(jù)Google官方聲稱,Google DNS的目標(biāo)是速度、安全性和有效性,它意味著完全沒有劫持、沒有阻截、沒有過濾的DNS查詢,而且速度飛快。那么為什么Google敢說自己的DNS服務(wù)器速度快呢?Google官方出具了一份文檔說明,我們這就來看一看。
傳統(tǒng)的DNS服務(wù)器緩慢的原因
隨著網(wǎng)頁越做越復(fù)雜,引用的資源可能來自多個(gè)域,于是DNS查找成為網(wǎng)頁瀏覽過程的瓶頸。無論何時(shí),客戶端需要查詢DNS服務(wù)器的時(shí)候,由于要查詢的DNS服務(wù)器數(shù)量和它所處的地理位置不同,時(shí)間延遲有很大的差異。例如,下圖顯示由PageSpeed測量出的瀏覽一個(gè)網(wǎng)頁時(shí)時(shí)間都花到哪些動(dòng)作上了,每個(gè)條塊表示網(wǎng)頁中引用的一個(gè)資源,黑色區(qū)域表示DNS查找所花掉的時(shí)間,在這個(gè)頁面中,前11秒執(zhí)行了13次DNS查找,雖然很多查找是并行執(zhí)行的,圖中顯示仍然有5個(gè)串行查找時(shí)間,它們就占據(jù)了11秒的大部分時(shí)間。
圖 1 PageSpeed報(bào)告的頁面瀏覽過程各個(gè)操作的時(shí)間
DNS延遲由兩部分組成
1、在客戶端(用戶)和DNS服務(wù)器之間的延遲,受網(wǎng)絡(luò)通信情況的約束,這個(gè)時(shí)間所占的比例是非常大的,如客戶端和服務(wù)器之間的距離,網(wǎng)絡(luò)擁塞,數(shù)據(jù)包丟失和長時(shí)間重傳延遲,服務(wù)器本身超載運(yùn)行,拒絕服務(wù)攻擊等。
2、DNS服務(wù)器之間的延遲,這種延遲主要是以下因素造成的:
(1)緩存丟失。如果某個(gè)查詢請(qǐng)求不能從緩存中直接返回結(jié)果,請(qǐng)求就會(huì)遞歸查詢其它DNS服務(wù)器,如果遇到根服務(wù)器出現(xiàn)這種問題,那影響更厲害。
(2)如果DNS服務(wù)器超載運(yùn)行,所有查詢請(qǐng)求必須排隊(duì)。
(3)惡意流量。拒絕服務(wù)器攻擊可以給DNS服務(wù)器帶來過度的負(fù)載。
我們認(rèn)為緩存丟失是DNS延遲最主要的因素。
緩存丟失
即使DNS服務(wù)器有充足的本地資源,但與遠(yuǎn)程DNS服務(wù)器之間的延遲是不可避免的,當(dāng)本地緩存丟失時(shí),解析器至少需要和一個(gè)其它DNS服務(wù)器溝通,有時(shí)甚至是兩個(gè)或多個(gè),通過對(duì)Google搜索的觀察,我們發(fā)現(xiàn)平均每次解析時(shí)間需要130毫秒,由于UDP包丟失或服務(wù)器不能響應(yīng),大約有4-6%的搜索請(qǐng)求會(huì)超時(shí)。如果我們采取措施解決如數(shù)據(jù)包丟失,死掉的DNS服務(wù)器,或DNS配置錯(cuò)誤,那響應(yīng)時(shí)間會(huì)上升到300-400毫秒。
雖然各個(gè)DNS緩存丟失率不盡相同,但由于以下原因,緩存丟失是不可避免的:
1、互聯(lián)網(wǎng)規(guī)模在不斷變大。隨著互聯(lián)網(wǎng)爆炸式增長,不斷有新用戶和新的網(wǎng)站加入,互聯(lián)網(wǎng)內(nèi)容已經(jīng)非常龐大。
2、TTL值。DNS TTL值降低的趨勢迫使任何解析都需要頻繁的查找。
3、緩存隔離。DNS服務(wù)器通常都采用了負(fù)載均衡技術(shù),每個(gè)獨(dú)立的服務(wù)器都維護(hù)一份獨(dú)立的緩存,而不能共用共享緩存池中的解析。
Google免費(fèi)公共DNS服務(wù)器如何提高DNS查找速度
在Google公共DNS中,我們采用了多種技術(shù)手段來提高DNS查找速度,其中一些方法是實(shí)驗(yàn)性質(zhì)的,另外一些是遵循標(biāo)準(zhǔn)的。
1、充分配置服務(wù)器處理來自客戶端的通信,包括惡意流量。
2、預(yù)防DoS和放大攻擊,雖然這是一個(gè)安全問題,但阻止DoS攻擊可以提高DNS服務(wù)器處理正常請(qǐng)求的能力。
3、共享緩存負(fù)載均衡,提高跨服務(wù)器集群的緩存命中率。
4、域名預(yù)取技術(shù)??朔鹘y(tǒng)的被動(dòng)式緩存缺陷,我們將通過這個(gè)技術(shù)滿足流量有限和緩存分區(qū)等技術(shù)挑戰(zhàn)。
5、提供給全球用戶使用。
Google免費(fèi)公共DNS服務(wù)器提速法寶一:正確配置服務(wù)器集群
緩存DNS解析器必須執(zhí)行比權(quán)威服務(wù)器更多的工作,因?yàn)楹芏囗憫?yīng)不能直接從內(nèi)存中找到結(jié)果,相反,它們需要與其它域名服務(wù)器通信,因此需要大量的網(wǎng)絡(luò)I/O。此外,開放式解析器容易遭受攻擊,如發(fā)送一些不能解析的全球,這增加了緩存丟失率,同時(shí)DoS攻擊會(huì)增加通信負(fù)載。如果解析器沒有正確配置集群,合理分配工作負(fù)載,可能也會(huì)帶來負(fù)面的性能影響。如數(shù)據(jù)包被丟掉,需要重傳,抵達(dá)域名服務(wù)器的請(qǐng)求必須排隊(duì)等。所有這些因素都會(huì)引起延遲。
因此,為DNS解析器提供大容量的I/O非常重要,包括處理可能的DoS攻擊,唯一有效的方法就是提供非常多的服務(wù)器,同時(shí),增加服務(wù)器最重要的就是不能降低緩存命中率,這需要采用有效的負(fù)載均衡策略。
Google免費(fèi)公共DNS服務(wù)器提速法寶二:共享緩存負(fù)載均衡
如果負(fù)載均衡配置不當(dāng),增加服務(wù)器反倒會(huì)降低緩存命中率,在一個(gè)常見的部署中,多臺(tái)服務(wù)器位于一臺(tái)負(fù)載均衡器背后,使用諸如循環(huán)這樣的簡單算法來分配請(qǐng)求,這樣做的結(jié)果是每臺(tái)服務(wù)器維護(hù)它們自己的獨(dú)立緩存,因此緩存內(nèi)容是孤立的。如果每個(gè)請(qǐng)求根據(jù)通信情況被隨機(jī)分配,緩存丟失率將不斷增長,例如,對(duì)于那些長TTL重復(fù)查詢的域名,緩存丟失率會(huì)隨集群中服務(wù)器數(shù)量的增加而增長。
為了提高緩存命中率,最重要的是負(fù)載均衡,避免緩存分散在各個(gè)服務(wù)器上,目前有兩種方法:一是使所有服務(wù)器使用全局緩存,二是按域名將緩存分區(qū),所有同一域名的查詢就會(huì)被定向到同一臺(tái)服務(wù)器。在Google公共DNS中,我們同時(shí)使用了這兩種技術(shù),每臺(tái)服務(wù)器都共享一個(gè)小的全局緩存,包括最流行的域名,這些服務(wù)器負(fù)載均衡就很好控制了,如果這些緩存不能滿足查詢,它會(huì)根據(jù)域名將請(qǐng)求發(fā)給另一個(gè)服務(wù)器,所有相同域名的查詢都會(huì)發(fā)給同一臺(tái)服務(wù)器。
Google免費(fèi)公共DNS服務(wù)器提速法寶三:域名預(yù)取技術(shù)
隨著互聯(lián)網(wǎng)規(guī)模的擴(kuò)大,傳統(tǒng)解析器命中率有些限制,它們一般緩存的都是比較流行的域名,我們希望也能夠處理冷門的域名,在傳統(tǒng)DNS服務(wù)器上,由于這些冷門域名訪問次數(shù)較少,過不了多長時(shí)間就會(huì)過期,就會(huì)從緩存中清除。
為了實(shí)現(xiàn)這些目標(biāo),我們正在試驗(yàn)域名預(yù)取技術(shù),當(dāng)前主要面臨兩大挑戰(zhàn):
1、考慮其他域名服務(wù)器的限制。為了確保我們的預(yù)取技術(shù)不會(huì)給其它域名服務(wù)器帶來過多的負(fù)載,我們隊(duì)我們的傳出請(qǐng)求做了限制,確保其它服務(wù)器的容量不被用盡。
2、管理我們自己服務(wù)器的容量限制。由于我們的服務(wù)器沒有無限的內(nèi)存和CPU,在挑選域名預(yù)取服務(wù)器時(shí)要謹(jǐn)慎。此外,為了保護(hù)緩存不被偽造的攻擊吃掉,我們將主要緩存分成主/次分區(qū),并根據(jù)流量類型授予每個(gè)分區(qū)上的讀/寫權(quán)限。
為了最大限度使用固定域名服務(wù)器,我們需要權(quán)衡每個(gè)域名記錄的成本,不過要確定每個(gè)域名的成本是一項(xiàng)復(fù)雜的任務(wù),因?yàn)槲覀兿雽?shí)現(xiàn)以下所有目標(biāo),其中一些是相互沖突的:
1、最小化緩存丟失。這意味著我們不需要預(yù)取流行的域名,因?yàn)榭颊5挠脩粼L問流量足以保證它不被清除出緩存。
2、即使我們的服務(wù)器正在遭受拒絕服務(wù)攻擊,但仍然要為流行的域名提供服務(wù)在,這意味著我們需要預(yù)取流行的域名。
3、避免假域名污染攻擊,這意味著我們不能完全依靠域名來選擇流量。
4、保持選中的域名更新,我們須臾根據(jù)流行度,成本等因素調(diào)整候選域名。
域名選擇問題的復(fù)雜性使得它不能在線完成,因此我們將預(yù)取系統(tǒng)分成了兩部分:管道組件,它是一個(gè)外部運(yùn)行的,脫機(jī)的,周期性的過程,它選擇域名提交到預(yù)取系統(tǒng);另一個(gè)是運(yùn)行時(shí)組件,定期根據(jù)它們的TTL窗口解析選中的域名。
管道組件綜合來自各個(gè)不同源的域名,主要是Google搜索索引和最近的Google公共DNS服務(wù)器日志,根據(jù)效益進(jìn)行排列,效益是各種因素的結(jié)合,包括命中率、緩存丟失成本和知名度。管道然后參照TTL成本,重新對(duì)所有記錄進(jìn)行排列,從頂部選擇所有域名,知道成本預(yù)算用盡,管道不斷更新選定的域名,運(yùn)行時(shí)組件解析選中的域名記錄,并根據(jù)它們的TTL設(shè)置刷新它們。
Google免費(fèi)公共DNS服務(wù)器提速法寶四:分布式DNS服務(wù)集群
對(duì)于封閉式解析器,不存在這個(gè)問題,但對(duì)于開放式解析器,服務(wù)器越接近用戶越好,他們?cè)诳蛻舳丝吹降难舆t會(huì)更少,此外,足夠的地域覆蓋也是保證端到端低延遲的重要手段,域名服務(wù)器通常會(huì)返回優(yōu)化后的結(jié)果,也就是說,如果一個(gè)內(nèi)容提供商在全世界都托管了他們的鏡像站點(diǎn),該提供商的域名服務(wù)器將會(huì)返回離訪問IP最近的IP地址。
Google公共DNS托管在全球的數(shù)據(jù)中心中,并使用選播路由將用戶轉(zhuǎn)向最近的數(shù)據(jù)中心。
注意,由于域名服務(wù)器根據(jù)解析器的IP地址而不是用戶的IP地址作為定位依據(jù)的,Google公共DNS服務(wù)器和其它開放式DNS服務(wù)有相同的限制:用戶可能不會(huì)被定向到本地DNS提供商的服務(wù)器。這可能導(dǎo)致某些網(wǎng)站瀏覽起來仍然很慢。
【51CTO.com譯稿,非經(jīng)授權(quán)請(qǐng)勿轉(zhuǎn)載。合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com,且不得修改原文內(nèi)容?!?
【編輯推薦】