DNS:是网络请求的第一步,默认我们使用运营商的LocalDNS服务,解析慢(有数据统计,在这一块 3G 网络下,耗时在 200~300ms,4G 网络下也需要 100ms)
还有更严重的问题:DNS劫持、DNS调度不准确(缓存,转发,NAT)导致性能退化等。
想优化,最简单成熟的方案就是使用HTTPDNS
浏览器访问
1 浏览器自己的缓存------2 计算机系统Host文件缓存 --------- 3 路由器缓存 -------- 4 ISP(服务商)DSN缓存 ------ 5根域名服务器 ----- 6 顶级域名服务器 ----- 7主域名服务器---------
下级 -------- 保存结果到缓存
前三步均是客户端DNS缓存。
问题:
1、域名缓存问题
本地做一个缓存,直接返回缓存数据。可能会导致全局负载均衡失败,因为上次进行的缓存,不一定是这次离客户最近的地方,可能会绕远路
2、域名转发
如果是A运营商将解析的请求转发给B运营商,B去权威DNS服务器查询的话,权威服务器会认为你是B运营商的,就返回了B运营商的网站地址,结果每次都会夸运营商。
3、出口NAT问题
做了网络地址转化后,权威的DNS服务器,没法通过地址来判断客户到底是哪个运营商,极有可能误判运营商,导致跨运营商访问。
4、域名更新问题
本地DNS服务器是由不同地区,不同运营商独立部署的,对域名解析缓存的处理上,有区别,有的会偷懒忽略解析结果TTL的时间限制,导致服务器没有更新新的ip而是指向旧的ip。
5、解析延迟
DNS的查询过程需要递归遍历多个DNS服务器,才能获得最终结果。可能会带来一定的延时。
HTTPDNS:
基于http协议的DNS服务集群,直接通过http协议进行请求这个服务器集群,获取就近地址。
不走传统的DSN解析,从而绕过了运营商的LocalDNS服务器,有效的防止域名劫持,提高域名解析效率
腾讯的产品在接入 HTTPDNS 后,用户平均延迟下降超过 10%,访问失败率下降超过五分之一。而百度 App 的 Feed 业务,Android 劫持率由 0.25% 降低到 0.05%。
- 传统的DNS有解析慢,更新不及时,转发跨运营商,nat跨运营商等问题,影响了流量的调度。
- HTTPDNS通过客户端sdk和服务端,直接解析dns,绕过了传统dns缺点,实现智能调度。
https://www.aliyun.com/product/httpdns?spm=a2c4g.11186623.5.1.51807016bsWdsZ