DNS 如何调度流量
2026-05-26
DNS 是一位伟大的幕后工作者。
虽然每天都有几十亿人在网上冲浪,但绝大多数人都不知道,这个庞大、触手可达、包罗万象的虚拟世界,构建在他们所看不见的 DNS 之上。
说个题外话。
我上一份工作在百度,印象里出过几次 P0 事故,都是关于 DNS。
DNS 不稳,大厦瞬间崩塌,不是一句空话。
除了保证稳定性,DNS 还顺带优化网络上的流量调度。
或者说,聪明的流量调度,本身就是支撑稳定性的重要部分。
1. 背景
DNS (Domain Name System) 的功能纯粹:
将域名解析成 IP 地址。
域名给人看,IP 地址给机器读。
DNS 是连接人和机器交互的桥梁。
不要小瞧这样一个间接层,看起来简单,实际可做的事情非常多。
最重要的,就是决定流量走向。
几乎所有互联网公司、CDN 厂商、游戏/视频平台,都会用 DNS 做一件事:流量调度(Traffic Steering),即:
决定用户应该被分配到哪台服务器、哪个机房、哪个国家。
DNS 像极了一位指挥官。
2. 原理
DNS 凭什么可以做到这些?
一次正常的请求,流程如下:
用户浏览器 ↓查询 www.example.com ↓DNS 返回 IP ↓浏览器访问对应服务器关键藏在第三步:DNS 决定哪个 IP 被返回。
IP 对应着服务器,对应着机房,也对应着国家。
因此,DNS 在解析域名的过程中,轻松实现流量调度。
解析这一步,至关重要,因为它可以帮助解决至少三个问题:
- 负载均衡
- 降低延迟
- 故障切换(Failover)
2.1 负载均衡
假设服务:
www.example.com有 10 台服务器。
DNS 可以让:
- 一部分用户访问机器 1
- 一部分用户访问机器 2
- …
不会因为访问过多,把单台机器压垮。
2.2 降低延迟
DNS 可以实现就近访问。
如果你在苏州看《乘风破浪的姐姐》,DNS 会让上海的机房提供服务,而不是乌鲁木齐。
这样地理距离更近,网络传输速度更快,视频更流畅。
2.3 故障切换
当某个 IP 不可用时,DNS 检测到,解析时将其摘除,只返回可用的 IP 列表。
即使服务部分受损,也不会影响用户的真实体验。
3. 实现
DNS 的调度方式有很多种:
- 轮询(Round Robin)
- 地理位置调度(GeoDNS)
- 动态健康检查调度
3.1 轮询
轮询是最简单的一种。
事先在 DNS 记录中为同一个域名配置多个 IP 地址,当解析的请求到来,轮流返回不同IP。比如有三条记录:
A --> B --> C --> A --> B基于此,更复杂一点,由于不同 IP 可以提供的服务能力大小不同,可以通过设置权重(Weight)来增加流量倾斜。
优点是简单,缺点是性能一般。
3.2 地理位置调度
此种调度,是现代互联网基础设施,像 CDN、云厂商全局负载 GSLB (Global Server Load Balancing) 核心调度方式之一。
权威 DNS 服务器获取到发起请求的 Local DNS 服务器的 IP 地址后,查询 IP 地址库,获取到用户的大致位置和运营商,返回距离该 LDNS 最近的 IP。
但是如果用户手动修改了 Local DNS 的 IP 地址,例如使用 Google 的 8.8.8.8,位置查询就会失效。
需要基于 EDNS Client Subnet (ECS),请求时附带客户端真实 IP 子网段信息,这样权威 DNS 就能拿到准确的用户位置。
尽管智能化程度提升不少,但距离最近的,未必最合适。
3.3 动态健康检查调度
以上两种,均基于静态 IP 列表。
如果 DNS 可以周期地检查 IP 服务健康度(Health Check),可以是 ICMP Ping、TCP 端口检测、HTTP 状态码检查,对于异常 IP,立刻从列表中移除,恢复正常后再添加回来。
缺点是会增加实现的复杂度。
4. 总结
DNS 看上去是一个简单的服务,将域名解析为 IP 地址。
却被玩出了花样。
可正是这些一个又一个细小,但坚实的优化,支撑着你在任意空间,自由地刷着短视频,流畅地看电影。
从简单开始,渐进优化,终有所成。
(完)
参考
- 本文作者:Plantree
- 本文链接:https://plantree.me/blog/2026/dns-schedule/
- 版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于: 2026-05-26T06:02:20+08:00