服务已经恢复,为什么客户端还在报“域名不存在”?

简介: 新服务上线时DNS记录延迟创建,导致客户端缓存“域名不存在”(NXDOMAIN)负响应。即使权威DNS已更新,多层缓存仍会延续故障数分钟。本文详解负缓存机制、真实恢复延迟及可控发布与验证方法。

新服务上线时,DNS记录晚了45秒创建。运维补齐记录后,浏览器很快能打开;一批后台客户端却继续报“域名不存在”,直到几分钟后才自行恢复。

服务端已经健康,权威DNS也已经返回正确地址。客户端仍失败,是因为此前查询到的“不存在”也可能被缓存。这个结果叫负响应;它有自己的缓存生命周期,不会因为服务刚恢复就自动收到通知。

本文使用教学内部服务。约束是:上线过程允许记录短暂缺失;客户端经过本机、容器、节点与递归解析器多层缓存;关键调用恢复目标为2分钟;不能靠无限重试放大DNS流量;故障切换要区分“域名不存在”和“暂时解析失败”。

“刷新网页好了”不能证明所有客户端都好了

浏览器、操作系统、语言运行时、连接池和企业递归解析器可能各有缓存。某个浏览器重新解析成功,只说明它走到的缓存路径已经更新。

长连接客户端甚至不再解析域名;另一些客户端每次请求都询问本地缓存。于是同一个时间点,部分实例正常、部分实例继续失败,并不矛盾。

01.png

负缓存为什么会延长故障

在0秒时,解析器得到“名称不存在”并缓存;45秒时,权威侧已经有记录;但只要负缓存仍有效,解析器就可能直接返回旧的不存在结果,不再向权威侧查询。到缓存到期后,下一次查询才看到新记录。

具体缓存时长与DNS响应、权威区配置、递归解析器和客户端实现有关。测试不能假设所有负响应都固定缓存同一个秒数,也不能把所有解析错误都当成NXDOMAIN。

下面用可控时钟模拟最核心的行为:

class ResolverCache:
    def __init__(self):
        self.entries = {
   }

    def remember_negative(self, name, now, ttl):
        self.entries[name] = (None, now + ttl)

    def lookup(self, name, now, authoritative):
        cached = self.entries.get(name)
        if cached and now < cached[1]:
            return cached[0], "NEGATIVE_CACHE"
        value = authoritative(name, now)
        if value is not None:
            self.entries[name] = (value, now + 30)
        return value, "AUTHORITATIVE_QUERY"


def authority(_name, now):
    return None if now < 45 else "10.0.0.8"


cache = ResolverCache()
cache.remember_negative("new.service", now=0, ttl=120)
assert cache.lookup("new.service", 46, authority) == (None, "NEGATIVE_CACHE")
assert cache.lookup("new.service", 121, authority) == ("10.0.0.8", "AUTHORITATIVE_QUERY")

这不是DNS协议栈实现,只是把“权威侧已恢复”和“缓存侧仍持有旧结论”分开。生产验证应使用真实解析链、抓包或查询日志确认每一层事实。

修复先从发布顺序开始

最便宜的防线,是先创建并验证名称,再启动依赖它的客户端或切流。删除旧记录也要考虑已有连接与缓存,不要把DNS当成瞬时配置总线。

客户端遇到名称不存在时,应遵守有限重试、抖动和总截止时间;但重试如果始终命中同一有效负缓存,只会增加本地调用次数。更不能收到NXDOMAIN后永久缓存,除非产品明确接受直到重启都不恢复。

02.png

故障演练怎样做才真实

先在隔离域名制造短暂不存在,再补齐记录。分别从新启动进程、持续运行进程、不同节点和不同递归解析器查询,记录首次失败、权威恢复和各客户端首次成功的时间。

至少断言:

  • 权威侧恢复不等于全链路恢复;
  • 负缓存到期后能重新查询,而非永久失败;
  • NXDOMAIN与超时、SERVFAIL等错误被分别观测;
  • 重试有上限和抖动;
  • 发布流程在切流前验证名称存在;
  • 恢复时间满足业务目标,否则需要调整发布顺序或缓存策略。

监控不要只看服务健康探针。增加解析失败按错误码、客户端版本、节点和递归解析器分组的指标,才能看见“只有某一批实例没恢复”。

服务恢复是权威侧事实,用户恢复是整条解析链事实。DNS故障测试必须把负缓存的生命周期算进恢复时间。

相关文章
|
2月前
|
人工智能 小程序 前端开发
又一个 AI 新项目完结,用 DeepSeek 搞了个微信小程序!
手把手带你用 AI 编程做出一个能上线传播、能变现的微信小程序产品!最新 AI Agent 应用开发 + Vibe Coding 项目,秋招简历亮点拉满~
326 0
|
人工智能 安全 Apache
QwenPaw:你的私人 AI 助理 —— 数据归你、记忆进化、多端触达的开源个人智能体
QwenPaw 是一款开源、本地优先的AI个人智能体(Apache 2.0),数据归属用户、记忆自主进化、支持钉钉/飞书/微信等多端触达。3行命令即可部署,内置Coding IDE、Persona人格、定时任务、MCP工具生态与多Agent协作,真正属于你的私有AI助理。
QwenPaw:你的私人 AI 助理 —— 数据归你、记忆进化、多端触达的开源个人智能体
|
24天前
|
自然语言处理 安全 测试技术
别再只测『答得对不对』:给大模型应用建一套 Prompt 注入红队回归集,把越权/泄密挡在上线前
本文揭示RAG客服应用因缺乏Prompt注入防护而致系统提示词泄露的事故,指出问题根源在于测试只关注“答得对”,却忽视“会不会答不该答的”。提出将注入测试升级为可回归的红队用例集:结构化存于jsonl,覆盖四类注入;用pytest参数化断言输出、工具调用与拒答行为;接入CI自动拦截。安全不是模型天赋,而是靠可执行、可演进的断言守出来的。
别再只测『答得对不对』:给大模型应用建一套 Prompt 注入红队回归集,把越权/泄密挡在上线前
|
3月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
5318 163
|
24天前
|
人工智能 缓存 数据库
常青翻新|Mock 不是万能替身:Dummy/Stub/Spy/Mock/Fake 五种 Test Double 的边界与踩坑
本文厘清测试替身的五大分类(Dummy/Stub/Spy/Mock/Fake),指出滥用“万能Mock”导致测试脆弱或假绿的根源:混淆“提供数据”与“验证交互”。强调选型核心原则——**先明确断言对象(数据?交互?真实行为?),再决定替身类型**,并结合AI场景(如Agent轨迹验证、假模型替代)赋予经典模式新生命力。
|
14天前
|
人工智能 缓存 运维
全量跑不动、人肉挑不完:代码量涨8倍之后,测试选择策略该先改哪一步
本文剖析Anthropic因AI编码爆发导致CI测试分析系统(TIA)崩溃的真实案例:Claude贡献80%合并代码,CI任务半年激增25倍,传统“单写有状态”TIA架构率先崩塌。文章详述三次线性补丁失效过程,揭示指数增长下容量规划的底层陷阱,并给出轻量级、可落地的“journal式”重构方案——状态持久化、写入无状态、读取归并视图,助力中型团队低成本构建弹性CI测试选择能力。
|
21天前
|
人工智能 安全 开发者
Jev 发布不到一周,为什么它这么快进入 Agent 工程?
Jev 是专为 Agent 设计的轻量级决策模型,不生成文本,专注快速输出 Choice/Score/Boolean。它被 Vercel AI Gateway、LangChain 等迅速集成,用于路由、流程控制、安全守卫和评估等高频判断场景,显著降本增效,推动 Agent 架构向“分层智能”演进。
Jev 发布不到一周,为什么它这么快进入 Agent 工程?
|
21天前
|
人工智能 数据挖掘 开发工具
RAG 不一定需要大模型重排:Jev 能不能做 Context Filtering?
RAG中检索易召回冗余内容,Jev作为决策层可精准筛选高相关Chunk,替代简单Top-K输入。它支持多维度判断(如版本、时效性),提升Context质量与LLM答案准确性,降低幻觉与Token成本。(239字)
RAG 不一定需要大模型重排:Jev 能不能做 Context Filtering?
|
21天前
|
人工智能 测试技术 开发工具
Google 开源 ARTEMIS:AI Agent 如何接管 Android 真机测试?
Google开源AI测试框架ARTEMIS,支持自然语言驱动Android真机自动化:理解任务、识别界面、跨App操作、自动截图/日志采集并生成报告。原生集成MCP,可接入Antigravity等AI IDE,实现“描述目标→自主执行→分析结果”闭环。(239字)
Google 开源 ARTEMIS:AI Agent 如何接管 Android 真机测试?