乐趣区

高性能网站建设指南规则9减少DNS查找

减少 DNS 查找

DNS 将主机名映射到 IP 地址上,在 DNS 查找的响应时间依赖于 DNS 解析器(通常由你的 ISP 提供),它所承担的请求压力、你与它之前的距离和你的带宽速度。

DNS 缓存和 TTL

DNS 查找可以被缓存起来以提高性能。这种缓存可以发生在由你的 ISP 或者局域网中的一台特殊的缓存服务器上,但我们这里要探索的是发生在独立用户的计算机上的 DNS 缓存。
例如,在用户请求了一个主机名之后,DNS 信息会留在操作系统的 DNS 缓存中,之后对于该主机名的请求将无需进行过多的 DNS 查找,至少短时间内不需要。

很多浏览器拥有其自己的缓存,和操作系统的缓存相分离。只要浏览器在其缓存中保留了 DNS 记录,它就不会麻烦操作系统来请求这个记录。只有当浏览器缓存丢失了记录时,它才会向操作系统询问地址——然后操作系统或者通过其缓存来响应这个请求,或者将请求发送给一台远程服务器,这时就会发生潜在的速度降低。

设计者知道 IP 地址会变化以及缓存会消耗内存。因此,应该周期性地清除缓存中的 DNS 记录,并通过大量不同的配置设置检测清除的频率有多高。

影响 DNS 缓存的因素

服务器可以表明记录可以被缓存多久。查找返回的 DNS 记录包含了一个存活时间(Time-to-live,TTL)值。该值告诉客户端可以对该记录缓存多久。

尽管操作系统缓存会考虑 TTL 值,但浏览器通常忽略该值,并设置它自己的时间限制。此外 Keep-Alive 特性可以同时覆盖 TTL 和浏览器的时间限制。只要浏览器和 web 服务器通信着,并保持 TCP 连接打开的状态,就没有理由进行 DNS 查找。

浏览器对缓存的 DNS 记录的数量也有限制,而不管缓存记录的时间,访问较多的域名,较早的 DNS 记录将被丢弃。不过操作系统可能依然保留着该记录,这能扭转一下局面。

TTL 值

不同网站的 TTL 值差距很大,许多网站都在努力做到当服务器、虚拟 IP 地址(VIP)或联合定位掉线时提供快速故障转移。这也是提供较多 TTL 的原因。MySpace 定位到一个联合定位工具,对于其当前的网络拓扑,故障转移并不是很重要,因此他们选择了较长的 TTL。

客户端收到的 DNS 记录的平均 TTL 值只有最大 TTL 值的一半。这是因为 DNS 解析器自身也拥有与 DNS 记录相关的 TTL。当浏览器进行 DNS 查找时,DNS 解析器返回的时间是其记录的 TTL 的剩余时间。如果最大 TTL 是 5 分钟,DNS 解析器返回的 TTL 范围可能是 1~300 秒。

浏览器视角

Microsoft Windows 上的 DNS 缓存由 DNS Client 服务进行管理。你可以使用 ipconfig 命令来查看和刷新 DNS Client 服务。

ipconfig /displaydns
ipconfig /flushdns

重新启动也可以清空 DNS Client 服务缓存。重新启动浏览器会清空浏览器缓存,但不会清空 DNS Client 服务缓存。

IE

IE 的 DNS 缓存由三个注册表设置控制

部分设置的默认值值如下:
DnsCacheTimeout——30 分钟
KeepAliveTimeout–1 分钟
ServerInfoTimeout–2 分钟

如果 DNS 服务器 TTL 值小于 30 分钟的话,对浏览器进行 DNS 查找的频率产生的影响很小。一旦浏览器缓存了 DNS 记录,就会使用 30 分钟作为 TTL 值。如果发生了错误,刷新 DNS 查找就会比这要快,在正常情况下,很短的 TTL 值(30min 以下)在 IE 中不会增加 DNS 查找的数量。

Keep-Alive, 一个持久的 TCP 连接将会一直使用,直到其空闲 1 分钟为止。由于连接是持久的,因此无需 DNS 查找。

ServerInfoTimeout 的值为 2 分钟,说明尽管没有 Keep-Alive,如果一个主机名每两分钟重用了一次,并且没有发生错误,也无需尽心 DNS 查找。

当网络操作中心尝试通过 DNS 变化来转移流量时,如果一个 IP 上的流量已经被转移走,但该 IP 仍在运行,则使用旧的 DNS 记录的 IE 用户至少需要 30 分钟才能更新 DNS。至少每两分钟访问一次的活跃用户会一直使用旧的 IP,直到发生错误。

Firefox

具有下列配置设置

1.network.dnsCacheExpiration- 1 分钟
2.network.dnsCacheEntries-20
3.network.http.keep-alive.timeout- 5 分钟

减少 DNS 查找

当客户端的 DNS 缓存为空 (浏览器和操作系统都是) 时,DNS 查找的数量与 web 页面中唯一主机名的数量相等。减少唯一主机名的数量就可以减少 DNS 查找的数量。

减少唯一主机名的数量会潜在地减少页面中并行下载的数量。

我的建议是将组件分别放到至少 2 个,但不要超过 4 个主机名下。

另外,确保服务器支持 Keep-Alive 还能减少 DNS 查找。

退出移动版