雲計算

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崑崙探測工具):


596f0c463d1f6e2c3f3b06e421683442d74416366a63fbf7d20dd0447f21a905a126aa1eaaabad6d

探測的客戶端IP和Local DNS IP以及對應的地域,運營商如下所示:

客戶端IP

220.249.84.**

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 需支持edns client subnet 中等
http 302 有(需支持302跳轉) 最差

HTTPDNS綜合來看是最優的解決方案,當前阿里雲已經推出了HTTPDNS商業化產品。

Leave a Reply

Your email address will not be published. Required fields are marked *