Skip to main content

18 HttpDNS

传统 DNS 的问题

域名缓存问题

不是每一个请求都会去访问权威 DNS 服务器,而是访问过一次就把结果缓存到自己本地,当再次访问的时候直接就返回这个缓存数据。

域名转发问题

返回地址不是最近的

出口 NAT 问题

做了网络地址的转换,权威的 DNS 服务器,就没办法通过这个地址,来判断客户到底是来自哪个运营商。

域名更新问题

修改权威 DNS,将域名指向新的 IP 地址有延迟。

解析延迟问题

DNS 的查询过程需要递归遍历多个 DNS 服务器,才能获得最终的解析结果,这会带来一定的时延,甚至会解析超时。

HttpDNS 的工作模式

不走传统的 DNS 解析,而是自己搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商。当客户端需要 DNS 解析的时候,直接通过 HTTP 协议进行请求这个服务器集群,得到就近的地址。

curl http://106.2.xxx.xxx/d?dn=c.m.163.com
{"dns":[{"host":"c.m.163.com","ips":["223.252.199.12"],"ttl":300,"http2":0}],"client":{"ip":"106.2.81.50","line":269692944}}

HttpDNS 的缓存设计

分为客户端、缓存、数据源三层

  • 对于应用架构来讲,就是应用、缓存、数据库。常见的是 Tomcat、Redis、MySQL。
  • 对于 HttpDNS 来讲,就是手机客户端、DNS 缓存、HttpDNS 服务器。

HttpDNS 的调度设计

客户端,可以知道手机的位置,HttpDNS 服务端可以根据这些信息,选择最佳的服务节点访问。

服务端,应用可以通过调用 HttpDNS 的管理接口,配置不同服务质量的优先级、权重。HttpDNS 会根据这些策略综合地理位置和线路状况算出一个排序,优先访问当前那些优质的、时延低的 IP 地址。