文档中心 API 中心 移动解析 HttpDNS 企业版/免费版API接入最佳实践

企业版/免费版API接入最佳实践

最近更新时间:2019-08-21 10:01:52

接入 HttpDNS 过程中,需要改造移动 App 的域名解析机制,新的流程参考如下:

HttpDNS最佳实践

改造过程中需要遵循以下两个设计策略:

1. Failed over 策略

虽然 HttpDNS 已经接入BGP Anycast,并实现了多地跨机房容灾。但为了保证在最坏的情况下客户端域名解析依然不受影响。建议采用以下的 fail over 策略:

  • 第一步先向 HttpDNS 发起域名查询请求。
  • 如果 HttpDNS 查询返回的结果不是一个 IP 地址(结果为空、结果非 IP、连接超时等),则通过本地 LocalDNS 进行域名解析。超时时间建议为5s。

2. 缓存策略

移动互联网用户的网络环境比较复杂,为了尽可能地减少由于域名解析导致的延迟,建议在本地进行缓存。缓存规则如下:

  • 缓存时间
    缓存时间建议设置为120s至600s,不可低于60s。
  • 缓存更新
    缓存更新应在以下两种情形下进行:
    用户网络状态发生变化时:
    移动互联网的用户的网络状态由3G切 Wi-Fi,Wi-Fi 切3G的情况下,其接入点的网络归属可能发生变化。所以用户的网络状态发生变化时,需要重新向 HttpDNS 发起域名解析请求,以获得用户当前网络归属下的最优指向。
    缓存过期时:
    当域名解析的结果缓存时间到期时,客户端应该向 HttpDNS 重新发起域名解析请求以获取最新的域名对应的 IP。为了减少用户在缓存过期后重新进行域名解析时的等待时间,建议在 75%TTL 时就开始进行域名解析。如本地缓存的 TTL 为600s,那么在第600 * 0.75 = 450s时刻,客户端就应该进行域名解析。

除了以上几点建议外,减少域名解析的次数也能有效的减少网络交互,提升用户访问体验。建议在业务允许的情况下,尽量减少域名的数量。如需区分不同的资源,建议通过 url 来进行区分。

3. 其他注意事项

改造 App 中的需要关注的 tips:

  1. 请尽量将不同功能用同样域名,资源区分通过 url 来实现,减少域名解析次数(用户体验好,容灾切换方便。多一个域名,即使域名已命中缓存,至少多100ms的访问延迟)。
  2. 设置的缓存 TTL 值不可太低(不可低于60s),防止频繁进行 HttpDNS 请求。
  3. 接入 HttpDNS 的业务需要保留用户本地 LocalDNS 作为容灾通道,当 HttpDNS 无法正常服务时(移动网络不稳定或HttpDNS服务出现问题),可以使用 LocalDNS 进行解析。
  4. Android 程序中可能出现404错误,但浏览器中正常。可能为权限问题或者其他问题。详细请参考 http://stackoverflow.com/questions/10835845/android-http-request-wierd-404-not-found-issue
  5. bytetohex&hextobyte,需自己实现接口,进行16进制字符串与字节的转换。
  6. HTTPS 问题,需在客户端 hook 客户端检查证书的domain域和扩展域看是否包含本次请求的 host 的过程,将 IP 直接替换成原来的域名,再执行证书验证。或者忽略证书认证,类似于 curl -k 参数。
  7. HttpDNS 请求建议超时时间2 - 5s左右。
  8. 在网络类型变化时,例如4G切换到 Wi-Fi,不同 Wi-Fi 间切换等,需要重新执行 HttpDNS 请求刷新本地缓存。