302和DNS,HttpDNS調度比較


302和DNS調度比較

轉載 2015年11月30日 19:40:57
 
一般是兩者結合,DNS做省市級別和跨運營商的調度, 302做基於內容和精確IP的精確調度

DNS的優點:

DNS系統是天然的分布式結構
客戶端本機,LDNS都可以實現cache,架構本身就能實現高的伸縮性和性能
---------------------------------------------------------

DNS的缺點:

DNS並不是為GSLB設計的
GSLB 基於 local DNS的地址判斷,粒度較粗。而且LDNS可能和end user網絡距離很遠。
用戶可能會設置錯誤的Local DNS,該服務器和用戶實際距離較遠,比如8.8.8.8等
DNS請求里面不會帶有內容信息,GSLB只能擁有LDNS ip信息,無法針對內容作出更加靈活的判斷
因為DNS reply TTL,所以某個用戶一段時間內的請求都會導向同一個site (解決:趨向於較短的TTL)
某些Local DNS會忽略DNS TTL信息,而采用固定的TTL時間,對此我們無能為力
電信系統傾向於直接使用ip地址訪問,不使用域名
---------------------------------------------------------

302的優點:

可以直接得到end user ip和內容的地址,可以做出精確的redirect
每個請求都需要訪問GSLB,可以做出單獨的處理
可以在一個點方便的作出統計和認證
---------------------------------------------------------

302的缺點:

需要應用層協議支持(http / rtsp)
一般有重定向次數限制
GSLB需要處理較多的請求,卻沒有LDNS作為cache
GSLB暴露給end user , 容易遭受攻擊
用戶訪問GSLB本身就會帶來時延,可能深圳的用戶需要訪問北京的GSLB
單點故障(可以通過GSLB服務群集解決)
某些應用對URL變化敏感,比如WEB
某些客戶端支持不好(中文字符集等問題)

 

HttpDNS

首先,需要明確一個概念,什么叫做HttpDNS以及為什么要用HttpDNS。

HttpDNS是使用HTTP協議向DNS服務器的80端口進行請求,代替傳統的DNS協議向DNS服務器的53端口進行請求。也就是使用Http協議去進行dns解析請求,將服務器返回的解析結果,也就是域名對應的服務器ip獲得,直接向該ip發起對應的api服務請求,代替使用域名。

那么為什么要使用HttpDNS呢?主要原因有三點

1、LocalDNS劫持
2、平均訪問延遲下降
3、用戶連接失敗率下降

LocalDNS劫持: 由於HttpDNS是通過ip直接請求http獲取服務器A記錄地址,不存在向本地運營商詢問domain解析過程,所以從根本避免了劫持問題。 (對於http內容tcp/ip層劫持,可以使用驗證因子或者數據加密等方式來保證傳輸數據的可信度)
平均訪問延遲下降: 由於是ip直接訪問省掉了一次domain解析過程,(即使系統有緩存速度也會稍快一些‘毫秒級’)通過智能算法排序后找到最快節點進行訪問。
用戶連接失敗率下降: 通過算法降低以往失敗率過高的服務器排序,通過時間近期訪問過的數據提高服務器排序,通過歷史訪問成功記錄提高服務器排序。如果ip(a)訪問錯誤,在下一次返回ip(b)或者ip(c) 排序后的記錄。(LocalDNS很可能在一個ttl時間內(或多個ttl)都是返回記錄

 

至於HttpDNS更加詳細的內容,可以參考下面這篇文章

【鵝廠網事】全局精確流量調度新思路-HttpDNS服務詳解

那么,在客戶端該如何實現httpDNS呢?目前,國內有一部分廠商已經提供了這個解析服務,我們可以使用它們的服務,也可以使用自建服務器進行中轉,至於自建服務器上如何實現,是調第三方呢還是自己去解析呢這個屬於服務器的事,對於客戶端來說是完全透明的。這篇文章主要是為了學習,為了方便起見,我們直接使用第三方服務。目前,提供httpdns解析服務的有:

阿里雲HttpDNS

DNSPod D+

無論是哪個api,都是直接調用它們暴露的restful api獲得解析結果,只不過收費問題不一樣,當然也有免費的,免費的是有限制的。
阿里雲的HttpDNS服務的api比較標准,直接發一個Get請求,帶上請求參數,返回結果以json返回。

比如
http://203.107.1.1/d?host=www.taobao.com&ip=42.120.74.196
請求成功時,返回結果如下

 

{  
    "host": "www.taobao.com",  
    "ips": [  
    "115.238.23.241",  
    "115.238.23.251"  
    ],  
    "ttl": 57  
}  

 

 

 

而DNSPod的API基本上和阿里雲的沒什么差別,只不過返回結果不是以json返回,而是直接返回ip地址。舉個例子:
http://119.29.29.29/d?dn=www.dnspod.cn&ip=1.1.1.1&ttl=1

請求成功則返回ip地址,但不是json格式,如果存在ttl=1,則以逗號分隔

59.37.116.101,60

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM