用 DNS 轮询做负载均衡,问题在哪
把同一个域名解析到多个 IP,看起来是最简单的负载均衡。实际用起来问题不少。
一,缓存让流量分配不可控。递归解析器按 TTL 缓存,不同地区、不同运营商的过期时间不一样,实际比例可能长期是 8:2 而不是 5:5。
二,故障摘除慢。一台机器挂了,要等所有缓存过期才停止解析到它,期间一部分用户持续失败。
三,无法感知负载。DNS 不知道哪台机器忙,轮询是盲目的。
它适合的场景其实很窄:多机房做粗粒度分流、或者给静态资源做就近接入。真正的负载均衡还是要在应用层或四层做,DNS 只负责把用户带到入口。
如果一定要用,把 TTL 设短(60 秒),并且配合健康检查的 DNS 服务商。