看到了以前dnspod的同事发布了一个httpdns的服务,突然记起了来,奶罩最一开始的设想,就是要在手机app里面集成一个httpdns的服务,在当时想法还是很时尚的。 随着腾讯大量的使用httpdns后,紧接着dnspod也发布了类似的产品了。
原文地址是 xiaorui.cc ,能不能别被爬了。。。。
[ruifengyun@devops ~ ]curl http://119.29.29.29/d\?dn\=xiaorui.cc 106.186.21.252% [ruifengyun@devops ~ ] [ruifengyun@devops ~ ]curl http://114.114.114.114/d\?dn\=www.google.com\&ip\=1.2.3.4\&ttl\=y\&type\=a 74.125.235.240,30;74.125.235.242,30;74.125.235.243,30;74.125.235.244,30;74.125.235.241,30% [ruifengyun@devops ~ ]
部分内容转自: http://www.arey.cn/article/show/19
一些大点的互联网公司如果想提高旗下产品的用户体验,也就是全局调度,但受限于运营商和第三方递归服务提供商,只能通过自身的递归监测系统和商务能力去改变。
对于互联网公司不满意运营商和第三方递归服务提供商,其原因主要有两点
1、 大部分递归服务器不支持智能解析(谷歌扩展协议),其实现在支持edns的递归,没几家…. 国外的都支持,国内的貌似就阿里和114支持dns扩展协议
2、运营商ISP其DNS服务的处理能力比较差,网络时延和服务质量都不能令互联网公司满意
3、一些小区宽带往往没有自建递归节点,而是将DNS请求转发到第三方服务提供商;
4、即使有第三方服务提供商能够提供智能解析、满足时延要求,例如8.8.8.8,但是运营商可能会封杀该服务器或者进行DNS劫持。
那么咱们再来说说 httpdns的整个流程:
HttpDNS的原理非常简单,主要有两步:
A、客户端直接访问HttpDNS的接口,获取你在配置系统中,现在最优质的IP,返回给用户。
B、客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可。
获取到了IP地址,因为web端配置了虚拟主机,所以在header的HOST域里加入域名 curl -H "host: www.xiaorui.cc" -v 106.186.21.252
咱们的标题是如何搞一个dns服务,是基于http协议的。 也看了dnspod的api接口,貌似没什么太多的附带参数, 可以加一个ttl的值。
周六周天用tornado和redis做一个简单的httpdns,对于请求应该是支持get和post的,get应对与普通的访问,post是应对那种批量的查询,支持json body的请求体。
对于返回什么ip,肯定是经过你自己的调度运算,或者是类dns view。除此之外还可以在header里面加一个max-age当做超时的ttl,通知用户是否命中http dns cache等等
关于上面所说的python实现httpdns的代码还没写 , 那么我这边就httpdns提前先总结下:
httpdns其实不算是dns,单纯的看字眼,好家伙…. 是http协议的dns,大家看了上面的介绍,以及朋友圈里面关于腾讯httpdns的使用,会发现httpdns是个调度系统… 某种意义上来说,只能dns也是调度系统。 记得在乐视的时候,用户的访问节点就是靠一部分的httpdns来控制的,通过这个接口不仅能传递edns-client-subnet的数据,而且可以各个区域的cdn热度及全局负载情况进行下一步的调度。
然后呢,就没有然后了?
哈哈