4. 成本结构拆解
MongoDB 容量增长带来的成本压力,往往不是单一账单项在涨,而是多个成本维度同时被放大。要治理成本,第一步不是立刻降配或删数据,而是把云数据库账单拆成可归因的几块:实例规格费、存储费、备份费、跨区流量费、运维人力成本。只有把每一块与业务行为、数据增长、访问模式对应起来,才能判断哪些是刚性成本、哪些是浪费、哪些可以通过架构调整转移或压缩。
下面这张图把五类成本放在同一条“容量增长驱动链”上,展示它们如何被数据量、写入量、副本数、备份策略和跨区部署共同放大。图中箭头方向表示成本随容量增长的传导路径,而不是操作步骤。
一、实例规格费:不是“越大越贵”,而是“匹配度”决定性价比
云数据库实例规格费通常按“节点规格 × 节点数 × 运行小时”计费。MongoDB 副本集至少三节点,分片集群还要叠加 mongos 与 config server,因此规格费往往是账单中占比最大的一块。判断规格是否合理,不能只看 CPU 使用率,还要看内存命中率、IOPS 饱和度、连接数峰值。一个常见误区是:CPU 长期 20% 就认为可以降配,但实际瓶颈可能在内存不足导致大量磁盘读,或 IOPS 已经打满。
实操中建议按以下顺序判断:先看 db.serverStatus().mem 中 resident 与 virtual 的比例,再看 wiredTiger.cache 的 bytes read into cache 是否持续增长。如果 cache 命中率低于 95%,说明工作集已超出内存,此时降配会直接导致性能崩塌。反之,如果 cache 命中率长期高于 99%、CPU 峰值低于 40%、IOPS 低于规格上限的 50%,才具备降配空间。降配前应先在低峰期做一次滚动测试,观察 P99 延迟变化。
二、存储费用:数据、索引与 oplog 的三重叠加
存储费按实际占用 GB·月计费,但 MongoDB 的“实际占用”往往比业务数据大得多。它包括:集合数据、索引、oplog、以及 WiredTiger 的预分配与碎片空间。一个 100 GB 的业务集合,如果建了 5 个复合索引,索引可能再占 30~50 GB;oplog 默认按小时窗口滚动,高写入场景下也可能占用数十 GB。因此,存储治理的第一步是量化“数据 : 索引 : oplog”的比例。
可以通过 db.stats() 查看 dataSize 与 storageSize,通过 db.collection.stats() 查看 totalIndexSize。如果 storageSize 远大于 dataSize,说明碎片或预分配严重,可考虑在低峰期执行 compact 或重建集合。对于历史数据,应按时间字段做冷热分离:热数据保留在高性能存储,冷数据归档到低频存储或对象存储,可显著降低单位 GB 成本。
三、备份费用:保留策略是最大的成本杠杆
备份费用由“快照大小 × 保留份数 × 存储单价”决定。云数据库通常支持自动快照与 oplog 增量备份,但很多团队默认保留 30 天甚至 90 天,且未做分级。实际上,最近 7 天的备份用于快速恢复,7~30 天的备份用于合规审计,30 天以上的备份可以转低频或归档。如果业务允许,还可以对非核心库降低备份频率,从每日一次改为每周一次。
一个可执行的检查表如下:
- 核心交易库:每日全量 + 持续 oplog,保留 30 天,其中 7 天内高频可快速恢复。
- 用户行为库:每日全量,保留 14 天,30 天以上转归档存储。
- 日志/临时库:每周全量,保留 7 天,或直接不备份,依赖上游重放。
四、跨区流量费:写入放大与副本同步的隐性成本
跨区流量费常被忽略,因为它在账单中占比不大,但增长速度快。MongoDB 跨区副本集或分片集群中,每次写入都要同步到其他区域的节点,产生出站流量。如果写入量为 100 GB/天,跨 2 个区域,则每天出站流量约 200 GB,按月累计可达 6 TB。若跨区还承载读请求,流量会进一步放大。
治理思路有三条:一是就近写入,让主节点位于写入量最大的区域,减少跨区同步距离;二是异步副本,对一致性要求不高的分析型副本使用异步同步,降低同步频率;三是压缩传输,启用 MongoDB 的压缩选项(如 snappy、zstd),减少实际出站字节数。需要注意的是,压缩会消耗 CPU,需在实例规格上留出余量。
五、运维人力成本:最容易被低估的一块
运维人力成本不直接出现在云账单中,但它是真实存在的。包括:日常监控告警处理、慢查询优化、索引调整、版本升级、故障应急、容量规划等。一个中等规模 MongoDB 集群,如果缺乏自动化,可能需要 0.5~1 个专职 DBA 的投入。按人力成本折算,这部分可能占总体拥有成本的 10%~20%。
降低人力成本的核心是自动化与标准化:用监控平台自动采集 serverStatus、collStats、currentOp 等指标;用脚本自动生成索引建议;用基础设施即代码管理集群配置;用混沌演练验证故障切换。自动化程度越高,单位容量所需人力越少,成本曲线越平缓。