2. Databricks计费模型解析

要治理 Databricks 成本,第一步不是“省钱”,而是把账单拆开,知道每一块钱到底花在什么地方。Databricks 的账单并不是一个单一价格,而是由多个计费维度叠加而成:DBU 费用、云厂商的实例费用、存储费用、网络费用,以及 Serverless 与经典集群在计费方式上的差异。只有把这些维度分开看,后续的优化动作才有明确的目标。

一、DBU:Databricks 的计费核心单位

DBU(Databricks Unit)是 Databricks 对计算资源使用量的计量单位,可以理解为“Databricks 平台处理能力的标准计量”。它并不等同于云主机的小时数,而是根据集群类型、计算规格、运行时长以及所启用的功能综合计算出来的用量。账单中的 DBU 费用 = DBU 用量 × 对应 SKU 的 DBU 单价。

不同计算形态对应不同的 DBU 费率。例如,用于数据工程的 Jobs Compute、用于交互分析的 All-Purpose Compute、用于 SQL 仓库的 SQL Compute,以及 Serverless 形态,其 DBU 单价通常并不相同。一般来说,All-Purpose 的单价高于 Jobs,因为前者面向交互式、常驻型负载;Serverless 的单价可能更高,但它省去了实例管理和空闲成本。因此,比较“贵不贵”不能只看单价,而要看单位任务的总成本。

二、云实例成本:与 DBU 并行的第二笔账

在经典集群模式下,Databricks 运行在客户自己的云账号中,因此除了 DBU 费用,还会产生云厂商的虚拟机费用。这部分费用直接出现在云厂商账单里,而不是 Databricks 账单里。云实例成本 = 实例单价 × 实例数量 × 运行时长,受实例类型、是否使用 Spot/抢占式实例、是否开启自动伸缩等因素影响。

这意味着一个经典集群的总成本 = DBU 费用 + 云实例费用。很多团队只关注 Databricks 账单,却忽略了云厂商账单中的实例费用,导致成本归因不完整。实际治理中,必须把两份账单按集群、按作业、按标签关联起来,才能得到真实的单位任务成本。

三、存储成本与网络成本

存储成本主要来自云对象存储,例如 S3、ADLS、GCS,以及 Databricks 的托管存储。它通常按存储容量、请求次数和数据分层计算。存储成本的特点是“持续存在”,即使集群不运行,只要数据还在,就会持续产生费用。因此,存储治理的重点是生命周期管理、分区清理、小文件合并和冷热分层。

网络成本容易被忽视,但在跨区域、跨云、跨可用区传输时可能非常可观。典型场景包括:集群与存储不在同一区域、跨区域读取数据、频繁的跨云数据交换、以及公网出口流量。网络成本通常按传输数据量计费,治理手段是让计算与存储尽量同区域部署,减少不必要的跨区传输。

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

Serverless 与经典集群最大的区别在于:Serverless 把基础设施管理交给 Databricks,计费通常以 DBU 为主,云实例成本被整合进 Serverless 的单价中,不再单独出现在云厂商账单里。它的优势是启动快、无需管理实例、按实际使用计费,适合间歇性、突发性负载。经典集群则把 DBU 与云实例分开计费,灵活性更高,可以使用 Spot 实例、自定义实例类型和网络配置,但需要自己承担实例管理和空闲成本。

选择哪种形态,取决于负载特征。对于短时、频繁、不可预测的任务,Serverless 往往更划算;对于长时间稳定运行、可充分利用 Spot 实例的批处理任务,经典集群可能更经济。关键是用单位任务成本来比较,而不是只看单价。

Databricks 账单构成与计费维度分解 总成本 = DBU 费用 + 云实例费用 + 存储费用 + 网络费用 经典集群(Classic Cluster) DBU 费用 Databricks 账单 · 按 SKU 单价 × 用量 Jobs / All-Purpose / SQL 费率不同 云实例费用 云厂商账单 · 实例单价 × 数量 × 时长 受 Spot、自动伸缩、实例类型影响 存储费用 对象存储 · 容量 + 请求次数 + 分层 持续产生,与集群是否运行无关 网络费用 跨区域 / 跨云 / 公网出口流量 计算与存储同区域可显著降低 Serverless 计算 DBU 费用(含基础设施) 云实例成本整合进 Serverless 单价 不再单独出现在云厂商账单中 按实际使用计费 · 启动快 · 无需管理实例 存储费用 与经典集群相同,独立计费 对象存储容量 + 请求 + 分层 网络费用 跨区域 / 跨云 / 公网出口流量 Serverless 通常同区域部署,跨区较少 关键差异 经典:DBU + 云实例分开计费,灵活但需管理 Serverless:DBU 含基础设施,省心但单价较高 对比

五、账单构成与成本归因

把上述维度组合起来,Databricks 的总成本可以表达为:总成本 = DBU 费用 + 云实例费用 + 存储费用 + 网络费用。其中,DBU 费用和云实例费用是计算侧成本,存储和网络是数据侧成本。经典集群下,计算侧成本分散在 Databricks 和云厂商两份账单中;Serverless 下,计算侧成本主要集中在一份账单中,归因更简单,但单价更高。

实际做成本归因时,建议按“集群 / 作业 / 团队 / 项目”四个维度打标签,并把 DBU 用量、实例时长、存储容量、网络流量分别映射到这些标签上。这样,当某个月成本上升时,可以快速定位是 DBU 用量增加、实例规格过大、存储未清理,还是跨区域传输过多。

示例:一次作业的成本拆解(假设参数,仅用于教学演示)
假设一个经典集群作业运行 2 小时,使用 4 台 i3.xlarge 实例(按需单价约 0.312 美元/小时),DBU 单价为 0.15 美元/DBU,作业消耗 40 DBU。则:
云实例费用 = 4 × 0.312 × 2 = 2.496 美元;
DBU 费用 = 40 × 0.15 = 6.0 美元;
计算侧合计约 8.496 美元。若该作业读取 50 GB 跨区域数据,网络费用按 0.02 美元/GB 估算,约 1.0 美元;存储费用按数据保留 30 天、单价 0.023 美元/GB·月估算,约 0.038 美元。总成本约 9.53 美元。这个拆解说明:DBU 和实例费用是主要成本,网络费用在跨区域场景下不可忽视。

六、治理视角下的关键判断

理解计费模型后,成本治理就有了明确的抓手。第一,区分“计算成本”和“数据成本”,计算成本可以通过调度、规格、Spot、Serverless 优化,数据成本需要通过生命周期和分层治理。第二,区分“DBU 单价”和“单位任务成本”,单价低不代表总成本低,空闲集群的 DBU 和实例费用会持续累积。第三,区分“经典”和“Serverless”的适用场景,不要一刀切。第四,建立账单关联机制,把 Databricks 账单和云厂商账单按标签对齐,否则成本归因永远不完整。

下一阶段的实际动作,可以围绕三个问题展开:哪些作业的 DBU 用量最高?哪些集群的空闲时间最长?哪些数据的存储和网络费用占比异常?回答这三个问题,就能把成本治理从“看账单”推进到“改行为”。