天天看點

App如何實作就近接入?如何改善排程不準問題?

一、正常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昆侖探測工具):

App如何實作就近接入?如何改善排程不準問題?
App如何實作就近接入?如何改善排程不準問題?

探測的用戶端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綜合來看是最優的解決方案,目前阿裡雲已經推出了

商業化産品。

App如何實作就近接入?如何改善排程不準問題?
App如何實作就近接入?如何改善排程不準問題?

繼續閱讀