1. 灾备与业务连续性导论

在讨论 Databricks 灾备之前,需要先建立一个基本认识:灾备不是“把数据复制一份”这么简单,它要回答的是——当故障发生时,业务能容忍中断多久、能容忍丢多少数据、哪些业务必须优先恢复。这三个问题分别对应 RTO、RPO 和业务影响分析(BIA)。本节先把这些概念在 Databricks 语境下讲清楚,再给出故障域模型和灾备等级划分,为后续章节的具体方案设计打基础。

一、RTO 与 RPO:两个必须量化的时间指标

RTO(Recovery Time Objective,恢复时间目标)指从故障发生到业务恢复可接受服务水平所允许的最长停机时间。它衡量的是“多久能恢复”。RPO(Recovery Point Objective,恢复点目标)指故障发生时允许丢失的数据时间窗口,即最近一次可用恢复点与故障时刻之间的最大可接受差距。它衡量的是“能丢多少数据”。

在 Databricks 平台上,这两个指标不是抽象概念,而是直接映射到具体组件的能力上。例如:

  • RPO 通常由数据层的复制方式决定。Delta Lake 表如果使用云存储跨区域复制(如 S3 CRR、ADLS GRS),RPO 取决于复制延迟,常见在分钟级;如果使用 Delta Sharing 或定期快照导出,RPO 可能达到小时级。
  • RTO 则取决于计算层和元数据层的恢复速度。集群启动、作业重新调度、Unity Catalog 元数据恢复、外部表位置重建,都会叠加进 RTO。

一个常见的误区是把 RPO 和 RTO 混为一谈。举例来说,某团队每天凌晨 2 点把 Delta 表快照导出到灾备区域,那么 RPO 约为 24 小时;但如果灾备区域已有集群模板和作业定义,故障后 30 分钟内就能拉起计算并挂载数据,RTO 可以做到 30 分钟。两者独立,必须分别设定和验证。

RTO 和 RPO 必须由业务方确认,而不是由平台团队单方面决定。业务方说“不能丢数据”时,要追问“是零丢失,还是可以接受 5 分钟窗口”,因为零丢失通常意味着同步复制,成本和写入延迟都会显著上升。

二、Databricks 故障域模型

要设计灾备,先要识别故障域。故障域是指一个故障事件所能影响的最大范围。Databricks 的架构天然分层,故障域也按层划分:

  • 计算层故障域:单个集群、单个作业、单个 SQL Warehouse 失效。影响范围限于该计算资源,数据通常不受影响,重启或重建即可恢复。
  • 控制平面故障域:Databricks 控制平面(Web 控制台、作业调度、Unity Catalog 元数据服务)在某个区域不可用。此时已有集群可能继续运行,但无法提交新作业、无法访问元数据。
  • 数据平面故障域:云存储桶、VNet/子网、Private Link 端点故障。影响数据读写和网络连通性。
  • 区域级故障域:整个云区域不可用。这是最严重的故障域,需要跨区域灾备。
  • 逻辑故障域:误删表、错误覆盖写入、恶意操作。这类故障不依赖物理区域,但同样需要恢复能力,通常靠 Delta 时间旅行或版本恢复应对。

理解故障域的意义在于:不同故障域需要不同的恢复策略。计算层故障靠重试和重建;区域级故障才需要跨区域灾备。如果对所有故障都按区域级灾备设计,成本会严重浪费。

Databricks 故障域与灾备等级映射 计算层故障域 集群 / 作业 / Warehouse 失效 控制平面故障域 调度 / 元数据 / 控制台不可用 数据平面故障域 存储桶 / VNet / Private Link 区域级故障域 整个云区域不可用 逻辑故障域 误删 / 错误覆盖 / 恶意操作 等级 0:无灾备 仅依赖平台自身可用性,RTO/RPO 不可控 等级 1:备份恢复 定期快照 / 导出,RPO 小时级,RTO 小时级 等级 2:温备(Pilot Light) 数据持续复制,计算按需拉起,RTO 分钟级 等级 3:热备(Warm Standby) 灾备区常驻小规模计算,RTO 秒级到分钟级 等级 4:多活(Active-Active) 双区同时服务,RTO≈0,RPO≈0,成本最高

三、灾备等级划分与选择依据

灾备等级不是越高越好,而是要与业务影响分析结果匹配。上图中给出了从等级 0 到等级 4 的五档划分,每档对应不同的 RTO/RPO 能力和成本量级。

等级 0 适用于内部实验、临时分析等可容忍长时间中断的场景。等级 1 是最常见的起点:每天或每小时把关键 Delta 表导出到灾备区域的对象存储,同时用 Databricks Asset Bundles 或 Terraform 保存作业和集群定义。恢复时需要手动或脚本化重建。等级 2 在等级 1 基础上增加持续数据复制,灾备区保留最小计算资源,故障时快速扩容。等级 3 在灾备区常驻小规模集群,数据近实时同步,可承接部分读流量。等级 4 则是双区同时写入,需要解决冲突合并、全局一致性等问题,通常只在极少数核心交易类场景使用。

选择等级时,建议用下面的判断逻辑:先看业务中断一小时的损失金额,再看数据丢失一小时的影响。如果损失可忽略,等级 0 或 1 即可;如果损失显著但可容忍短暂中断,等级 2;如果中断几乎不可接受,才考虑等级 3 或 4。

四、业务影响分析(BIA)在 Databricks 上的落地

业务影响分析的目标是给每个业务系统或数据产品标注 RTO、RPO 和恢复优先级。在 Databricks 上,BIA 的落地对象不是抽象的“系统”,而是具体的作业、表、Dashboard 和 SQL Warehouse。建议按以下步骤执行:

  1. 盘点关键数据产品:列出所有对外提供价值的作业、表、报表和 API。例如“每日销售汇总表”“实时风控特征表”“财务对账作业”。
  2. 标注业务影响:对每个对象,记录中断 1 小时、4 小时、24 小时的业务损失等级(高/中/低),以及数据丢失 5 分钟、1 小时、24 小时的影响。
  3. 推导 RTO/RPO:根据影响等级反推可接受指标。例如“高影响 + 可容忍 15 分钟中断”对应 RTO≤15min,“高影响 + 可容忍 5 分钟数据丢失”对应 RPO≤5min。
  4. 映射到灾备等级:把 RTO/RPO 与上图的等级能力对照,选出最低满足要求的等级,避免过度设计。
  5. 记录依赖关系:标注该对象依赖的上游表、Unity Catalog 元数据、外部系统。恢复顺序必须按依赖拓扑排列,否则会出现“表恢复了但上游没恢复”的情况。
BIA 不是一次性文档。业务重要性会随季度变化,新作业上线、旧报表下线都会改变恢复优先级。建议每季度复核一次,并在重大业务变更后立即更新。

五、一个简化的 BIA 示例表

下面给出一个示例表格,展示如何把业务对象、影响等级和灾备等级对应起来。表中数据为教学示例,实际项目需根据业务方确认填写。

业务对象 类型 中断1h影响 数据丢失5min影响 RTO目标 RPO目标 建议灾备等级
实时风控特征表 Delta 表 + 流作业 高 高 ≤5 分钟 ≤1 分钟 等级 3 或 4
每日销售汇总 调度作业 + 表 中 低 ≤2 小时 ≤24 小时 等级 1
财务对账报表 SQL Warehouse + Dashboard 高 中 ≤30 分钟 ≤1 小时 等级 2
内部实验分析 Notebook + 临时表 低 低 ≤24 小时 ≤24 小时 等级 0 或 1

这张表的价值在于把“业务语言”翻译成“平台指标”。后续章节中设计跨区域复制、作业容灾、Unity Catalog 元数据备份时,都会回到这张表来判断某个方案是否满足目标。没有 BIA 的灾备设计,很容易变成“为了做而做”,既浪费成本又无法在真正故障时支撑业务决策。

最后强调一点:RTO 和 RPO 是目标,不是承诺。实际恢复时间(RTA)和实际恢复点(RPA)需要通过演练来测量。只有经过定期演练验证的灾备方案,才具备真正的业务连续性价值。