打开慢半拍,DNS 最长

有个站首页要等一会儿才开始加载,我一直往服务器上找原因。后来看五段耗时才发现,DNS 这一段占了大头,TCP 和 TTFB 都很正常。

当时第一反应是「域名服务器太慢」,这个理解其实不准确。DNS 段量的不只是对方响应那一下。

DNS 段到底量了什么

从节点发出查询开始,到拿到可用的 A 或 AAAA 记录为止,中间可能经过:本地递归缓存没命中,去问根、问顶级域、问权威,逐级拿到委派,最后才拿到记录;某一步丢包,还要等超时重试。

这些环节加在一起,才是那一段的耗时。域名服务商只负责其中最后一环。

为什么有的节点特别长

节点第一次查,缓存是空的,要走完整链路;已经查过的节点,可能几毫秒就返回。

CNAME 链会放大这个问题。多一层 CNAME 就多一次查询,跨服务商时还要多走一段网络。

权威服务器如果离节点很远,或者只在一个地区有节点,跨地区的往返时间也会明显拉长。

用户为什么没感觉

用户端有浏览器缓存、系统缓存、路由器缓存,热门域名大多命中缓存,DNS 段接近零。

拨测节点更像一个「新用户」,冷启动去查,暴露的是最坏情况。这两者不矛盾,只是视角不同。

如果站点面向大量新用户,冷启动的 DNS 耗时就是真实体验的一部分,值得优化。反过来,如果用户基本都是回访,一个很长的 DNS 数字也未必对应真实感受。

怎么判断是不是真问题

用宝塔拨测的网站测速跑多地区多运营商节点,先看 DNS 段的分布。

只有个别地区长,偏那条链路上的递归服务器,或者到权威的可达性。普遍都长,更像权威配置或 CNAME 链的问题。

再看平均、最快、最慢。最慢节点和最快节点差得离谱,说明解析链路在不同地区差异很大。

连测三次能区分冷热:每次都长,是真慢;第一次长、后面短,就是缓存。

优化和复测

能动的其实不多:减少 CNAME 层数,权威服务器选多地域或 anycast,TTL 在「切换灵活」和「缓存命中」之间找平衡。

改完用同一批节点复测,看 DNS 段有没有整体下降。只换了 DNS 服务商、没换权威的,通常变化有限。

验证时把解析结果和耗时一起看。结果没变、只有耗时变了,说明动的是链路和缓存,不是记录本身。

该警惕的是:DNS 段持续偏长,同时解析结果在不同地区不一致。这可能不只是慢,而是记录被改或者调度出了问题,要按解析异常处理,别当成性能问题。