常見問題
移動(dòng)調(diào)度中心高可用
Q:移動(dòng)調(diào)度中心實(shí)現(xiàn)高可用的策略是什么?
A:移動(dòng)調(diào)度中心實(shí)現(xiàn)高可用的策略如下:
移動(dòng)調(diào)度中心已預(yù)先配置好自身域名和 IP,這樣 App 可以拉取到 MDGC 自身的域名調(diào)度配置。
移動(dòng)調(diào)度中心已預(yù)先配置好域名和 IP 到公網(wǎng) DNS,主要用于 App 首次安裝啟動(dòng)后通過公網(wǎng)域名拉取自身 IP。
移動(dòng)調(diào)度中心 SDK 內(nèi)置有移動(dòng)調(diào)度中心域名的 IP 硬編碼,防止 App 首次安裝后運(yùn)營商的 DNS 不可用。
Q:移動(dòng)調(diào)度中心域名獲取IP的策略有哪些?
A:移動(dòng)調(diào)度中心域名獲取自身域名 IP 的策略如下:
從移動(dòng)調(diào)度中心后臺(tái)配置中獲取,移動(dòng)調(diào)度中心會(huì)下發(fā)移動(dòng)調(diào)度中心 IP list。
若移動(dòng)調(diào)度中心 IP list 中沒有 IP,則需進(jìn)行 httpdns 解析。
若 httpdns 解析失敗,則由客戶端進(jìn)行 local DNS 解析獲取 IP。
IP 列表拉取
Q:客戶端調(diào)用服務(wù)端接口時(shí),拉取域名對應(yīng)的 IP 列表的時(shí)機(jī)有哪些?
A:可以在以下情形下拉取域名對應(yīng) IP 列表:
客戶端程序首次啟動(dòng)時(shí)拉取 IP 列表。
前臺(tái)網(wǎng)絡(luò)切換時(shí)拉取 IP 列表。
IP TTL 超時(shí)的情況下拉取 IP 列表。
MGS RPC 鏈路
Q:對應(yīng)的 MGS RPC 鏈路是否必須為 H2?
A:不是的。在使用移動(dòng)調(diào)度中心 SDK 將移動(dòng)網(wǎng)關(guān)接入移動(dòng)調(diào)度中心時(shí),不需要使用 H2 鏈路。
IPv6 降級(jí)
Q:IPv6 是如何降級(jí)的?
A:移動(dòng)調(diào)度中心服務(wù)端配置域名對應(yīng)的 IPv4 和 IPv6 地址,客戶端發(fā)起請求后,將全量提供給客戶端進(jìn)行業(yè)務(wù)選擇。當(dāng) MDS 上最終開啟客戶端 H2 加 IPv6 開關(guān)時(shí),如果 IPv6 不可用,客戶端會(huì)有自動(dòng)降級(jí)處理,連續(xù) 4 次 RPC 失敗則自動(dòng)降級(jí)。IPv6 失敗降級(jí)后,3 小時(shí)內(nèi)不恢復(fù),這時(shí)即使開關(guān)可以獲取到 IPv6 為 true
的開關(guān),也不會(huì)通過 IPv6 建連來規(guī)避這部分用戶使用 IPv6 的異常問題。
接入常見問題
Q:項(xiàng)目中使用自建應(yīng)用的配置文件,卻沒有配置移動(dòng)調(diào)度中心域名的分組信息,為什么調(diào)用移動(dòng)調(diào)度中心配置接口時(shí)能獲取到相關(guān) IP 信息?
A:移動(dòng)調(diào)度中心返回的信息包括內(nèi)置應(yīng)用和自建應(yīng)用兩部分,內(nèi)置應(yīng)用中會(huì)提前創(chuàng)建域名 IP (不建議執(zhí)行此操作),自建應(yīng)用中用戶可以配置自己的域名 IP 信息。客戶端使用自建應(yīng)用的配置信息,即使沒有在自建應(yīng)用中配置,也會(huì)默認(rèn)下發(fā)內(nèi)置應(yīng)用中的域名IP信息。
Q: 必須要使用內(nèi)置應(yīng)用的配置文件嗎?
A: 內(nèi)置應(yīng)用用來配置移動(dòng)調(diào)度中心以及 MGS 等 mPaaS 組件域名信息,移動(dòng)調(diào)度中心每次處理域名請求都會(huì)默認(rèn)下發(fā)內(nèi)置應(yīng)用中配置的域名信息。移動(dòng)調(diào)度中心自身的域名必須配置在內(nèi)置應(yīng)用內(nèi),MGS 可以不配置,不配置則使用 Local DNS 解析。
Q:同一個(gè)域名可以添加多個(gè) IPv4、IPv6 地址嗎?
A:可以。
Q:添加多個(gè) IP 后,服務(wù)端一次返回多個(gè) IP 還是多個(gè) IP 輪詢返回?如果返回多個(gè) IP 到客戶端,那么客戶端有輪詢能力嗎?
A:服務(wù)端會(huì)一次返回全部 IP 信息,客戶端會(huì)輪詢IP信息,如果輪詢信息IP失敗,會(huì)使用 LocalDNS 解析 IP。
客戶端問題
Q:IPv4/IPv6 訪問邏輯是什么樣的?
A:若 RPC 的 IPv6 開關(guān)開啟并且當(dāng)前網(wǎng)絡(luò)環(huán)境支持 IPv6,則優(yōu)先使用 IPv6 地址發(fā)起請求。否則優(yōu)先使用 IPv4 地址。
Q:對移動(dòng)調(diào)度中心服務(wù)訪問失敗的處理機(jī)制是什么?
A:若訪問移動(dòng)調(diào)度中心服務(wù)失敗,表示無法拉取到 IP 列表,則發(fā)起 RPC 請求時(shí)仍需使用域名。
Q:用當(dāng)前 App 緩存中的 IP 訪問失敗后的詳細(xì)處理機(jī)制是什么?
A:使用 IP 發(fā)起 RPC 請求失敗后,到下一次發(fā)起請求時(shí),會(huì)切換到下一個(gè) IP,如果發(fā)現(xiàn) IP 列表已遍歷完,則使用域名請求。
Q:是否存在決定客戶端何時(shí)獲取 IP 列表的 SDK?
A:RPC中提供了可以開啟/關(guān)閉移動(dòng)調(diào)度中心的開關(guān),開關(guān)默認(rèn)開啟。如果關(guān)閉移動(dòng)調(diào)度中心,則使用域名發(fā)起請求。
TTL+TTD 邏輯判斷
Q:TTL+TTD 的邏輯判斷流程是什么樣的?
A:判斷邏輯如下:
客戶端獲取到域名對應(yīng)的 IP 信息后,判斷 TTL 是否超時(shí),若超時(shí)執(zhí)行步驟 2,否則執(zhí)行步驟5。
TTL 超時(shí),保留 IP 信息并異步請求新的 IP 信息,然后執(zhí)行步驟 3。
判斷 TTD 是否超時(shí),若超時(shí)執(zhí)行步驟 4,否則執(zhí)行步驟 5。
TTD 超時(shí),棄用 IP 信息,返回空,流程結(jié)束。
返回 IP 信息列表,流程結(jié)束。
TTL 超時(shí),一定會(huì)發(fā)起請求更新 IP 信息,跟 TTD 是否超時(shí)無關(guān)。
TTL 超時(shí),TTD 未必超時(shí);TTD 超時(shí),TTL 必然超時(shí)。
TTD 超時(shí),返回空。如用戶下次發(fā)起請求時(shí),新的 IP 信息還未返回,仍然會(huì)返回空。