本文由 Huifer 撰写,TanStack Ship 的独立开发者和维护者。 在 2026 年 3 月,一家 DNS 提供商因宕机导致 tanstackship.com 离线了 28 分钟。这不是 Cloudflare 的故障 —— 是我的域名注册商的 DNS 管理系统在常规维护期间发生了级联故障。如果以 5 美元的平均试用转化价值和流失的 480 个会话计算,这次宕机大约造成了 2,400 美元的价值损失。若我的 MRR 达到了 10 万美元,同样的 28 分钟宕机会造成 1,350 美元的损失。这份指南记录了我在突发事件之后构建的成果,以及将恢复时间保持在 15 分钟以内的 DNS 故障转移架构。
验证来源:Cloudflare DNS documentation · AWS Route 53 health checks · SLA math 最后更新:2026-09-18 · Changelog
太长不看 (TL;DR): 单一提供商提供的 DNS 就是单点故障。采用多提供商 DNS 配合健康检查和自动故障转移,可以将 RTO 控制在 15 分钟以内。具体架构为:主节点使用 Cloudflare,备用节点使用 AWS Route 53,以 30 秒间隔执行健康检查,故障转移的 TTL 设为 60 秒。每月架构总成本:0.50 美元。
DNS 宕机的代价
计算公式十分简单:
| MRR | 30 分钟宕机成本 | 1 小时宕机成本 | 4 小时宕机成本 |
|---|---|---|---|
| $10K | $350 | $700 | $2,800 |
| $50K | $1,750 | $3,500 | $14,000 |
| $100K | $3,500 | $7,000 | $28,000 |
| $500K | $17,500 | $35,000 | $140,000 |
当 MRR(月经常性收入)为 10 万美元时,一次 4 小时的 DNS 宕机所损失的金额,甚至超过大多数 SaaS 自己的年度 DNS 预算。解决方案是配置具有自动故障转移功能的多提供商 DNS 环境,其成本仅为每月的 0.50 美元。
架构组成:双提供商、健康检查与自动故障转移
[User] → [Cloudflare DNS (Primary)] → [Primary IP]
↓ failover
[AWS Route 53 (Secondary)] → [Secondary IP]
↓ health checks
[Health check: GET /health → 200 in 3s]
核心配置如下:
- Cloudflare:主 DNS、请求代理、CDN 加速、DDoS 保护。
- AWS Route 53:备用 DNS、健康检查监控、自动故障转移。
- 健康检查 (Health checks):Route 53 固定每 30 秒探测一次
/health端点。 - 故障转移 TTL:60 秒 —— 在触发故障转移完成后的 1 分钟,旧 DNS 缓存即可过期。
第 1 步:配置健康端点
在主应用程序服务器端新建一个 /health 端点,其需在系统健康时返回 200,遭遇故障时必须返回非 200:
// src/routes/health.ts
export const Route = createFileRoute('/health')({
GET: async () => {
const dbHealthy = await checkDatabaseConnection()
const cacheHealthy = await checkCacheConnection()
if (dbHealthy && cacheHealthy) {
return new Response(JSON.stringify({ status: 'ok' }), {
status: 200,
headers: { 'Content-Type': 'application/json' },
})
}
return new Response(JSON.stringify({ status: 'degraded' }), {
status: 503,
headers: { 'Content-Type': 'application/json' },
})
},
})
健康端点必须检查实际关联的核心基础依赖项 —— 数据库、缓存存储机制以及外部 API 的连通状况。只设立一个机械返回 200 代码的健康检查是毫无价值的。
第 2 步:将 AWS Route 53 设为备用 DNS
Route 53 健康检查会主动监控健康端点,如果主系统中断,其会自动替补并全权接管更新系统 DNS 解析指向:
# 创建健康检查
aws route53 create-health-check --caller-reference $(date +%s) \
--health-check-config '{
"Type": "HTTPS",
"FullyQualifiedDomainName": "tanstackship.com",
"Port": 443,
"ResourcePath": "/health",
"RequestInterval": 10,
"FailureThreshold": 3
}'
RequestInterval: 10 指出 Route 53 会每隔 10 秒下发探测网络包。FailureThreshold: 3 则要求一旦发现连续 3 次超时出错即立刻触发交接任务。全套防线总转移时间为:30 秒响应耗时计算加上整个网络自身 DNS TTL 传播的时延消耗。
第 3 步:配置 DNS 当中的故障转移记录集
在 Route 53 面板列表中,创建双重路由记录体系供系统完成配置:
主记录 (Cloudflare 来源):
Name: tanstackship.com
Type: A
TTL: 60
Value: [Cloudflare origin IP]
Health check: [Route 53 health check]
Failover: Primary
备用记录 (直接来源):
Name: tanstackship.com
Type: A
TTL: 60
Value: [Direct origin IP]
Health check: None (always healthy — this is the fallback)
Failover: Secondary
一旦察觉到主节点端抛出了连续 3 次失败判定,Route 53 引擎就会停止响应原有的主记录,转为开始对外公开应答副记录。所有接到更换信息的全球 DNS 终端解析系统会在接下来的 60 秒 (TTL) 期间内部缓存接收到的新地址。
第 4 步:设定合适的 TTL
较低的 TTL 确意味着更快的故障转移操作,但也意味着必须承担更高负荷的额外连接与查询成本:
| 记录类型 | 生产 TTL | 故障转移 TTL |
|---|---|---|
| A/AAAA 记录 | 60 秒 | 60 秒 |
| MX 记录 | 3600 秒 | 不执行故障转移 |
| NS 记录 | 172800 秒 | 不进行改动 |
对 A 记录制定 60 秒级别的限制表示:在 60-90 秒的时间期限内,这套救援系统能够完整经历完整个防灾恢复流程(起初 30 秒进行健康检测判定,加上强制网络端解析分发所需的 60 秒等待更新期)。以此平衡而言,这正是多数现代 SaaS 系统能够实现高效能兼优选成本匹配的一项合理设定准则。
第 5 步:开展故障转移全面压力测试
如果不曾拉到线上执行测试检验过系统运转能力,绝不要轻易将其视为保命符。测试检验要点:
- 降级错误回应:致使该健康接口强制返回 503 HTTP 状态码且维持 5 分钟,查看 Route 53 是否收到并且认定了上游危机信号传递。
- 拦截全部主端链路 IP:利用防火墙截断目标主端端口对外连接达 1 分钟左右的流转长度,校验外侧 DNS 是否及时跟随转换至目标变动节点。
- 彻底切断脱离连接状态:实施人为阻断且使源节点发生极端掉电、彻底宕机现象,检验其有没有确实启动自动接手应急调转指令运转以稳定保持响应能力。
各个季度应固定保持常态化规律的执行一次。若未能通过你确实验证走通流程,那么此防御体制它仅只能算是文书纸面上的规划而非实质应急的靠谱方案而已。
事件响应的详细序列工作流
如果真正发生了压力导致主路节点意外脱网并引发导致自动让命给备用 Route 53 正式当家接替之后:
第 0–2 分钟:触发激活告警线系统通知 一旦健康检查监测累积了 3 次通信断开报警后,PagerDuty 或 OpsGenie 服务能够第一时间触发通知机制。当班首控开发必须立刻跟进确认情况。
第 2–5 分钟:去核准排查真实原因并确实辨别判断故障事实 通过判断是否存在为假阳性的探测系统乌龙错报事件:第一时间使用连接排查监测系统端口,对源服务端直接测听网络响应回馈现象,登陆前往对应的 Cloudflare 看板,了解监控展示板当前展示下整体运营的显示网络现状事实排查异常;还需独立判断发往下游链路的 DNS 通道线路信息有没有中断传丢的情况。
第 5–10 分钟:做全量评估算测并确定评判 RTO 希望极限期待定限 判定出在被卡死强制限制规定的最高不可宽限 15 分钟时间内原本主机主导节点可否顺利再次重头启动并回复完全生命体征复生拯救回来的生还机率预期指望。要是评估把握较高,则应极力动用所有资源挽回源主机的完全修整。如若判定绝不可挽救了,马上审查核对是否已借由自动化机制转接上线全权通过备份后手替补替换代持备件防御 Route 53 是否能成功完美承接运转流程处理一切跟进工作并且时刻全满把控盯紧走势实时状态情况发展。
10 分钟及以上:全面开启落实铺展公开外部透明公告宣布讯息传达流程通道机制 遵守保证每一次的硬限单位定时且必须不可跳过在限定的 15 分钟单位时限间隔内定时去推挂提交上传展示出一份能够展示当时情形及处置动态的新动向情况信息告示版。如若在很不幸的情况下此次造成打断断流事件持续造成的发散事件最终破坏程度以及总超时超出超过且跨越并突破了 30 分钟这必须严守不能退让的死线之后,就需立马利用私人或者专项通达传递措施专列发送单独讯息向遭无妄牵乱打扰而引致出现断联后果受殃及波冲终端用户采取安抚性安居交流以及发放说明歉语之邮件的直达传递动作操作安护进行。
TTL 传播带来的固有缺陷问题
受客观物理自然规律局限牵扯的一项最大致命阻力点依然在于最硬性的限制界限是出于基础 TTL 自带时间传播延迟下传。就算配置执行压极至最低时效只留短短 60 秒宽泛要求之超快方案里,个别特定的外流部分第三方分支末端的游离 DNS 某些结点部分仍不遵守要求也极会有自行超前截留缓存时间且远远超过要求底限的强制规则现象存生。依据平时表现情形通常可以获得大致保障绝大部分即 95% 人群可确保都能于此最顺段开篇初首阶段第一层最长 90 秒接管里接新节点;与之相形另剩极其稀有些极微部分不足仅剩余之余只有区约只有不过残存 5% 会极不巧地必须强去生熬扛去长至硬核可耗满直多达到熬拖出有 4 小时的错向残旧解析无对位失联落伍期。
要如你需要真把维护把关定在一个不可发生丝毫哪怕产生极其细微落空丢脱也视为极致无以伦比不可触不可妥绝严厉程度地最顶流关键顶级高金贵流量控制上的水位的阶段里的话,针对最后那全向解答之极优一绝推荐对策终途则为全移引入选启使用了直接依靠纯属于通过利用上直接是包含内置绑定检测模块功能一式全面自带自带了排错监检自身拥有排控机组配置大端自身拥载配置全面带有云检代理并负重承压分散均挂疏流分散方案的 Cloudflare 节点智能自配的自带健康自测的其分派调度均引平衡大功能体系端产品上了——它是无痕并可将断截全盘一切截取全部中拦仅仅完全做到只是截做直接就在代理这个本身这一介层流代行接替处理交手换行跳转替换顶管切换并且可实现这就将全部那让人糟厌恶无可把控毫无应对根法之最令人反感前所述说过的那些诸如什么延出迟交传输时延丢脱长效等有关中间环节全部统合全数消弭全屏扫清完全不触不留抹除之;但这方案也自然它同时要求你不可不将必须面临必须掏且最低下限从买入手先选最高订阅其定立的高昂月缴须付出起底就有一月要得交 $20 美金那那这一门档收费级的有这个那此最必须高级要其最那也就是那其订月最低那个得购须那这是必定那就是那个那那就是它 Cloudflare Pro+ 高这这高级等级版本了并且更甚还要面对将当前配置系统从头对口重建的全线大工程改造任务了。
每月 0.50 美元的成本
AWS Route 53 健康检查:每个健康检查每月 0.50 美元(AWS 免费套餐包含前 50 个)。对于单个 SaaS 应用,一个健康检查系统 = 每月 0.50 美元总计花费。
Cloudflare 提供免费的 DNS 托管。主 DNS 无任何费用。
相关阅读: Dns Disaster Recovery Saas · Saas Data Backup Disaster Recovery · Multilingual Seo Saas Strategy
生产环节首发检查清单
- 健康端点返回正确状态 —— 必须检查所有的系统底层依赖服务
- 已配置 Route 53 健康检查 —— 10 秒监控间隔,并且设定容错限定 3 次失败阈值
- 已创建备用 DNS 记录 —— 应确实必须直接指向真实可用之直接 IP
- TTL 设置为 60 秒 —— 涵盖所有的那些关键高优先级 A 记录类型
- 每季度测验一回测试大演故障防灾转移复演 —— 绝不能单纯妄去妄信不切实推演过的未经大考实验过的救命抗障体系
- 具有记录在案的已落编事故处理应急流程指南文件 —— 并顺下包含:收发初源接起报警查定探实 → 预检事质并验证验伤损毁测情境状底数并作实定伤评定评估核对作排方案 → 推挂示通面示发布对公众交待表态公布通报宣告传报情况公示通联
- 完成并设立出系统的专属于状况公告动态栏实时大网页展示 —— 可随时跟于大灾抢修转档期间支持进行跟从提供配套跟进发送刷新实时推布发布支持实控消息版动态同步宣告并推入动态展示发声
TanStack Ship 部署在支持跨多区域容灾冗余设定的 Cloudflare Workers 端云上。 更多信息可参阅翻视对应那所包含着的详细的公开配套指引 部署文档 和那一套完备的全面列收了有关各项功能大汇罗列单内载全集在编系统上的系统应用组件名类合汇的展示总陈的 完整功能列表。