一、HTTPDNS介绍
传统DNS解析存在的问题在上一篇文章中已经解释,那有没有一种调度精准、成本低廉、配置方便的基于域名的流量调度系统呢?HTTPDNS就应运而生 。
与传统的 DNS 解析不同,HTTPDNS 是自己搭建基于 HTTP 协议的服务器,利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。
当客户端需要 DNS 解析的时候,不再向 local 发送 DNS 查询报文,而是直接通过请求直接访问 HTTPDNS 接口,此时DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP,能够精确定位客户端地理位置、运营商信息,而服务端则根据客户端的位置和所属运营商,返回就近的 IP 地址,从而有效改进调度精确性。
- 客户端直接访问HttpDNS接口,获取业务在域名配置管理系统上配置的访问延迟最优的IP。(基于容灾考虑,还是保留次选使用运营商LocalDNS解析域名的方式)
- 客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可
二、HTTPDNS原理
- 客户向HTTPDNS服务集群发起查询请求,携带用户域名和IP
- HTTPDNS服务集群查询 CDN 内部调度系统(若内部调度系统查询不到数据,目前返回为空,后续考虑在中心集群进行递归查询),将域名最佳访问节点 IP 以 HTTP 响应的方式传递给客户端
- 客户端,收到响应结果,向节点发起请求
- 若客户端向HttpDNS 集群请求失败,则启用备选,走正常 DNS 解析过程,向 Local DNS 发起请求
- LocalDNS 进行递归查询
- 最终返回 DNS 结果
- 客户端拿到最优 IP 后,建立连接,发起正常访问操作
三、HTTPDNS优势
-
降低延迟
缩短了查询链路,不像 DNS 查询那样需要访问多台 DNS 服务器才能得到最终的结果。
-
域名防劫持
使用HTTP(HTTPS)协议进行域名解析,域名解析请求直接发送至HTTPDNS服务器,绕过运营商Local DNS,避免域名劫持问题。
-
调度精准
由于运营商策略的多样性,其 Local DNS 的解析结果可能不是最近、最优的节点,HTTPDNS 能直接获取客户端 IP ,基于客户端 IP 获得最精准的解析结果,让客户端就近接入业务节点。
-
实时生效
域名解析结果变更时,HTTPDNS 服务没有传统DNS 服务多级缓存的影响,域名更新能够更快地覆盖到全量客户端。
-
扩展性强
HttpDNS提供可靠的域名解析服务,业务可将自有调度逻辑与HttpDNS返回结果结合,实现更精细化的流量调度。比如指定版本的客户端连接请求的IP地址,指定网络类型的用户连接指定的IP地址等。
-
实现成本低廉
接入HttpDNS的业务仅需要对客户端接入层做少量改造,无需用户手机进行root或越狱;而且由于Http协议请求构造非常简单,兼容各版本的移动操作系统更不成问题;另外HttpDNS的后端配置完全复用现有权威DNS配置,管理成本也非常低。总而言之,就是以最小的改造成本,解决了业务遭受域名解析异常的问题,并满足业务精确流量调度的需求。
四、HTTPDNS 调度设计
- 手机端可以获取位置信息,HTTPDNS可以根据位置信息,选择最佳节点返回
- 如果有多个节点,还会考虑错误率、请求时间、服务器压力、网络状况等,进行综合选择,而非仅仅考虑地理位置,要做到这一点,需要客户端使用 HTTPDNS 返回的 IP 访问业务应用。客户端的 SDK 会收集网络请求数据,如错误率、请求时间等网络请求质量数据,并发送到统计后台,进行分析、聚合,以此查看不同的 IP 的服务质量。
- 在服务端,应用可以通过调用 HTTPDNS 的管理接口,配置不同服务质量的优先级、权重。HTTPDNS 会根据这些策略综合地理位置和线路状况算出一个排序,优先访问当前那些优质的、时延低的 IP 地址。
- HTTPDNS 通过智能调度之后返回的结果,也会缓存在客户端。为了不让缓存使得调度失真,客户端可以根据不同的移动网络运营商 WIFI 的 SSID 来分维度缓存。不同的运营商或者 WIFI 解析出来的结果会不同。
公众号:编程之蝉 专注后台开发、CDN、算法、大数据,欢迎关注,阅读最新更新
参考
1、 计算机网络 | 图解 DNS & HTTPDNS 原理
2、[HTTPDNS原理](