DNS(Domain Name System,域名系統(tǒng)),DNS 服務(wù)用于在網(wǎng)絡(luò)請求時(shí),將域名轉(zhuǎn)為 IP 地址。因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的 IP 數(shù)串。
遞歸查詢:如果主機(jī)所詢問的本地域名服務(wù)器不知道被查詢域名的 IP 地址,那么本地域名服務(wù)器就以 DNS 客戶的身份,向其他根域名服務(wù)器繼續(xù)發(fā)出查詢請求報(bào)文,而不是讓該主機(jī)自己進(jìn)行下一步的查詢。
迭代查詢:當(dāng)根域名服務(wù)器收到本地域名服務(wù)器發(fā)出的迭代查詢請求報(bào)文時(shí),要么給出所要查詢的 IP 地址,要么告訴本地域名服務(wù)器:你下一步應(yīng)當(dāng)向哪一個(gè)域名服務(wù)器進(jìn)行查詢。然后讓本地域名服務(wù)器進(jìn)行后續(xù)的查詢,而不是替本地域名服務(wù)器進(jìn)行后續(xù)的查詢。
由此可見,客戶端到 Local DNS 服務(wù)器,Local DNS 與上級 DNS 服務(wù)器之間屬于遞歸查詢;DNS 服務(wù)器與根 DNS 服務(wù)器之前屬于迭代查詢。
但凡使用域名來給用戶提供服務(wù)的互聯(lián)網(wǎng)企業(yè),都或多或少地?zé)o法避免在有中國特色的互聯(lián)網(wǎng)環(huán)境中遭遇到各種域名被緩存、用戶跨網(wǎng)訪問緩慢等問題。那么對于騰訊這樣的域名數(shù)量在10萬級別的互聯(lián)網(wǎng)公司來講,域名解析異常的情況到底有多嚴(yán)重呢?每天騰訊的分布式域名解析監(jiān)測系統(tǒng)在不停地對全國所有的重點(diǎn)LocalDNS進(jìn)行探測,騰訊域名在全國各地的日解析異常量是已經(jīng)超過了80萬條。
域名緩存就是LocalDNS緩存了騰訊的域名的解析結(jié)果,不向權(quán)威DNS發(fā)起遞歸
頁面不能及時(shí)更新
國內(nèi)的各互聯(lián)網(wǎng)接入運(yùn)營商的帶寬資源、網(wǎng)間結(jié)算費(fèi)用、IDC機(jī)房分布、網(wǎng)內(nèi)ICP資源分布等存在較大差異。為了保證網(wǎng)內(nèi)用戶的訪問質(zhì)量,同時(shí)減少跨網(wǎng)結(jié)算,運(yùn)營商在網(wǎng)內(nèi)搭建了內(nèi)容緩存服務(wù)器,通過把域名強(qiáng)行指向內(nèi)容緩存服務(wù)器的IP地址,就實(shí)現(xiàn)了把本地本網(wǎng)流量完全留在了本地的目的,這就導(dǎo)致了用戶不能訪問到實(shí)時(shí)頁面,只是訪問到了運(yùn)營商提供的本地緩存。
A、僅對80端口的http服務(wù)做了緩存,如果域名是通過https協(xié)議或其它端口提供服務(wù)的,用戶訪問就會出現(xiàn)失敗。比如支付服務(wù)、游戲通過指定端口連接connect server服務(wù)等。
B、緩存服務(wù)器的運(yùn)維水平參差不齊,時(shí)有出現(xiàn)緩存服務(wù)器故障導(dǎo)致用戶訪問異常的問題。
推送廣告
有部分LocalDNS會把部分域名解析結(jié)果的所指向的內(nèi)容緩存,并替換成第三方廣告聯(lián)盟的廣告。這就是我們經(jīng)常在頁面右下角看到的一些莫名廣告,這些廣告可能就是運(yùn)營商添加進(jìn)來的。(改用https協(xié)議可避免運(yùn)營商推送廣告)
除了域名緩存以外,運(yùn)營商的LocalDNS還存在解析轉(zhuǎn)發(fā)的現(xiàn)象。解析轉(zhuǎn)發(fā)是指運(yùn)營商自身不進(jìn)行域名遞歸解析,而是把域名解析請求轉(zhuǎn)發(fā)到其它運(yùn)營商的遞歸DNS上的行為。
而部分小運(yùn)營商為了節(jié)省資源,就直接將解析請求轉(zhuǎn)發(fā)到了其它運(yùn)營的遞歸LocalDNS上去了。
這樣的直接后果就是權(quán)威DNS收到的域名解析請求的來源IP就成了其它運(yùn)營商的IP,最終導(dǎo)致用戶流量被導(dǎo)向了錯(cuò)誤的IDC,用戶訪問變慢。
LocalDNS遞歸出口NAT指的是運(yùn)營商的LocalDNS按照標(biāo)準(zhǔn)的DNS協(xié)議進(jìn)行遞歸,但是因?yàn)樵诰W(wǎng)絡(luò)上存在多出口且配置了目標(biāo)路由NAT,結(jié)果導(dǎo)致LocalDNS最終進(jìn)行遞歸解析的時(shí)候的出口IP就有概率不為本網(wǎng)的IP地址。
這樣的直接后果就是GSLB DNS收到的域名解析請求的來源IP還是成了其它運(yùn)營商的IP,最終導(dǎo)致用戶流量被導(dǎo)向了錯(cuò)誤的IDC,用戶訪問變慢。
傳統(tǒng)的基于 UDP 協(xié)議的公共 DNS 服務(wù)極易發(fā)生 DNS 劫持,從而造成安全問題。
通過商務(wù)手段推動(dòng)運(yùn)營商解決上述問題;
通過用戶投訴本地運(yùn)營商解決DNS問題;
耗時(shí)并且效果一般。
使用114dns(114.114.114.114)或者google public dns(8.8.8.8)
需要指導(dǎo)用戶在PC、wifi移動(dòng)端進(jìn)行相應(yīng)設(shè)置,存在門檻;
修改移動(dòng)互聯(lián)網(wǎng)(3G、4G)環(huán)境的DNS配置,難度很高;
需要自建serverlist列表,下發(fā)IP對應(yīng)IP地址。
如果要采用這種這種方案的話,首先你就得要拿到一份準(zhǔn)確的IP地址庫來判斷用戶的歸屬,然后再制定個(gè)協(xié)議搭個(gè)connect center來做調(diào)度,然后再對接入層做調(diào)度改造。這種方案和第2種方案一樣,不是不能做,只是成本會比較高,尤其對于騰訊這種業(yè)務(wù)規(guī)模如此龐大的公司而言。
騰訊公司的GSLB 團(tuán)隊(duì)推出了一種全新的域名解析調(diào)度系統(tǒng):HttpDNS。HttpDNS是為移動(dòng)客戶端量身定做的基于Http協(xié)議和域名解析的流量調(diào)度解決方案,專治LocalDNS解析異常以及流量調(diào)度不準(zhǔn)。HttpDNS利用 HTTP 協(xié)議與 DNS 服務(wù)器交互,代替了傳統(tǒng)的基于 UDP 協(xié)議的 DNS 交互,繞開了運(yùn)營商的 Local DNS,有效防止了域名劫持,提高域名解析效率。另外,由于 DNS 服務(wù)器端獲取的是真實(shí)客戶端 IP 而非 Local DNS 的 IP,能夠精確定位客戶端地理位置、運(yùn)營商信息,從而有效改進(jìn)調(diào)度精確性。
HttpDNS的原理非常簡單,主要有兩步:
A、客戶端直接訪問HttpDNS接口,獲取業(yè)務(wù)在域名配置管理系統(tǒng)上配置的訪問延遲最優(yōu)的IP。(基于容災(zāi)考慮,還是保留次選使用運(yùn)營商LocalDNS解析域名的方式)
B、客戶端獲取到的IP后就直接往此IP發(fā)送業(yè)務(wù)協(xié)議請求。以Http請求為例,通過在header中指定host字段,向HttpDNS返回的IP發(fā)送標(biāo)準(zhǔn)的Http請求即可。
從原理上來講,HttpDNS只是將域名解析的協(xié)議由DNS協(xié)議換成了Http協(xié)議,并不復(fù)雜。但是這一微小的轉(zhuǎn)換,卻帶來了無數(shù)的收益:
根治域名解析異常:由于繞過了運(yùn)營商的LocalDNS,用戶解析域名的請求通過Http協(xié)議直接透傳到了騰訊的HttpDNS服務(wù)器IP上,用戶在客戶端的域名解析請求將不會遭受到域名解析異常的困擾。
LocalDNS劫持:由于HttpDNS是通過ip直接請求http獲取服務(wù)器A記錄地址,不存在向本地運(yùn)營商詢問domain解析過程,所以從根本避免了劫持問題。
平均訪問延遲下降:由于是ip直接訪問省掉了一次domain解析過程。
用戶連接失敗率下降:
通過算法降低以往失敗率過高的服務(wù)器排序,通過時(shí)間近期訪問過的數(shù)據(jù)提高服務(wù)器排序,通過歷史訪問成功記錄提高服務(wù)器排序。
調(diào)度精準(zhǔn):HttpDNS能直接獲取到用戶IP,通過結(jié)合騰訊自有專利技術(shù)生成的IP地址庫以及測速系統(tǒng),可以保證將用戶引導(dǎo)的訪問最快的IDC節(jié)點(diǎn)上。
實(shí)現(xiàn)成本低廉:接入HttpDNS的業(yè)務(wù)僅需要對客戶端接入層做少量改造,無需用戶手機(jī)進(jìn)行root或越獄;而且由于Http協(xié)議請求構(gòu)造非常簡單,兼容各版本的移動(dòng)操作系統(tǒng)更不成問題;另外HttpDNS的后端配置完全復(fù)用現(xiàn)有權(quán)威DNS配置,管理成本也非常低??偠灾?,就是以最小的改造成本,解決了業(yè)務(wù)遭受域名解析異常的問題,并滿足業(yè)務(wù)精確流量調(diào)度的需求。
擴(kuò)展性強(qiáng):HttpDNS提供可靠的域名解析服務(wù),業(yè)務(wù)可將自有調(diào)度邏輯與HttpDNS返回結(jié)果結(jié)合,實(shí)現(xiàn)更精細(xì)化的流量調(diào)度。比如指定版本的客戶端連接請求的IP地址,指定網(wǎng)絡(luò)類型的用戶連接指定的IP地址等。
用戶將首選的域名解析方式切換到了HttpDNS,那么HttpDNS的高可用又是如何保證的呢?另外不同運(yùn)營商的用戶訪問到同一個(gè)HttpDNS的服務(wù)IP,用戶的訪問延遲如何保證?
為了保證高可用及提升用戶體驗(yàn),HttpDNS通過接入了騰訊公網(wǎng)交換平臺的BGP Anycast網(wǎng)絡(luò),與全國多個(gè)主流運(yùn)營商建立了BGP互聯(lián),保證了這些運(yùn)營商的用戶能夠快速地訪問到HttpDNS服務(wù);另外HttpDNS在多個(gè)數(shù)據(jù)中心進(jìn)行了部署,任意一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí)均能無縫切換到備份節(jié)點(diǎn),保證用戶解析正常。
如果只有一個(gè)VIP(虛擬IP),即可以增加DNS記錄的TTL,減少解析的延遲。
Anycast可以使用一個(gè)IP,將數(shù)據(jù)路由到最近的一組服務(wù)器,通過BGP宣告這個(gè)IP,但是這存在兩個(gè)問題:
如果某個(gè)節(jié)點(diǎn)承載過多的用戶會過載
BGP路由計(jì)算可能會導(dǎo)致連接重置
因此需要一個(gè)”穩(wěn)定anycast“技術(shù)來實(shí)現(xiàn)。
聯(lián)系客服