DNS,作用就是将域名解析成IP。一个DNS查询,先从本地缓存查找,如果没有或者已经过期,就从DNS服务器查询,如果客户端没有主动设置DNS服务器,一般是从服务商DNS服务器上查找。这就出现了不可控。
一些小服务商以及小地方的服务商非常喜欢干这个事情。根据腾讯给出的数据,DNS劫持率7%,恶意劫持率2%。网速给的劫持率是10-15%。
智能DNS,就是为了调度用户访问策略,但是这些因素会导致智能DNS策略失效。
客户端请求一个接口,例如http://154.58.*.*/dns?domain=www.woniubi.cn&client=xiaomi&screen=1024*960&gps=137,35&…等一些参数。服务器根据参数,给出最优的ip或者IP列表。APP就通过IP访问,不使用域名。
返回IP列表,客户端可以依靠策略,进行负载均衡。
可以使用HTTP header进行方式进行缓存,参考这篇文章《http头部如何对缓存的控制》。也可以客户端自己设置过期时间,过期去服务端端拉取。
两种解决方式
HTTP DNS给的IP地址,发现不可用。
但是这样会造成下面一个问题。
部分服务器不可用的时候,结果压力都转到其他可用的服务器上面,导致最后所有的服务器都不可用。
浏览器都是通过域名访问,当然一些用户不可感知的服务,可以使用IP访问。
http://www.woniubi.cn/http_dns/
原文:http://www.cnblogs.com/softidea/p/5325189.html