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 地址。