深度指南
数据库与 IOPS 扩容模拟器:当托管数据库成本超过每位用户的收入
行业管理层分析
托管数据库是技术栈中人们最想忘掉的部分,而当账单到来时,它也会反过来让人们忘不掉。它起初只是一个小实例和一块小磁盘。随后用户增长,功能增加了查询,数据表里堆满了历史记录,原本便宜的方案就变成了账单上最大的一项。与网页服务器不同,数据库不是靠增加廉价且相同的机器来扩容的。它们靠迁移到更大的实例、增加预置吞吐量并把所有内容复制到副本来扩容,而每一步都会让成本成倍增加。
这个问题的结构是:成本呈阶梯式跳升,而收入平滑增长。实例规格成倍增加:从两个到四个、八个、十六个 vCPU,价格每次大致翻一倍。存储和 IOPS 单独计费,而副本会把所有这些都成倍放大。当您的实例翻倍时,每位用户的收入并不会翻倍。一家在三万位用户时舒适盈利的企业,可能会发现,上升到下一档规格会抹去接下来一万位用户带来的收益。
多米诺模型沿着这条链条展开。用户数和每千位用户的 IOPS 设定了存储层的峰值需求。计算需求决定实例规格,而实例规格又与副本、存储和预置吞吐量一起决定账单。账单变成占收入的一个比例,最终决定利润。一个索引不佳的查询,可以在用户数没有任何变化的情况下,让第一个框变化三倍,这就是为什么查询调优往往是降低此后每一个框的最便宜的方式。
冰山图把人人都看得到的实例,与让账单高于预期的额外项目区分开来。可见的是主实例和存储。水面之下,是重复计算和存储的副本、超出磁盘自带基线的预置 IOPS、保留数周的备份,以及跨可用区复制数据的流量。每一项都归在不同的计费项目下,所以规划时很容易被低估。请用模拟器测试您自己的架构在用户增长时的表现,以及数据库在哪里变得负担不起。
公式与方法论蓝图
该模型是单个月份。峰值 IOPS 需求等于每千位用户数乘以每千位用户的 IOPS 再乘以2.5的峰值系数。所需计算资源为每位用户0.0005个 vCPU,向上取整为二的幂次实例规格,最小为两个。每个副本都会重复主实例、存储和预置 IOPS。预置 IOPS 在3,000的基线之上计费。存储、备份和跨可用区复制计入总额,其他成本为收入的40%。
- 峰值 IOPS
- I = 用户数 ÷ 1000 × 每1000用户 IOPS × 2.5
- 存储层在峰值时必须维持的每秒操作数。
- 实例规格
- V = 2^ceil(log₂(max(2, 用户数 × 0.0005)))
- 主节点的 vCPU 数,按二的幂次规格提供。
- 数据库账单
- D = (1 + 副本数) × (V × 价格 + IOPS 成本 + 存储) + 备份 + 跨可用区
- 在每个节点上重复的计算、吞吐量和存储,加上备份和复制。
- 预置 IOPS
- max(0, I − 3000) × $0.10 每节点
- 超出磁盘自带部分的吞吐量,在每个节点上计费。
- 净利润
- 净额 = 收入 × (1 − 40%) − D
- 月度结果。临界点就是它达到零的位置。
层层传导的弹性
副本数和每位用户的 IOPS 是弹性最大的输入,因为每一个都会在每个节点上成倍放大。每位用户的收入放大整个利润率。用户数通过收入以及升级到更大实例这两种方式改变结果,所以增长并不是免费的胜利。
三个真实案例研究
白手起家的初创者
使用最小数据库的小型产品
一款年轻的产品有三千位用户、一个副本,每位用户的数据量很小。每位用户的收入很高,实例是最小规格。加载这个案例,可以看到早期数据库的成本微不足道,以及较高的每位用户收入如何带来成长的空间。
处于扩张期的中型市场企业
查询高效的庞大用户群
一款有三十万位用户的产品,通过索引和缓存把每位用户的 IOPS 保持在低位,并运行两个副本。账单的绝对金额很大,但占收入的比例不高。加载这个案例,可以看到查询调优之后规模如何发挥作用。
黑天鹅危机
沉重的查询与过多的副本
一款用户群庞大但每位用户收入很低的产品,运行着没有索引的查询、五个副本,以及每位用户大量存储的数据。预置 IOPS 和副本让每一项成本成倍增加。加载这个案例,可以看到数据库账单超过收入,以及哪个杠杆能让当月恢复。
行业基准矩阵
| 指标 | 危险区 | 行业平均 | 前 10% 的佼佼者 |
|---|---|---|---|
| 数据库成本占收入的比例 | 高于35% | 8–15% | 低于6% |
| 每位活跃用户每月的数据库成本 | 高于$0.25 | $0.05–0.12 | 低于$0.04 |
| 典型 SaaS 的副本数 | 没有明确读取需求却超过3个 | 1–2个 | 1个备用节点加有针对性的只读副本 |
| 峰值时实际使用的预置 IOPS 占比 | 低于30% | 50–70% | 70–85% |
| 备份保留期 | 保留数月的完整快照 | 7–14天 | 带归档的分层保留 |
变量与杠杆
活跃用户
在典型月份中产生数据库负载的用户。
杠杆: 不要以为用户越多利润率就一定越好;请确认每位用户的收入仍然足以覆盖下一档实例规格。
每位用户每月收入
您从一位活跃用户身上每月赚取的平均收入。
杠杆: 通过定价分层提高每位用户的收入,因为每位用户的数据库成本会随使用量和存储增长。
每1,000位用户的峰值相关 IOPS
每一千位用户平均产生的每秒读写操作数。查询设计和索引对此影响最大。
杠杆: 补上缺失的索引、缓存热点读取并批量写入;降低 IOPS 往往能同时避免更大的磁盘和更大的实例。
每个 vCPU 的月价格
您使用的实例规格下,托管数据库每个 vCPU 每月收取的费用。
杠杆: 比较不同的实例系列,并在负载可预测之后承诺使用预留容量。
只读副本与备用节点
用于读取或故障切换的数据库额外副本。每一个都会重复计算、存储和 IOPS 成本。
杠杆: 质疑每一个副本:保留一个备用节点用于故障切换,只有在读取确实需要时才增加只读副本。
每位用户存储的数据(GB)
每位用户增加的数据库存储的平均 GB 数,包括索引。
杠杆: 把旧数据行归档到更便宜的存储,设置保留期限,并压缩大字段。
如何使用本模拟器
- 1从“现实”预设开始,或输入您的用户数、每位用户收入和当前的实例详情。
- 2查看五个多米诺框,看看是 IOPS 需求还是实例规格先变红。
- 3点击“找出我的临界点”,查看会抹去利润的负载或副本数。
- 4在24个月的图表上,将当前配置与调优方案进行比较。
- 5在下一次实例升级之前,每季度审查慢查询和未使用的副本。
应避免的错误
- 假定数据库成本与用户数成比例增长,而实际上它是阶梯式增长,并随副本成倍放大。
- 预置的 IOPS 远高于工作负载的实际使用量,原因是这个设置是从更大的系统复制来的。
- 保留没有任何查询使用的只读副本,为计算和存储付了两倍或三倍的钱。
- 在查看造成负载的慢查询和缺失索引之前,就先升级实例规格。
常见问题
什么是 IOPS,为什么要为它计费?
IOPS 指每秒输入输出操作数:存储层执行的读写次数。一些存储档位自带一个基线,并对超出基线的预置吞吐量计费。请查看您的服务商当前的规则。
什么时候应该增加只读副本?
当读取明显占主导且主节点是瓶颈时,或者当您需要降低地域延迟或进行故障切换时。出于习惯而增加副本,会让整个账单成倍增加。
为什么成本会在某些用户数处跳升?
实例规格是固定的,所以跨过某个阈值就会让您升到价格大约翻倍的下一档规格。模型使用二的幂次规格来展示这些跳升。
更大的实例比更多的副本更好吗?
对于写入,通常的答案是更大的主节点。对于读取,副本或缓存会有帮助。合适的组合取决于工作负载,所以请在扩容之前先测量。
如何找到数据库变得负担不起时的用户数?
点击“找出我的临界点”。该工具会把每个输入向更差的一端移动,并报告使月利润归零的数值。
这有多准确?
这是一个使用示例性价格的教学模型,不是工程报价,也不构成建议。请用您的服务商当前的价格和实测的负载替换其中的常数。
这是一个带有明确假设的教育性规划模型,不构成财务、税务或法律建议。请将输入替换为您自己的数据,并就重要决策咨询合格的专业人士。