HttpDNS介绍
一、什么HttpDNS:
HttpDNS是使用HTTP協(xié)議向DNS服務(wù)器的80端口進(jìn)行請(qǐng)求,代替?zhèn)鹘y(tǒng)的DNS協(xié)議向DNS服務(wù)器的53端口進(jìn)行請(qǐng)求。也就是使用Http協(xié)議去進(jìn)行dns解析請(qǐng)求,將服務(wù)器返回的解析結(jié)果(域名對(duì)應(yīng)的服務(wù)器IP),直接向該IP發(fā)起對(duì)應(yīng)的API服務(wù)請(qǐng)求,代替使用域名。
?
二、為什么要用HttpDNS:
那么為什么要使用HttpDNS呢?主要原因有四點(diǎn):
1、LocalDNS劫持;
由于HttpDNS是通過 IP直接請(qǐng)求http獲取服務(wù)器A記錄地址,不存在向本地運(yùn)營商詢問Domain解析過程,所以從根本避免了劫持問題。
2、平均訪問延遲下降:
由于是IP直接訪問省掉了一次Domain解析過程,(即使系統(tǒng)有緩存速度也會(huì)稍快一些“毫秒級(jí)”)通過智能算法排序后找到最快節(jié)點(diǎn)進(jìn)行訪問。
3、用戶連接失敗率下降:
通過算法降低以往失敗率過高的服務(wù)器排序,通過時(shí)間近期訪問過的數(shù)據(jù)提高服務(wù)器排序,通過歷史訪問成功記錄提高服務(wù)器排序。如果ip(a)訪問錯(cuò)誤,在下一次返回ip(b)或者ip(c) 排序后的記錄。(LocalDNS很可能在一個(gè)ttl時(shí)間內(nèi)(或多個(gè)ttl)都是返回記錄)。
4、域名解析異常及用戶訪問跨網(wǎng)的問題:
見第三部分:
?
三、HttpDNS如何解決域名解析異常及用戶訪問跨網(wǎng)的問題:
該部分轉(zhuǎn)自:【鵝廠網(wǎng)事】全局精確流量調(diào)度新思路-HttpDNS服務(wù)詳解
1、問題根源:
國內(nèi)運(yùn)營商LocalDNS造成的用戶訪問異常可以歸為下三類:
(1)域名緩存:
域名緩存很好理解,比如LocalDNS緩存了騰訊的域名的解析結(jié)果,不向騰訊權(quán)威DNS發(fā)起遞歸,示意圖如下:
為何LocalDNS要把域名解析結(jié)果進(jìn)行緩存呢?原因有以下幾個(gè):
①保證用戶訪問流量在本網(wǎng)內(nèi)消化:國內(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)流量完全留在了本地的目的。
②推送廣告:有部分LocalDNS會(huì)把部分域名解析結(jié)果的所指向的內(nèi)容緩存,并替換成第三方廣告聯(lián)盟的廣告。
這種類型的行為就是我們常說的域名緩存,域名緩存會(huì)導(dǎo)致用戶產(chǎn)生以下的訪問異常:
A、僅對(duì)80端口的http服務(wù)做了緩存,如果域名是通過https協(xié)議或其它端口提供服務(wù)的,用戶訪問就會(huì)出現(xiàn)失敗。比如支付服務(wù)、游戲通過指定端口連接connect server服務(wù)等。
B、緩存服務(wù)器的運(yùn)維水平參差不齊,時(shí)有出現(xiàn)緩存服務(wù)器故障導(dǎo)致用戶訪問異常的問題。
(2)解析轉(zhuǎn)發(fā):
除了域名緩存以外,運(yùn)營商的LocalDNS還存在解析轉(zhuǎn)發(fā)的現(xiàn)象。解析轉(zhuǎn)發(fā)是指運(yùn)營商自身不進(jìn)行域名遞歸解析,而是把域名解析請(qǐng)求轉(zhuǎn)發(fā)到其它運(yùn)營商的遞歸DNS上的行為。正常的LocalDNS遞歸解析過程是這樣的:
而部分小運(yùn)營商為了節(jié)省資源,就直接將解析請(qǐng)求轉(zhuǎn)發(fā)到了其它運(yùn)營的遞歸LocalDNS上去了:
這樣的直接后果就是騰訊權(quán)威DNS收到的域名解析請(qǐng)求的來源IP就成了其它運(yùn)營商的IP,最終導(dǎo)致用戶流量被導(dǎo)向了錯(cuò)誤的IDC,用戶訪問變慢。
(3)LocalDNS遞歸出口NAT:
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收到的域名解析請(qǐng)求的來源IP還是成了其它運(yùn)營商的IP,最終導(dǎo)致用戶流量被導(dǎo)向了錯(cuò)誤的IDC,用戶訪問變慢。
2、現(xiàn)有的解決方案及存在的問題:
運(yùn)營商的LocalDNS解析域名異常,給對(duì)用戶訪問騰訊業(yè)務(wù)的體驗(yàn)造成了非常大的損害。那么我們是如何處理這些域名解析異常的問題的呢?
(1)繞過自動(dòng)分配DNS,使用114dns或Google public DNS:
這個(gè)方案看上去很美好,114dns是國內(nèi)最大的中立緩存DNS,而Google又是秉承不作惡理念的互聯(lián)網(wǎng)工程帝國巨鱷,而且騰訊的權(quán)威DNS又支持edns-client-subnet功能,能直接識(shí)別使用Google publicDNS解析騰訊域名的用戶的IP地址,不會(huì)出現(xiàn)流量調(diào)度失效。但是問題來了:
①如何在用戶側(cè)構(gòu)造域名請(qǐng)求:對(duì)于PC端的客戶端來說,構(gòu)造一個(gè)標(biāo)準(zhǔn)的DNS請(qǐng)求包并不算什么難事。但在移動(dòng)端要向一個(gè)指定的LocalDNS上發(fā)送標(biāo)準(zhǔn)的DNS請(qǐng)求包,而且要兼容各種iOS和android的版本的話,技術(shù)上是可行的,只是兼容的成本會(huì)很高。
②推動(dòng)用戶修改配置極高:如果要推動(dòng)用戶手動(dòng)修改PC的DNS配置的話,在PC端和手機(jī)客戶端的WiFI下面還算勉強(qiáng)可行。但是要用戶修改在移動(dòng)互聯(lián)網(wǎng)環(huán)境下的DNS配置,其難度不言而喻。
(2)完全拋棄域名,自建connectcenter進(jìn)行流量調(diào)度:
如果要采用這種這種方案的話,首先你就得要拿到一份準(zhǔn)確的IP地址庫來判斷用戶的歸屬,然后再制定個(gè)協(xié)議搭個(gè)connect center來做調(diào)度,然后再對(duì)接入層做調(diào)度改造。這種方案和2種方案一樣,不是不能做,只是成本會(huì)比較高,尤其對(duì)于騰訊這種業(yè)務(wù)規(guī)模如此龐大的公司而言。
3、利用HttpDNS解決用戶域名解析異常:
既然上面的方案都存在那么多的問題,那有沒有一種調(diào)度精準(zhǔn)、成本低廉、配置方便的基于域名的流量調(diào)度系統(tǒng)呢?答案是肯定的。騰訊公司的GSLB 團(tuán)隊(duì)推出了一種全新的域名解析調(diào)度系統(tǒng):HttpDNS。HttpDNS是為移動(dòng)客戶端量身定做的基于Http協(xié)議和域名解析的流量調(diào)度解決方案,專治LocalDNS解析異常以及流量調(diào)度不準(zhǔn)。詳細(xì)介紹如下:
(1)HttpDNS基本原理:
HttpDNS的原理非常簡單,主要有兩步:
A、客戶端直接訪問HttpDNS接口,獲取業(yè)務(wù)在域名配置管理系統(tǒng)上配置的訪問延遲最優(yōu)的IP。(基于容災(zāi)考慮,還是保留次選使用運(yùn)營商LocalDNS解析域名的方式)
B、客戶端向獲取到的IP后就向直接往此IP發(fā)送業(yè)務(wù)協(xié)議請(qǐng)求。以Http請(qǐng)求為例,通過在header中指定host字段,向HttpDNS返回的IP發(fā)送標(biāo)準(zhǔn)的Http請(qǐng)求即可。
(2)HttpDNS優(yōu)勢:
從原理上來講,HttpDNS只是將域名解析的協(xié)議由DNS協(xié)議換成了Http協(xié)議,并不復(fù)雜。但是這一微小的轉(zhuǎn)換,卻帶來了無數(shù)的收益:
①根治域名解析異常:由于繞過了運(yùn)營商的LocalDNS,用戶解析域名的請(qǐng)求通過Http協(xié)議直接透傳到了騰訊的HttpDNS服務(wù)器IP上,用戶在客戶端的域名解析請(qǐng)求將不會(huì)遭受到域名解析異常的困擾。
②調(diào)度精準(zhǔn):HttpDNS能直接獲取到用戶IP,通過結(jié)合騰訊自有專利技術(shù)生成的IP地址庫以及測速系統(tǒng),可以保證將用戶引導(dǎo)的訪問最快的IDC節(jié)點(diǎn)上。
③實(shí)現(xiàn)成本低廉:接入HttpDNS的業(yè)務(wù)僅需要對(duì)客戶端接入層做少量改造,無需用戶手機(jī)進(jìn)行root或越獄;而且由于Http協(xié)議請(qǐng)求構(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)度。比如指定版本的客戶端連接請(qǐng)求的IP地址,指定網(wǎng)絡(luò)類型的用戶連接指定的IP地址等。
?
四、客戶端實(shí)現(xiàn)HttpDNS:
目前國內(nèi)有一部分廠商已經(jīng)提供了這個(gè)解析服務(wù),我們可以使用它們的服務(wù),也可以使用自建服務(wù)器進(jìn)行中轉(zhuǎn),至于自建服務(wù)器上如何實(shí)現(xiàn),是調(diào)第三方呢還是自己去解析呢屬于服務(wù)器的事,對(duì)于客戶端來說是完全透明的。這篇文章主要是為了學(xué)習(xí),為了方便起見,我們直接使用第三方服務(wù)。目前,提供httpdns解析服務(wù)的有:阿里云HttpDNS、DNSPod D+
無論是哪個(gè)api,都是直接調(diào)用它們暴露的RestFul?api獲得解析結(jié)果,阿里云的HttpDNS服務(wù)的api比較標(biāo)準(zhǔn),直接發(fā)一個(gè)Get請(qǐng)求,帶上請(qǐng)求參數(shù),返回結(jié)果以json返回。比如:
http://203.107.1.1/d?host=www.taobao.com&ip=42.120.74.196
請(qǐng)求成功時(shí),返回結(jié)果如下:
{"host": "www.taobao.com","ips": ["115.238.23.241","115.238.23.251"],"ttl": 57 }而DNSPod的API基本上和阿里云的沒什么差別,只不過返回結(jié)果不是以json返回,而是直接返回ip地址。舉個(gè)例子:
http://119.29.29.29/d?dn=www.dnspod.cn&ip=1.1.1.1&ttl=1
請(qǐng)求成功則返回ip地址,但不是json格式,如果存在ttl=1,則以逗號(hào)分隔
59.37.116.101,60
?
總結(jié)
- 上一篇: RSA加解密算法的Java实现
- 下一篇: Wireshark介绍 与 过滤器表达式