2. Databricks架构与故障点分析

要设计一套真正可落地的Databricks灾备方案,第一步不是选工具,而是把Databricks的架构拆开看清楚:哪些组件跑在谁的账号里、哪些数据落在哪个区域、哪些依赖一旦中断就会让整个工作负载停摆。Databricks最核心的架构特征是控制平面(Control Plane)与数据平面(Data Plane)分离,这一设计直接决定了故障域边界和恢复策略的取舍。

控制平面与数据平面:职责与故障域

控制平面由Databricks托管,运行在Databricks自己的云账号中,主要承载:Web UI与REST API、作业调度器(Jobs Scheduler)、集群管理器、笔记本与工作区元数据(Workspace、Notebook、Repo)、Unity Catalog的元数据服务、身份认证与SCIM同步、以及集群启动的编排逻辑。数据平面则运行在客户自己的云账号(经典部署模式)中,承载:计算资源(All-Purpose集群、Job集群、SQL Warehouse的VM/容器)、DBFS根存储(S3/ADLS/GCS桶)、集群日志与Spark事件日志、以及实际读写业务数据的存储路径。

这种分离带来两个关键结论。第一,数据平面故障不会导致数据丢失,因为业务数据始终在客户账号的存储中,控制平面只是“指挥者”。第二,控制平面故障会导致无法启动新集群、无法提交新作业、无法访问UI,但已经在运行的集群和作业通常可以继续执行——这是灾备设计中非常重要的“降级运行”窗口。

关键判断:控制平面中断时,正在运行的Job集群不会立即停止,但一旦集群因自动伸缩、Spot回收或作业结束而终止,就无法通过控制平面重新拉起。因此控制平面RTO直接决定了“能撑多久”。

区域与可用区拓扑

Databricks工作区(Workspace)是区域级(Regional)资源,创建时必须选定一个云区域(如eastus2、westeurope)。控制平面在该区域内以多可用区方式部署,具备AZ级容错;数据平面中的集群节点分布在客户指定的可用区中,DBFS根存储使用区域级对象存储(如S3、ADLS Gen2),本身具备跨AZ冗余。

需要特别注意的是:Databricks工作区不跨区域。这意味着区域级故障(整个eastus2不可用)无法通过“同工作区切换AZ”来恢复,必须依赖另一个区域的工作区。这是灾备方案中“区域对”设计的根本原因。典型做法是选择同一地理区域内的配对区域(如eastus2 ↔ centralus,或westeurope ↔ northeurope),以降低跨区域复制延迟并满足数据驻留合规要求。

Databricks 控制平面 / 数据平面分离与区域拓扑 控制平面(Databricks 账号) Web UI / REST API Jobs 调度器 集群管理器 Unity Catalog 元数据 身份认证 / SCIM 工作区元数据 数据平面(客户云账号) All-Purpose 集群 Job 集群 SQL Warehouse DBFS 根存储 Spark 事件日志 业务数据存储 编排 / 下发 区域边界(Region Boundary)— 工作区不跨区域 可用区 A 集群节点 / Driver Executor 可用区 B 集群节点 / Executor 对象存储冗余 可用区 C 集群节点 / Executor 对象存储冗余 ! 控制平面为区域级 SPOF

关键组件依赖链与单点故障识别

把架构拆开后,可以沿着“用户请求 → 控制平面 → 数据平面 → 存储”这条链路逐段识别单点故障。以下依赖关系是灾备设计中必须逐一确认的:

  • 控制平面区域级单点:工作区绑定单一区域,该区域控制平面不可用时,无法启动集群、提交作业、访问UI。这是最高优先级的SPOF。
  • 云存储账户:DBFS根存储和业务数据存储若使用单一存储账户且未开启跨区域复制(CRR/GZRS),区域故障将导致数据不可访问。需确认存储账户的冗余类型(LRS/ZRS/GRS/GZRS)。
  • 元数据存储:Unity Catalog的元数据由控制平面托管,若未配置跨区域元数据同步或外部Hive Metastore,灾备区域需要重建Catalog结构。
  • 身份与网络:SCIM同步源(如Entra ID)、Private Link/Private Endpoint、防火墙规则、DNS解析,这些在灾备区域都需要预先配置,否则即使工作区恢复也无法连通。
  • 作业与集群配置:Job定义、集群策略、库依赖、Init脚本,若未通过Terraform/Asset Bundles等IaC方式管理,灾备切换时需要手工重建,RTO会显著拉长。
常见误区:认为“数据在S3/ADLS里就安全了”。实际上,如果控制平面不可用,即使数据完好,也无法通过Databricks启动计算来读取它。数据平面的可用性 ≠ 服务的可用性。

故障影响矩阵与恢复优先级

基于上述依赖链,可以建立一张故障影响矩阵,用于指导恢复顺序和演练重点。下表为示例性分析框架,具体RTO/RPO需结合业务SLA确定:

故障对象 影响范围 数据是否丢失 恢复手段 优先级
控制平面(区域级) 无法启停集群、提交作业、访问UI 否 切换至灾备区域工作区 P0
单一可用区 部分Executor丢失,作业重试 否 集群自动重调度,无需人工 P3
DBFS根存储(LRS) 集群无法读写临时数据、日志 可能 切换至GRS/GZRS副本或灾备存储 P1
Unity Catalog元数据 表/权限不可解析,作业失败 否(需重建) 从IaC或备份恢复Catalog定义 P1
SCIM / 身份源 新用户无法登录,权限同步中断 否 启用灾备区域身份集成 P2

灾备设计中的关键确认项

在实际项目中,建议在方案设计阶段完成以下确认,避免灾备切换时才发现缺口:

  1. 确认当前工作区所在区域及其配对灾备区域,检查两区域是否支持所需的VM SKU和存储类型。
  2. 确认DBFS根存储和业务数据存储的冗余级别,若为LRS,评估升级为ZRS/GRS的成本与影响。
  3. 确认Unity Catalog元数据的备份方式:是否使用databricks unity-catalog导出、是否有外部Hive Metastore、是否通过Terraform管理。
  4. 确认作业与集群配置是否已IaC化(Databricks Asset Bundles / Terraform Provider),灾备区域能否一键部署。
  5. 确认网络连通性:Private Link、DNS、防火墙规则在灾备区域是否已预置。
  6. 确认身份集成:灾备区域工作区是否已配置相同的SCIM源和权限映射。

完成以上分析后,你就得到了一张清晰的“故障地图”:哪些是区域级SPOF、哪些是AZ级可自愈、哪些需要人工介入。这张地图是后续设计RTO/RPO目标、选择复制策略和编排切换流程的直接输入。下一阶段的工作,就是围绕这些故障点逐一设计恢复路径和验证方法。