httpdns改造

从App上线到现在,一直会有些问题困扰着我们。时不时会有用户反馈图片打不开,最后定位的原因有几个,一种是某地区的域名解析被运营商“劫持”了,另一种是用户的域名解析失败。作为一个图片为主要内容的APP,这样的状况我们肯定不是乐于见到的。为了解决这个问题,决定采用httpdns方案优化下。说httpdns之前,我们说下DNS。

DNS即是域名解析系统,目前客户端和服务器的交互普遍使用的是http协议,然后格式是json。http是应用层,到达传输层还需要一层地址转换,如何从域名获取到IP,就需要用到DNS了。

上图是网上摘抄的一个图片,大体说了下DNS的过程,可以看到整个过程还是很复杂的,因为复杂所以容易出错,上图有好几个地方容易错。比如:

  1. 本地DNS即是localdns如果被运营商给改了的话(劫持),那么客户的请求压根就不会到你的服务器
  2. 根服务故障,那么整个解析都会有问题
  3. 有的用户爱更改手机的网络设置又改不回来,出现问题也不知道为啥。

用DNS解析获取服务器IP的方式不能保证客户端与服务端通信的稳定性,所以需要一种客户端与服务端IP直通的方式,即是客户端不需要经过DNS过程就可以获取到服务端的IP地址,从而与服务器建立通讯,如此一来,通信的稳定性会大大提高,另外减少了域名解析的过程,整个通讯的耗时会相应的减少,从而提高用户访问体验。

HttpDNS就是类似采用这样的方式来获取IP。http://xxxxx/getIp?client_ip=xx.xx.xx.xx, 其中XXXX是VIP,这样该请求就不会被劫持,然后该请求的结果会返回一组IP,这一组IP是目前最适合该客户端的服务器IP。客户端获取到IP后,选择一个与服务器直连。

最后说下两者的效果

方式 延迟 成功率
localdns 137 98.3%
httpdns 116 99.5%

可以看到httpdns在成功率和延迟上都有更好的表现。