聊聊DNS,HTTPDNS
DNS域名解析就是將我們熟知的域名轉換為ip的服務。如將 www.baidu.com 轉換為 61.135.169.125 這樣的ip地址。
想要記住域名比較容易,但是想要記住ip就不容易了,由此可見dns服務是多麽的重要。
dns不僅僅可以對域名解析出ip。它還能根據客戶端的所在地理位置解析出對客戶端最優質的ip。這個怎麽理解呢,比如我在深圳訪問 baidu.com ,那麽dns服務器會將解析成就近的機房的ip地址,而不會讓我去訪問位於北京的機房。
這就是 全局負載均衡(GSLB,Global Server Load Balance) 。因為,為了保證服務應用的高可用性,往往會部署多個機房,每個地方都會有自己的IP地址。當用戶訪問某個域名的時候,這些IP地址可以輪詢這些機房。另外盡可能希望,北京的用戶訪問北京的機房,上海的用戶訪問上海的機房。這樣客戶體驗就會非常好,訪問速度也會非常快。
看似十分完美的 GSLB 和 SLB。實則有很多的問題。
既然傳統 DNS 問題這麽多,那怎麽解決呢?
有,那就是HTTPDNS
HTTPDNS不走傳統的DNS解析,而是自己搭建基於HTTP協議的DNS服務器集群,分布多個地點和多地運營商,當客戶端需要DNS解析的時候,就通過HTTP協議進行請求這個服務器集群。到就近的地址。
而使用HTTPDNS的往往是手機應用,需要在手機端嵌入支持HTTPDNS的客戶端SDK。
在客戶端的SDK裏動態請求服務端,獲取HTTPDNS的服務器列表。緩存到本地,隨著不斷域名解析,SDK也會在本地緩存DNS域名解析的結果。
當應用要訪問壹個地址時,先看下是否有緩存(這個緩存時手機應用自己做的,不走運營商的緩存,所以如何更新,合適更新全在自己的掌控之中)如果本地沒有緩存,那就請求 HTTPDNS的服務器吧。而手機客戶端當然知道收集在哪個運營商,在哪個地址,由於是直接的HTTP通信,HTTPDNS也能更好的返回結果信息,更好的做到全局負載均衡。
在 客戶端 ,可以知道確切的地理位置信息,運營商。HTTPDNS可以根據這些信息返回最佳的服務節點。
如果有多個節點,還會考慮錯誤率,請求時間,服務器壓力,網絡狀況等,進行綜合選擇。而非僅僅考慮地理位置。當有壹個節點宕機或者性能下降時,盡快切換。
在 服務端 ,服務端可以配置不同的服務質量的權重,優先級,對客戶端上報的錯誤率,請求時間,請求質量等數據,統計,分析,聚合,以此查看不同的IP的服務質量。
為了不讓調度失真,客戶端可以根據,不同的移動網絡運營商的WIFI的SSID分維度緩存,不同的運營商或者WIFI解析出來的結果會不同。
2016.4.1日,Google正式啟用了 DNS-Over-HTTPS 域名安全查詢服務
該服務支持以下參數:
edns_client_subnet 這裏有個坑,比如妳有海外需求,需要將 域名cname到海外著名的cdn廠商,比如fastly,akamai等,妳需要確定cdn廠商認不認edns擴展,比如 akamai 的權威是不認 阿裏ame 到 騰訊雲上去了,看來權威在騰訊雲上
看看是否有解析結果。
參考 1. 劉超老師的極客時間
2. /windyf2013/article/details/79727348