常见问题

移动调度中心高可用

Q:移动调度中心实现高可用的策略是什么?

A:移动调度中心实现高可用的策略如下:

  • 移动调度中心已预先配置好自身域名和 IP,这样 App 可以拉取到 MDGC 自身的域名调度配置。

  • 移动调度中心已预先配置好域名和 IP 到公网 DNS,主要用于 App 首次安装启动后通过公网域名拉取自身 IP。

  • 移动调度中心 SDK 内置有移动调度中心域名的 IP 硬编码,防止 App 首次安装后运营商的 DNS 不可用。

Q:移动调度中心域名获取IP的策略有哪些?

A:移动调度中心域名获取自身域名 IP 的策略如下:

  • 从移动调度中心后台配置中获取,移动调度中心会下发移动调度中心 IP list。

  • 若移动调度中心 IP list 中没有 IP,则需进行 httpdns 解析。

  • 若 httpdns 解析失败,则由客户端进行 local DNS 解析获取 IP。

IP 列表拉取

Q:客户端调用服务端接口时,拉取域名对应的 IP 列表的时机有哪些?

A:可以在以下情形下拉取域名对应 IP 列表:

  • 客户端程序首次启动时拉取 IP 列表。

  • 前台网络切换时拉取 IP 列表。

  • IP TTL 超时的情况下拉取 IP 列表。

MGS RPC 链路

Q:对应的 MGS RPC 链路是否必须为 H2?

A:不是的。在使用移动调度中心 SDK 将移动网关接入移动调度中心时,不需要使用 H2 链路。

IPv6 降级

Q:IPv6 是如何降级的?

A:移动调度中心服务端配置域名对应的 IPv4 和 IPv6 地址,客户端发起请求后,将全量提供给客户端进行业务选择。当 MDS 上最终开启客户端 H2 加 IPv6 开关时,如果 IPv6 不可用,客户端会有自动降级处理,连续 4 次 RPC 失败则自动降级。IPv6 失败降级后,3 小时内不恢复,这时即使开关可以获取到 IPv6 为 true 的开关,也不会通过 IPv6 建连来规避这部分用户使用 IPv6 的异常问题。

接入常见问题

Q:项目中使用自建应用的配置文件,却没有配置移动调度中心域名的分组信息,为什么调用移动调度中心配置接口时能获取到相关 IP 信息?

A:移动调度中心返回的信息包括内置应用和自建应用两部分,内置应用中会提前创建域名 IP (不建议执行此操作),自建应用中用户可以配置自己的域名 IP 信息。客户端使用自建应用的配置信息,即使没有在自建应用中配置,也会默认下发内置应用中的域名IP信息。

Q: 必须要使用内置应用的配置文件吗?

A: 内置应用用来配置移动调度中心以及 MGS 等 mPaaS 组件域名信息,移动调度中心每次处理域名请求都会默认下发内置应用中配置的域名信息。移动调度中心自身的域名必须配置在内置应用内,MGS 可以不配置,不配置则使用 Local DNS 解析。

Q:同一个域名可以添加多个 IPv4、IPv6 地址吗?

A:可以。

Q:添加多个 IP 后,服务端一次返回多个 IP 还是多个 IP 轮询返回?如果返回多个 IP 到客户端,那么客户端有轮询能力吗?

A:服务端会一次返回全部 IP 信息,客户端会轮询IP信息,如果轮询信息IP失败,会使用 LocalDNS 解析 IP。

客户端问题

Q:IPv4/IPv6 访问逻辑是什么样的?

A:若 RPC 的 IPv6 开关开启并且当前网络环境支持 IPv6,则优先使用 IPv6 地址发起请求。否则优先使用 IPv4 地址。

Q:对移动调度中心服务访问失败的处理机制是什么?

A:若访问移动调度中心服务失败,表示无法拉取到 IP 列表,则发起 RPC 请求时仍需使用域名。

Q:用当前 App 缓存中的 IP 访问失败后的详细处理机制是什么?

A:使用 IP 发起 RPC 请求失败后,到下一次发起请求时,会切换到下一个 IP,如果发现 IP 列表已遍历完,则使用域名请求。

Q:是否存在决定客户端何时获取 IP 列表的 SDK?

A:RPC中提供了可以开启/关闭移动调度中心的开关,开关默认开启。如果关闭移动调度中心,则使用域名发起请求。

TTL+TTD 逻辑判断

Q:TTL+TTD 的逻辑判断流程是什么样的?

A:判断逻辑如下:

  1. 客户端获取到域名对应的 IP 信息后,判断 TTL 是否超时,若超时执行步骤 2,否则执行步骤5。

  2. TTL 超时,保留 IP 信息并异步请求新的 IP 信息,然后执行步骤 3。

  3. 判断 TTD 是否超时,若超时执行步骤 4,否则执行步骤 5。

  4. TTD 超时,弃用 IP 信息,返回空,流程结束。

  5. 返回 IP 信息列表,流程结束。

重要
  • TTL 超时,一定会发起请求更新 IP 信息,跟 TTD 是否超时无关。

  • TTL 超时,TTD 未必超时;TTD 超时,TTL 必然超时。

  • TTD 超时,返回空。如用户下次发起请求时,新的 IP 信息还未返回,仍然会返回空。