接手大数据平台运维之后,我遇到最多的诉求不是“平台又慢了”,而是“这个月账单怎么又涨了”。更尴尬的是,面对账单上涨,团队往往只能给出“业务量涨了”这种没有说服力的解释。我意识到,问题不在成本本身,而在成本没有归因——你不知道钱花在了哪个任务、哪张表、哪个团队,也就谈不上优化。这篇主要聊大数据架构成本优化,核心是云上资源管理和成本控制策略,从账单拆解到计算与存储的降本手段,再到组织机制的落地,把我自己实践过的一套方法完整过一遍。如果你正在为云账单头疼,是平台工程师、数据架构师或者Infra负责人,这篇文章应该能给你一些直接能用的思路。
1. 账单归因:先搞清楚每一分钱到底花在哪里
不做归因就谈成本优化,等于闭着眼睛理财。很多团队拿到云厂商的月账单,只能看到“计算资源”和“存储资源”两个大数。至于这笔钱是数据开发跑任务烧掉的,还是算法团队训练模型烧掉的,又或者仅仅是公司某条业务线的离线表没人清理占着存储——完全说不清。说不清,后面所有优化动作都是拍脑袋。
1.1 三层账单拆分:从云账号到业务任务
我的习惯是把账单拆成三层看。第一层是云厂商的自带维度,按账号、地域、服务去拆,比如对象存储(S3/OSS)、计算集群(EKS/ACK/YARN)、托管服务(ES、ClickHouse)分别花了多少。这一层只能看出总量的分布,适合用来确认“大头”到底在哪里。
第二层是资源标签维度。这层需要前期建设,云上所有资源在创建时必须打标签,一般至少包含:环境(env)、团队(team)、业务线(workload)、资源类型(type)。比如一个计算节点池的标签可能是team=数据平台, workload=实时计算, env=prod。有了标签,账单就能按团队和业务线汇总,哪个团队是成本大头一目了然。
第三层是任务级维度。这一层最难,但最有价值。做法是把账号体系里的任务ID(Spark的application id、Flink的job id)映射到业务方和具体的负责人。当年我接手时,能做到任务级核算,方式是维护一份“任务–负责人–业务线”的映射表,在任务启动和资源申请时通过元数据平台自动登记,再加上运行时的资源使用量,就能拆出单个任务的成本。
三层拆完,你手里的就不再是一堆云账单,而是一张“业务成本报表”。平时看不到没关系,做优化讨论和预算计划时,它会成为团队之间扯皮时最硬的证据。
1.2 成本构成画像:计算、存储、网络与托管服务各占多少
成本归因之后,第二步是画出成本构成。以我这边跑在K8s上的实时计算和YARN上的离线计算为例,典型分布是:计算资源占50%到60%,存储占20%到30%,网络和托管服务占10%到20%。但这个比例不是固定的,取决于业务形态。如果我们把所有人的明细数据都保留三年,那存储成本迟早会反超计算。
构成画像不是简单看占比,还要看“单位成本”。我建议每个季度算几个指标:每CPU核时的成本、每GB存储月成本、每万次对象存储请求的成本、每TB数据扫描/查询的成本。这些单价指标才能反映资源使用效率。比如CPU核时单价涨了,可能不是云厂商涨价,而是我们的集群利用率下降了、有大量空闲节点在空转。
网络成本在传统IDC时代几乎不用管,但在云上是大头。我们曾有一个业务把对象存储当消息队列用,每天高频写入和读取,结果请求费用超过存储费用几十倍。这种案例提醒我:成本构成画像一定要细化到“请求数”这个维度,不能只看容量。
1.3 成本大盘:用一张表把异常涨跌暴露出来
口径确定后,要落到一个可持续更新的成本大盘上。大盘不需要花哨,一张宽表加几个核心视图就够。我推荐至少包含以下指标:按天/按周的总成本、周环比与月同比、Top10高消耗任务、Top10存储占用表、各团队成本趋势、每CPU核时/每TB单价波动。
这张大盘不是给老板看的,是给自己和研发团队看的。所以它必须能回答三
