2. Databricks计费维度解析

理解 Databricks 的成本,第一步不是看账单总额,而是把账单拆成可解释的计费维度。Databricks 的账单通常由几类彼此独立、又相互叠加的费用构成:DBU 费用、云虚拟机费用、存储费用、网络费用,以及 Serverless 场景下被合并计价的资源费用。只有先分清“谁在计费、按什么单位计费、由谁承担”,后续的成本归因、优化和预算控制才有落点。

一、DBU:Databricks 自身的计价单位

DBU(Databricks Unit)是 Databricks 平台侧的计费单位,代表对计算资源的标准化消耗。它并不等同于虚拟机核数或内存,而是一个按“SKU + 计算类型 + 运行时长”计价的抽象单位。账单中常见的字段包括:usage_unit=DBU、sku_name(如 STANDARD_ALL_PURPOSE_COMPUTE、PREMIUM_JOBS_COMPUTE、SERVERLESS_SQL_COMPUTE)、usage_quantity(消耗的 DBU 数量)以及 rate(每 DBU 单价)。

关键点是:DBU 单价随 SKU 和云厂商不同而变化。例如同一区域下,All-Purpose 计算通常比 Jobs 计算单价更高,Serverless SQL 又有独立费率。因此,即使两个作业消耗的虚拟机时长相同,只要 SKU 不同,DBU 费用就可能相差数倍。

二、虚拟机费用:云侧的真实算力成本

经典集群(Classic Cluster)模式下,Databricks 运行在客户云账号的虚拟机上,虚拟机费用由云厂商直接向客户收取,不包含在 DBU 费用中。这部分费用取决于实例类型、数量、运行时长和计费方式(按需、Spot、预留实例)。

因此,一个经典集群作业的总成本可近似表示为:

总成本 ≈ DBU费用 + 虚拟机费用 + 存储费用 + 网络费用
DBU费用 = Σ(usage_quantity × rate)
虚拟机费用 = Σ(实例单价 × 实例数 × 运行小时数)

这意味着,优化经典集群成本时,既要关注 DBU 消耗,也要关注虚拟机是否被浪费。例如集群空转、自动伸缩不及时、实例规格过大,都会同时推高两项费用。

三、存储与网络:容易被忽略的隐性成本

存储费用主要来自 DBFS、云对象存储(如 S3、ADLS、GCS)以及 Delta 表数据。它按存储容量、请求次数和 API 调用计费。频繁的小文件写入、未清理的旧版本数据、过度的 OPTIMIZE/VACUUM 操作,都会增加存储和请求成本。

网络费用则发生在跨区域、跨可用区、跨云服务的数据传输中。例如集群节点与存储不在同一区域、Shuffle 数据跨节点传输、外部系统频繁拉取结果,都会产生网络费用。在 Serverless 模式下,这部分费用通常被合并进 Serverless 单价,不再单独列出,但成本依然存在。

四、Serverless 与经典集群的计费差异

Serverless 计算的最大变化是:DBU 费用与底层虚拟机、部分存储和网络费用被合并为一个 Serverless 单价。用户不再直接管理虚拟机,也不需要为闲置资源单独付费,计费粒度更细,通常按秒或按实际使用量计费。

经典集群则相反:DBU 和虚拟机费用分离,用户对实例类型、数量、运行时长有完全控制权,成本透明度更高,但也更容易因配置不当产生浪费。两者的核心差异可以概括为:

  • 经典集群:DBU + 虚拟机 + 存储 + 网络,分项计费,控制粒度细,适合稳定、可预测、需要精细调优的负载。
  • Serverless:合并计价,按使用量付费,免运维,适合突发、短时、交互式或难以预估的负载。

五、用一张图看清计费维度与流向

下面的 SVG 展示了经典集群与 Serverless 两种模式下,DBU、虚拟机、存储、网络四类费用如何产生、由谁承担,以及最终如何汇总到账单。图中同时标出了“客户云账号”与“Databricks 平台”两个计费主体,便于理解费用归属。

Databricks 计费维度与费用归属 经典集群(Classic Cluster) DBU 费用 Databricks 平台收取 虚拟机费用 客户云账号支付 存储费用 容量 + 请求次数 网络费用 跨区/跨服务传输 分项计费 · 账单可拆解 DBU + VM + 存储 + 网络 Serverless 计算 合并计价单元 DBU + 虚拟机 + 部分存储/网络 按实际使用量 · 秒级计费 免运维 · 自动伸缩 · 无闲置虚拟机费用 适合突发、短时、交互式负载 单价较高,但资源利用率更优 最终账单 = 平台侧 DBU/Serverless 费用 + 云侧资源费用 DBU 虚拟机/Serverless 存储 网络

六、实际归因时的判断依据

在真实账单中,判断一笔费用属于哪个维度,可以按以下顺序检查:先看 usage_unit 是 DBU 还是云资源单位;再看 sku_name 确定是 All-Purpose、Jobs 还是 Serverless;然后看 cluster_id 或 warehouse_id 关联到具体计算资源;最后结合云厂商账单中的实例、存储和网络条目做交叉核对。

实用提示:如果账单中某作业的 DBU 费用占比很高,但虚拟机费用很低,说明该作业可能运行在 Serverless 或高单价 SKU 上;反之,若虚拟机费用远高于 DBU,则优先检查实例规格、空转时长和自动伸缩策略。
注意:Serverless 的“合并计价”不等于“没有存储和网络成本”,只是这些成本被平台折算进单价中。做成本对比时,不能只比较 DBU 单价,而应比较完成同一任务的总成本。