一、正常DNS排程政策原理
以CDN系統為例(其他業務系統大多采用類似的政策),來說明一下多地域部署服務如何實作使用者通路請求排程的。
Step 1:用戶端(假設IP位址為IP1)向Local DNS(假設IP位址為IP2)發出域名解析請求(假設請求的域名為www.taobao.com)
Step 2:Local DNS代理用戶端向權威伺服器發起域名解析請求
Step 3:權威伺服器根據域名(www.taobao.com)和IP2(對應的地域和ISP)進行排程并傳回對應的解析結果。
Step 4: 用戶端根據排程傳回的IP發起業務通路請求。
二、排程精确性問題
2.1 問題描述
從上面的排程過程可以看出,業務系統會根據用戶端的local dns IP來判斷客戶所處地域和營運商,并根據該地域和營運商來排程到就近的服務節點。
可以看出,當客戶的Local DNS與客戶的地域和營運商不比對時,此時按照Local DNS來排程就會出現排程不精确的問題。
下面看幾個來自客戶的回報(探測結果來自AliCDN昆侖探測工具):

探測的用戶端IP和Local DNS IP以及對應的地域,營運商如下所示:
用戶端IP | 220.249.84.** | |
用戶端歸屬 | 武漢聯通 | |
Local DNS IP | 183.61.13.** | 222.73.134.** |
Local DNS 歸屬 | 珠海電信 | 上海電信 |
很容易看出,Local DNS地域和營運商與用戶端都不比對,此時按照Local DNS IP排程會對使用者體驗造成非常大的影響(國内跨營運商的通路延遲和帶寬都存在非常大的問題,相信大家有深刻體驗)。
2.2 問題影響面
根據我們的經驗,影響的用戶端占比在3%-7%之間。
2.3 原因
無線場景下主要由于以下兩個方面因素導緻:
(1)國内三大營運商Local DNS布點不足且不均勻,大量流量集中在2000個以内的Local DNS上,大的Local DNS對應的流量超過5Gb
(2)很多手機(尤其是山寨機)Local DNS配置不準确
如果擴充到全網(含有線通路請求),還需要考慮一個因素:
(3)公共DNS(如google 8.8.8.8,阿裡的223.5.5.5,223.6.6.6)導緻排程系統無法識别Local DNS的具體位置。
三、解決辦法
業界目前常見的解決思路都是通過擷取用戶端的IP來精确定位用戶端地域和營運商,實作上,有三種方式:
(1)HTTPDNS
用戶端通過HTTP請求向httpdns伺服器發出域名解析請求,此時httpdns伺服器可以拿到用戶端的精确IP,并基于用戶端IP進行排程。
(2)edns client subnet
通過dns包中加入用戶端IP資訊,使得DNS排程系統可以拿到用戶端IP并進行排程。
(3)http 302跳轉
當排程系統給出的排程結果不準确時,業務伺服器仍然可以根據用戶端IP來判斷排程是否合理,并且在必要時通過302跳轉來實作重定向進而實作精确排程。
三種方式的優缺點對比如下:
用戶端修改 | Local DNS修改 | 權威DNS修改 | 系統開銷 | 使用範圍 | |
HTTPDNS | 有 | 無 | 低 | 最廣 | |
edns client subnet | 需支援edns client subnet | 中等 | |||
http 302 | 有(需支援302跳轉) | 高 | 最差 |
HTTPDNS綜合來看是最優的解決方案,目前阿裡雲已經推出了
商業化産品。
