Lobsters | 📄 原文链接 | 2026-10-18 收录

为调试而开发:让 DNS 传播链自己说清哪里断了

来源:davepacheco.net — 2025-06-09

📋 概述

Oxide 的控制平面跑着两套 DNS:面向客户的外部 DNS 与只在内部网络做服务发现的内部分 DNS,用的是同一套栈的两个部署。DNS 数据的唯一事实来源是控制平面数据库(CockroachDB),核心组件 Nexus 在服务增删时先改库,再由一系列后台任务把新配置推给所有在役 DNS 服务器。整条链路是异步的,正常工作几秒内完成。作者由此提出「为调试而开发」的问题:客户报某个名字查不到记录时,到底是库里就错了、Nexus 没发现变更、DNS 服务器列表不对、传播任务卡住,还是服务器在按错误的配置应答?要分辨这些,工具必须能回答:库里是什么、配置包含哪些名字、上次谁在什么时候因为什么改的、每个 Nexus 实例上一次传播何时开始、跑没跑完、推的是哪个版本的配置、推给了哪几台服务器,以及每台服务器现在在按哪个版本工作。实现方式是先把 DNS 传播建立在「后台任务」这一抽象上(可被事件激活、也周期触发,可返回任意 JSON 状态),于是 omdb(Omicron 调试器)不需要懂 DNS 也能生成有用的状态报告。

🔑 核心要点

💡 金句

软件能告诉你它哪里出问题时很好;能让你确信它正在正常工作时,更好。
← 返回 Lobsters 首页