第 3 篇:高可用、备份与容灾的真实成本

云数据库产品页特别喜欢把高可用、自动备份、跨区容灾这些词放在一起,给人的感觉像是:你把几个开关一勾,数据库就稳了。这种理解在采购阶段很省事,在生产环境里很危险。

因为高可用、备份、容灾,听起来像一套能力,实际上解决的是三类完全不同的问题。

高可用解决的是实例故障

高可用要解决的,主要是实例级故障。比如节点挂了、宿主机故障、磁盘坏了、某个可用区里的实例失效。这时候你的目标不是“什么都没发生”,而是“尽快恢复成一个还能提供服务的主实例”。

典型手段包括主备架构、多可用区部署、自动故障切换。它的价值很明确,就是把单点故障变成短时抖动。

但高可用不保证下面这些事:

  • 业务请求在切换期间完全无感
  • 长事务、连接池、重试逻辑不会出问题
  • 误删数据可以恢复
  • 区域级故障一定能被覆盖

这里一定要把边界认清。数据库自动切换成功,不等于业务已经恢复。因为业务层还要面对:

  • 连接被踢掉后能不能自动重连
  • 中间件缓存的连接信息会不会过期
  • 事务执行到一半被切断后如何处理
  • 读写分离组件会不会路由错
  • 应用的超时和重试会不会把瞬时抖动放大成雪崩

所以高可用本质上是在缩短实例故障的影响时间,不是在承诺业务绝对无感。

备份解决的是数据可恢复

备份解决的是另一类问题:数据出错了,能不能找回来。

常见场景包括:

  • 误删表
  • 程序 Bug 把数据批量写坏
  • 运维误操作执行了错误更新
  • 某个版本上线后把业务数据污染了

这时候高可用一点用都没有,因为主备会把错误一起复制过去。能救你的,只有备份和时间点恢复。

但很多团队对备份的理解还停在“平台每天自动快照”。这远远不够。你至少要把这些问题答清楚:

  • 备份频率是多少
  • 最长保留多久
  • 是否支持时间点恢复
  • 恢复一套实例需要多久
  • 恢复出来的数据如何校验

尤其最后两个问题特别关键。因为真实事故里,你不是只要“有备份”,你要的是“在业务能接受的时间里,恢复出一套可信的数据”。

没有演练过的备份,严格来说不叫恢复能力,只能叫心理安慰。

容灾解决的是更大范围的失效

容灾要应对的,是比实例故障更大一级的问题。比如可用区级中断、区域网络异常、控制面故障,甚至是整片地域不可用。

一旦进入容灾讨论,两个指标必须出现:RPO 和 RTO。

  • RPO 是最多能接受丢失多少数据。
  • RTO 是最多能接受业务中断多久。

如果业务要求接近 0 的 RPO 和非常短的 RTO,那方案就会迅速变贵、变复杂。因为你很可能需要:

  • 跨可用区甚至跨地域复制
  • 更严格的同步或半同步策略
  • 独立的流量切换路径
  • DNS、网关、配置中心同步切换
  • 应用层具备多活或快速重连能力
  • 更完整的演练和回切流程

这些能力没有一项是免费的。它们要么牺牲延迟,要么牺牲复杂度,要么直接牺牲预算。

云上最常见的三个误区

误区一:有主备就等于容灾

主备一般覆盖的是实例级、部分可用区级风险,远远不到“区域级容灾”。更重要的是,数据库有主备,不代表你的缓存、消息队列、注册中心、配置中心、入口流量也跟着具备同等级能力。

误区二:自动备份就一定能恢复

如果恢复很慢、恢复流程没人走过、恢复后的数据不会校验,那备份在事故里很可能是摆设。真正的恢复能力至少包含:恢复动作、验证动作、上线动作。

误区三:跨区复制开了就高枕无忧

跨区复制带来的是更高的链路复杂度、网络成本和一致性挑战。没有清晰的切换判定、切换责任人和回切策略,系统不会更安全,只会更复杂。

怎样设计更现实的方案

对大多数业务来说,更现实的做法不是给所有数据库都上最高规格容灾,而是按业务重要性分层。

第一层,实例高可用。先解决单点故障和常见节点故障。

第二层,备份可恢复。确保误删、误更新、逻辑污染之后能按预期回到某个时间点。

第三层,关键业务容灾。只给真正关键的系统上跨可用区、跨地域甚至双活能力,而不是对所有系统一刀切。

比如内部报表库、离线分析库和支付主库,对 RPO/RTO 的要求显然就不该一样。把所有系统都按支付系统来建设,预算扛不住;都按报表系统来建设,事故扛不住。

你真正需要演练的不是功能,而是流程

很多团队在采购阶段喜欢问“支不支持自动切换”“支不支持时间点恢复”。这些问题当然要问,但它们只说明产品有功能,不说明你的组织有能力用它。

真正决定可靠性的,是流程有没有演练过。至少要演练下面这些动作:

  • 主实例故障切换后,应用恢复是否自动完成
  • 从备份恢复新实例需要多久
  • 恢复后的数据如何与业务侧对账
  • 跨区切换后,依赖服务是否同步切换
  • 回切时如何避免双写和脏数据

数据库稳定性里最容易被忽略的一句话是:可靠性不是配置项,是反复证明过的流程。

小结

高可用、备份、容灾相关,但不能混着讲。

  • 高可用解决实例故障。
  • 备份解决数据可恢复。
  • 容灾解决更大范围的系统失效。

云数据库确实把很多能力做成了现成服务,但这些服务是否能在事故里真正救你,取决于目标定义是否清楚、业务边界是否明确、演练是否到位。

下一篇我们聊一个同样容易被简单化处理的问题:性能治理。