你这个 DNS 系统的核心定位是什么?
答:这是一个控制面的 DNS 平台,核心不是单纯的记录管理后台,而是“本地期望态管理 + 多 Provider 聚合 + 私有DNS + 注册中心 + 运维工具 + 防攻击 + 域名优化的平台”。
提供了:
- 智能DNS,geo+view+isp
- Provider 聚合:反向控制器
- 证书托管
- 域名资产管理
- 域名托底
- 高级功能:LB,状态,防封等
- 运维自动化
- 高级安全防护,解耦+ACL
为什么要自己做一层 DNS 控制面,而不是直接用 Cloudflare 控制台?
答:因为企业场景通常有多云、多账号、多环境隔离和统一审计需求。 直接用各家 Provider 控制台会带来几个问题:
- 入口分散,缺少统一权限和审计
- 多 Provider 切换成本高
- 无法做统一的记录模型和调度策略
- 无法做企业内部自动化,比如批量变更、回滚、任务化切换、漂移检测
他价值就是把这些统一起来。
你这个 DNS 系统和普通 DNS 管理后台最大的区别是什么?
答:普通管理后台更多是 CRUD 记录,而这个系统是一个完整的 DNS 控制面。除了 Zone 和 Record 管理,还包括多 Provider 聚合、任务调度、HTTPDNS、证书管理、智能 DNS、防封防污染、私有 DNS、服务注册发现等能力。 也就是说,它不是“改记录的页面”,而是“统一的 DNS 治理平台”。
为什么要做多 Provider 聚合,而不是绑定单一厂商?
答:多 Provider 聚合主要解决三类问题:
- 降低单厂商依赖风险
- 支持迁移和容灾切换
- 统一控制多云 DNS 配置
很多企业线上域名分散在 Cloudflare、Route53、Namecheap、阿里云、DNSPod 等不同平台。Hermes 把这些平台抽象成统一 Provider 层,让业务只关心 Hermes 的标准 Record 模型,而不是各厂商的控制台差异。
你们怎么保证 Hermes 和云 Provider 的一致性?
答:本地数据库是 source of truth。Provider 只是实际承载解析的远端系统。所以用户所有变更先写 Hermes,再通过异步 Job 把远端 Provider 收敛到 Hermes 当前状态,而不是反过来以 Provider 控制台为准。
答:Hermes 本地数据库是 source of truth,Provider 是远端实际状态。
一致性不是靠“某次写成功”,而是靠“持续 reconcile”:
- 本地变更触发同步任务
- 周期性做 drift detect
- 比较 Hermes 期望态和 Provider 实际态
- 自动修复或告警
这个思路借鉴了 Kubernetes controller,但不会照搬 reflector/watch。
HTTPDNS 在这个系统里的价值是什么?
答:HTTPDNS 主要是为了解决本地运营商 DNS 劫持、污染和解析不可控的问题。
传统域名解析依赖系统 DNS,而 HTTPDNS 由客户端直接请求 Hermes 的 HTTP 接口获取解析结果,可以做到:
- 绕过本地 DNS 污染
- 配合客户端 SDK 做优选
- 提供更可控的返回策略
- 支持业务侧灰度和线路调度
所以 HTTPDNS 更像是“应用层可编程解析服务”。
你们的 HTTPDNS 和普通 DNS 查询相比,有什么优势和代价?
答:优势是:
- 不依赖本地系统 DNS
- 更容易做鉴权、限流、日志分析
- 能结合地域、设备、业务标签做动态返回
- 更适合 App、移动端和 SDK 集成
代价是:
- 客户端要接 SDK 或改解析逻辑
- 不如标准 DNS 通用
- 需要额外考虑接口性能和缓存策略
所以 HTTPDNS 适合对可控性要求高的业务场景,不是完全替代标准 DNS。
智能 DNS 在你们系统里怎么实现?
答:智能 DNS 的核心是“同一个域名,根据不同请求属性返回不同解析结果”。
常见维度包括:
- 地域
- 运营商
- 网络延迟
- 健康状态
- 环境标签
- 业务优先级
实现上通常会结合:
View做逻辑隔离- GeoIP 做地域识别
- 健康检查做故障摘除
- 权重或优选策略做流量分配
所以它不是简单的 A 记录管理,而是一个调度决策层。
你们为什么设计了 View?它解决什么问题?
答:View 主要解决“同一域名在不同请求上下文下返回不同结果”的问题。
比如:
- 内网和外网解析不同
- 测试环境和生产环境隔离
- 不同业务线看到不同结果
- 安全场景下对某些来源直接返回特殊记录
它本质上是 DNS 决策前的流量分流层。
私有 DNS 这个功能的核心场景是什么?
答:私有 DNS 更偏企业内部基础设施。主要场景有:
- 内网服务发现
- 办公网、IDC、专线环境域名解析
- 内外网同域不同解析
- 混合云/多机房统一命名服务
它和公有 DNS 最大的差异在于,私有 DNS 更强调内网拓扑、服务生命周期、环境隔离和低延迟访问。
私有 DNS 和公有 DNS 在架构设计上有什么不同?
答:公有 DNS 更关注全球可达性、抗污染、线路调度和外部解析质量;
私有 DNS 更关注:
- 企业内部命名规范
- 服务注册发现
- 与 K8s/Nacos 等系统联动
- 内网隔离和权限控制
- 多机房拓扑一致性
所以私有 DNS 往往会和服务发现系统结合得更紧。
证书管理为什么要放进 DNS 平台?
答:因为很多证书自动化场景和 DNS 强相关,尤其是 DNS-01 Challenge。
把证书管理放进 DNS 平台有几个优势:
- 域名资产和证书资产统一管理
- 自动申请、续期和 TXT 验证闭环
- 支持通配符证书
- 证书过期和域名过期可统一告警
对企业来说,这样能把域名治理和 HTTPS 治理放在同一控制面里。
证书自动续期最大的难点是什么?
答:最大的难点不是调用 ACME 接口,而是“分布式环境下的协调和可靠性”。
比如:
- 多节点不能重复申请同一证书
- 续期失败要重试和告警
- DNS-01 TXT 验证要保证生效
- 通配符证书和多 SAN 证书管理更复杂
- 续期后证书分发要可追踪
所以这类场景很适合结合 Job 调度和状态机做。
你们提到防封、防污染,这块主要解决什么问题?
答:主要解决域名在复杂网络环境下的可用性问题。常见风险包括:
- 运营商 DNS 劫持
- 污染返回错误 IP
- 域名被针对性封锁
- 线路访问质量下降
- 某些地区或运营商被拦截
Hermes 的设计里,这块不是单点功能,而是组合能力:HTTPDNS、多上游对比、DoH/DoQ、结果验证、污染 IP 过滤、域名轮换、优选线路等一起发挥作用。
防污染和防封在技术上有什么区别?
答:两者相关,但重点不同。
- 防污染更偏“解析结果被篡改或干扰” 例如错误 IP、假应答、运营商劫持
- 防封更偏“域名或入口被识别和阻断” 例如某些域名被屏蔽、某些入口 IP 被封
所以防污染侧重解析质量校验和可信上游,防封侧重入口漂移、域名轮换、CDN 隐藏、证书自动化等能力。
你们怎么做健康检查和自动切换?
答:核心思路是把“解析配置”和“后端可用性”联动起来。
一般流程是:
- 后台周期性做 HTTP/TCP/自定义健康探测
- 如果某个目标不可用,更新其健康状态
- 智能 DNS 在返回记录时跳过不健康节点
- 必要时通过同步任务把某些记录切换到备用目标
这样 DNS 就不只是返回静态 IP,而是参与流量治理。
为什么说 DNS 平台也需要任务调度系统?
答:因为很多 DNS 相关能力本质上都是后台异步任务:
- Provider 同步
- Drift 检测
- Provider 切换
- WHOIS 刷新
- 证书续期
- 健康检查
- 清理和补偿任务
如果没有统一调度系统,这些能力会散落在业务代码里,难以统一重试、审计和可视化。
你们如何做域名资产管理?
答:域名资产管理不仅是保存域名列表,还包括:
- 域名注册商信息
- 创建时间、过期时间
- WHOIS 状态
- NameServer 信息
- DNSSEC 状态
- 是否开启监控
- 是否需要续费告警
这部分对企业很重要,因为很多故障不是解析配置错,而是域名过期、NS 被改、注册信息异常。
在性能上最关注的是什么?
- 控制面性能 关注后台写入、任务调度、批量同步、查询管理接口响应
- 数据面性能 关注 DNS 查询 QPS、缓存命中率、延迟和故障隔离
设计里强调内存缓存和查询隔离,是因为面对恶意扫描和高频查询时,不能让数据库被轻易打穿。
面对恶意子域扫描,你们怎么避免数据库被打穿?
答:这类问题不能只靠数据库优化,关键是前置缓存和故障隔离。
设计上会采用:
- L1 内存缓存
- 未命中异常检测
- 恶意来源识别
- 白名单/沙箱策略
- 只对正常流量回源
核心思想是:未知恶意请求不能无限透传到底层存储。
如果面试官问,这个项目最有技术含量的点是什么,你会怎么回答?
答:我会说这个项目最有价值的,不是单一功能,而是把多个基础能力整合成统一 DNS 控制面。
难点在于:
- 用本地模型统一抽象多 Provider
- 通过异步 Job 保证最终一致性
- 用 HTTPDNS、智能 DNS 和防污染提升解析可控性
- 用证书、域名资产、私有 DNS、服务发现把平台能力从“解析管理”扩展到“企业名字服务治理”
它本质上是一个面向企业基础设施的 DNS 平台,不只是后台 CRUD。
为什么不直接选择 Route53、Cloudflare 这类成熟平台,而要做你这个系统?
答:因为 Route53、Cloudflare 这类平台本质上是“单厂商 DNS 服务”,而 Hermes 解决的是“企业级统一 DNS 治理”的问题,两者定位不一样。
如果直接用单一平台,会有几个明显限制:
厂商绑定强 业务会被某一家 Provider 的能力、计费、区域覆盖和产品策略绑住,迁移成本高。
多云统一治理差 很多企业现实里不是只有 Route53,往往同时有 Cloudflare、Namecheap、阿里云、DNSPod、私有 DNS。单一平台没法统一管理这些资产。
企业内网场景支持不完整 Route53 这类更偏公有云 DNS 服务,不会替你统一处理企业里的私有 DNS、内外网同域、服务注册发现、混合云命名体系。
缺少统一控制面 企业通常需要统一权限、审计、审批、资产管理、证书联动、WHOIS 监控、漂移检测、Provider 切换,这些能力如果全压在单一云厂商上,灵活性不够。
防封、防污染、HTTPDNS、智能调度策略未必贴合业务
公有平台提供的是通用能力,但企业业务常常要更强的可编排性,比如按业务标签、内外网、地区、健康状态、风控策略做动态调度。
所以 Hermes 的价值不是“比 Route53 更会做权威 DNS 解析”,而是:
- 把多个 DNS 平台统一抽象成一个控制面
- 让 Hermes 成为企业自己的 source of truth
- 支持多 Provider 容灾、迁移和切换
- 把公有 DNS、私有 DNS、HTTPDNS、证书、资产、安全、服务发现放到同一个治理体系里
一句话总结就是:
Route53 是一个优秀的 DNS Provider,而 Hermes 是一个面向企业的 DNS 治理平台。我们不是替代某一家 Provider 的底层解析能力,而是统一管理和编排这些能力。
如果面试官继续追问,你还可以补一句:
“如果公司业务规模小、单云、没有内网 DNS 和多 Provider 治理需求,那直接用 Route53 很合理;但一旦进入多云、多环境、多团队协作和基础设施治理阶段,就会需要 Hermes 这种控制面。”