自建解析器时容易忽略的两个缓存问题
第一个是负缓存。查询不存在的域名,解析器会把 NXDOMAIN 缓存起来,时长取 SOA 里的 minimum。默认值常常很大,于是你修好了记录,客户端还在拿缓存的"不存在"。
第二个是 TTL 下限。有些解析器会把过小的 TTL 抬到某个下限值,本意是减少查询,副作用是变更传播变慢。做灰度发布时这一点很致命。
两个问题的共同点是:故障的持续时间不由你控制,而由缓存策略决定。所以变更之前先确认解析器的这两个参数,比事后怀疑网络有用得多。
实际做法是把 SOA minimum 设小(比如 60),把 TTL 下限关掉或者压到 30 秒。代价是查询量上升,收益是变更可控。