302和DNS調度比較
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
DNSPod D+
無論是哪個api,都是直接調用它們暴露的restful api獲得解析結果,只不過收費問題不一樣,當然也有免費的,免費的是有限制的。
阿里雲的HttpDNS服務的api比較標准,直接發一個Get請求,帶上請求參數,返回結果以json返回。
比如
http://203.107.1.1/d?host=www.taobao.com&ip=42.120.74.196
請求成功時,返回結果如下
而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