☁️ 第三章 云计算改变了什么
📄 一句话概括

云的计费有三种买法:按量付费(基准价、随时开停)、包月/承诺(承诺 1~3 年换低价,最高约 72% 折扣)、竞价(用云商的空闲容量,便宜 60~90%,但会被回收);100 台实例按用途分开买,比全部按量省 31.0%——诀窍不是选最便宜的那种,是给每一部分用量配对合适的买法。

📝 本节和前面几节的关系

上一节(3-10)讲的是"要学什么"。这一节转到这一章真正要会算的东西:钱。

教材把它放在这里,是因为前面 3-6、3-7 讲的"钱"是记账层面(进哪张表、怎么摊),3-9 讲的是服务方的工时(成本优化占 28%)——而这一节要回答的是最实际的问题:同样一笔用量,怎么买才最省。 这是本章唯一需要真正动手算的一节,所以难度标了三星。

一、三种买法,各自适合谁

买法 怎么算 适合什么 折扣
按量付费 按秒/小时计费 波动、短期、试验 无(基准)
包月/承诺 承诺 1~3 年换低价 稳定的基线用量 最高约 72%
竞价(Spot) 用云商的空闲容量 批处理、CI、可中断 60~90%

这三种不是在比"哪个便宜",而是三种不同性质的交易:

看清楚了这三种性质,就能理解本节的核心方法:它们不冲突,可以同时用。

二、一个月 730 小时:三种买法各花多少

以某个实例的按量价 0.100 美元/小时、每月按 730 小时计算:

买法 单价 月成本 说明
按量付费 0.100 美元/小时 73.00 美元 基准
承诺(约 −40%) 0.060 美元/小时 43.80 美元 要承诺 1 年
竞价(约 −70%) 0.030 美元/小时 21.90 美元 随时可能被收回

这三行数字要连着右边那列一起读:

所以这三行的正确读法不是"选最便宜的",而是"先按用量性质分类,再分别匹配"。

三、把 100 台按用途分开买

假设一家公司有 100 台实例,可以这样分:

用途 台数 买法 月成本
稳定基线 60 台 承诺 2,628.00 美元
波动部分 30 台 按量 2,190.00 美元
可中断任务 10 台 竞价 219.00 美元
合计 100 台 5,037.00 美元
全部按量 100 台 7,300.00 美元
省下 2,263.00 美元(31.0%)

这个组合的逻辑,就是本节要带走的方法:

结果:不改变任何业务行为,只调整买法,费用降了 31.0%。

这个 31% 就是 3-9 里那"28% 的成本优化与治理"工时对应的钱。 它不需要新技术、不需要重构代码,只需要分对类、买对方式——这也是为什么这类工作值得专门有人做。

四、动手 Demo:100 台的三段配置

# 100 台实例,按用途分开买(按量价 0.100 美元/小时,月按 730 小时)
base_n, ond_n, spot_n = 60, 30, 10
p_cmt, p_od, p_spot = 0.06, 0.10, 0.03
m = 730
cost = base_n * p_cmt * m + ond_n * p_od * m + spot_n * p_spot * m
all_od = 100 * p_od * m
print("分开买 %.2f 美元/月" % cost)
print("全按量 %.2f 美元/月" % all_od)
print("省下 %.2f 美元(%.1f%%)" % (all_od - cost, (all_od - cost) / all_od * 100))

实跑输出:

==================================================================================================
D11 云服务的费用:按量、包月、竞价,三种买法
==================================================================================================
  【一】三种买法各自适合谁

  买法                怎么算                      适合什么                  折扣
  --------------------------------------------------------------------------------------------
  按量付费            按秒/小时计费               波动、短期、试验          无(基准)
  包月/承诺           承诺 1~3 年换低价           稳定的基线用量            最高约 72%
  竞价(Spot)        用云商的空闲容量            批处理、CI、可中断        60~90%

  【二】一个月 730 小时:三种买法各花多少(按量价 0.100 美元/小时)

  买法                  单价                  月成本          说明
  ------------------------------------------------------------------------------------
  按量付费              0.100 美元/小时       73.00 美元      基准
  承诺(约 −40%)       0.060 美元/小时       43.80 美元      要承诺 1 年
  竞价(约 −70%)       0.030 美元/小时       21.90 美元      随时可能被收回

  【三】把 100 台按用途分开买

  用途                      台数      买法              月成本
  --------------------------------------------------------------------------
  稳定基线                  60 台     承诺              2,628.00 美元
  波动部分                  30 台     按量              2,190.00 美元
  可中断任务                10 台     竞价              219.00 美元
  --------------------------------------------------------------------------
  合计                      100 台                      5,037.00 美元
  全部按量                  100 台                      7,300.00 美元
  省下                                                  2,263.00 美元(31.0%)

  【四】竞价的两分钟(2026 现状)
     AWS 提前 2 分钟通知回收,Azure 与 GCP 只有约 30 秒。
     所以竞价只能用在【断了不影响结果】的活上:有状态的数据库、
     不能中断的任务,一律不许碰。

读这个输出:第三段的三行分别对应三种用量性质——60 台一直跑、30 台忽高忽低、10 台随时可断。这个分类不是技术分类,是业务分类:你要问的不是"这台机器配置多高",而是"它的活能不能停、会不会一直跑"。

最后一段那句限制要当成硬规矩记住:竞价不是"便宜的选择",是"有前提的选择"——它的前提是"被收走也不影响结果"。给数据库用竞价,省下的钱不够赔一次数据损坏。

五、⚠️ 2026 现状

30 秒实验

打开你的云账单(或者任意一份云服务的定价页),做一次分类:

  1. 列出你正在付费的实例或服务——大概心里有数就行,不用精确。
  2. 把每一项标一个字母:A 表示"一直跑、不能停",B 表示"时开时关、需求有起伏",C 表示"断了可以重来"。

标完之后,对照本节第三段那张表,看现在的买法对不对得上——A 类应该用承诺,B 类应该用按量,C 类可以考虑竞价。只要有一项对不上,那里就有可以省下来的钱。 这个动作不需要工具,一支笔就够。

常见误区

  1. 错误:竞价便宜 70%,能用的地方尽量用。——纠正:它的前提比价格重要得多。竞价的本质是"对方随时可以收回",回收预警 AWS 只有 2 分钟、Azure 和 Google 只有 30 秒。所以只有"被中断也不影响结果"的活能用——批处理、构建任务、可重跑的数据处理。有状态的数据库、不能中断的交易系统,一律不能用。 省下的钱和一次数据损坏的损失不在一个量级。

  2. 错误:承诺折扣高,那就尽量多承诺。——纠正:承诺的性质是"不管用不用都要付"。如果承诺的用量超过了实际用量,超出的部分是纯浪费——这比不打折还糟,因为你付了钱却什么也没得到。所以正确的顺序是:先看至少一个月的历史用量,确认基线在哪里,只对确认会用的部分做承诺(这也是这一类优化的通行做法:先对齐规格、再承诺)。

  3. 错误:按量付费是最贵的,所以应该只用来做测试。——纠正:按量付费的溢价是"灵活性"的价格,它本身是一种正确的选择。Demo 里那 30 台波动部分,如果改用承诺,省下的单价会被业务低谷时白付的钱吃掉。所以按量付费不是"次优选择",它是专门为"用量不稳定"这件事设计的买法。 判断标准是"这部分用量稳不稳",不是"哪种价格低"。

  4. 错误:三家的竞价规则差不多,可以照着同一套方案搬。——纠正:预警时间差得很远,这直接改变了技术方案。AWS 给 2 分钟,可以在收到通知后存盘、把任务挪走;Azure 和 Google 只给约 30 秒,程序必须在运行期间就持续保存状态,而不是等通知。所以同一套"竞价上的架构",在不同云上的可行性是不同的——换云的时候,这一条要重新验证。

自测三问(点开对答案) 1. Demo 里省下的 31%,靠的是换技术还是换买法? —— **纯粹靠换买法**。三段的实例数量、规格、跑的业务完全没变,**唯一的变化是"哪部分用哪种计费方式"**。这也说明为什么 3-9 里"成本优化与治理"占了 28% 的工时——**这项工作不需要改代码,只需要持续地分类、调整、复核**。它省的每一分钱都是净利润。 2. 为什么"波动部分"用按量付费比用承诺更划算? —— 因为**承诺要求你在一段时间内持续付费,而波动部分的特点是"有时候不用"**。业务低谷时那部分实例可能只跑了一半时间,**但承诺费照付**——省下的 40% 单价,被"一半时间白付"完全抵消甚至反超。**所以判断标准是"这段时间里它会不会一直跑",而不是"它的单价是多少"。** 用量越不确定,按量的溢价越值。 3. 为什么"给数据库用竞价"这个错误特别严重? —— 因为**竞价的回收是不可协商的**——通知只有 2 分钟(甚至 30 秒),到点就收走。数据库是**有状态的**:它上面可能正有未提交的事务、正在写的日志、内存里没落盘的数据。**被强制收走的后果不是"服务暂停一下",而是可能的数据损坏或不一致。** 所以这里的原则是**按"最坏情况代价"来分类,而不是按"平均能省多少"**:可以重跑的东西才允许被中断。

相关笔记