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

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

最近更新时间:2018-09-27 11:43:54

接入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),防止频繁进行HtppDNS请求。
  3. 接入HttpDNS的业务需要保留用户本地LocalDNS作为容灾通道,当HttpDNS无法正常服务时(移动网络不稳定或HttpDNS服务出现问题),可以使用LocalDNS进行解析,。
  4. 安卓程序中可能出现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切换到wifi,不同wifi间切换等,需要重新执行HttpDNS请求刷新本地缓存。

如果有其他疑问,您也可以在问答社区中寻求帮助。前往问答社区 >