云上资源的花费里,最容易被忽视的其实是那些常年运行的虚拟机。一台按需付费的标准D系列虚拟机,单月成本看似不高,但一年累计下来往往是预留实例价格的一点五到两倍。Azure预留实例本质上是一种用承诺换折扣的商业模式:你提前承诺使用某个规格的虚拟机一年或三年,微软则用大幅度的价格折扣作为回报。对于负载稳定、长期运行的业务来说,这笔账值得认真算一算。

预留实例的定价原理与折扣幅度
Azure预留实例的定价逻辑很简单:用户承诺在未来一年或三年内持续使用特定规格的计算资源,作为交换,资源单价大幅下降。折扣幅度取决于几个因素:承诺期限、付款方式、区域和实例系列。一般来说,三年期全预付的折扣最大,Linux虚拟机普遍能达到六折左右,部分区域和系列甚至更低;一年期的折扣通常在四成上下。
以欧洲西部区域的D4s v5为例,按需付费的Linux价格约为每小时0.192美元,而三年期预留实例折算下来每小时只要约0.077美元,折扣接近六成。如果这台机器全年无休运行,按需方案一年花费约1683美元,三年预留方案一年只要约675美元,三年累计节省超过3000美元。这个数字只是单台机器的差距,如果一个团队有几十台长期运行的虚拟机,节省的金额会非常可观。
-- 用Azure CLI查询某个区域虚拟机的按需价格与预留价格对比 -- 按需价格查询 az vm list-sizes --location westeurope --output table -- 购买三年期预留实例示例 az reservations reservation-order purchase \ --reservation-order-id 8bc352d1-1f4a-4c6c-9e2f-3a5d6b7c8e9f \ --sku Standard_D4s_v5 \ --location westeurope \ --quantity 5 \ --term P3Y \ --billing-plan Upfront
需要注意的是,Windows虚拟机的预留折扣只覆盖基础设施部分,不包含Windows许可费用。许可费在按需模式下占了大头,所以Windows虚拟机的总体折扣幅度看起来只有三到五成。如果想进一步压低成本,可以搭配Azure Hybrid Benefit,把本地的Windows Server许可迁移到云上复用,这样基础设施折扣和许可复用叠加,综合节省比例能逼近七成。
预留实例、节约计划与按需付费的方案对比
选型时最容易混淆的是预留实例和节约计划。预留实例锁定的是具体规格,比如你买了D4s v5的预留,就必须用这个系列和规格的虚拟机才能享受折扣,灵活性较差但折扣更深。节约计划则是按每小时花费金额做承诺,只要消耗符合条件的服务,无论用哪种规格、哪个系列都能自动匹配折扣,灵活性高但折扣略浅,通常比预留低五到十个百分点。
按需付费则完全没有承诺,随开随关,适合负载波动大、运行时间不固定的场景。三种方案的适用边界可以这样划分:全天候运行且规格稳定的工作负载优先选预留实例;规格经常调整但总量稳定的选节约计划;间歇性运行、测试环境则留在按需模式。
| 方案 | 折扣幅度 | 灵活性 | 适用场景 |
|---|---|---|---|
| 预留实例 | 40%至60% | 低,锁定规格 | 长期稳定的固定负载 |
| 节约计划 | 30%至50% | 高,规格不限 | 规格频繁变动的稳定负载 |
| 按需付费 | 无 | 完全弹性 | 临时任务、测试环境 |
还有一点值得强调,预留实例本质上是计费层面的折扣,不是资源层面的锁定。你买了预留之后,并不需要提前创建好对应虚拟机,也不会因为预留而占用容量配额。虚拟机该什么时候创建就什么时候创建,只要规格和区域匹配,计费系统会自动把预留折扣应用上去。这一点和很多人理解的先买后用的模式不同。
购买前的成本测算与容量规划方法
买预留最怕的就是算不准用量,买多了浪费,买少了享受不到折扣。Azure提供了使用数据分析工具来辅助决策,在成本管理加计费页面中可以查看预留建议报告,系统会根据过去7天、30天或60天的实际使用数据,推荐应该购买多少时长的预留。建议报告会明确列出潜在节省金额和推荐购买量,比凭感觉拍板靠谱得多。
自己做测算时,核心公式是:稳定运行的小时数乘以目标规格的按需单价,得到按需年成本;再乘以预留折扣系数得到预留年成本;两者的差额就是节省空间。关键在于确定哪些负载算得上稳定。经验法则是,那些开机时间超过全月七成的虚拟机才值得纳入预留范围,低于这个比例的负载按需或者用节约计划更划算。
# 导出最近30天的虚拟机运行数据用于测算
az consumption usage list \
--start-date 2024-05-01 \
--end-date 2024-05-31 \
--query "[?contains(instanceName, 'vm-')].{name:instanceName, hours:quantity, cost:pretaxCost}" \
--output table
# 查看系统生成的预留购买建议
az reservation recommendation list \
--resource-scope "Shared" \
--region westeurope \
--look-back-period 30作用域选择也是规划中容易忽略的环节。预留可以设置为共享作用域或单个订阅作用域,共享作用域下预留折扣会自动匹配整个计费账户内所有匹配的用量,适合企业级集中管理;单订阅作用域则把折扣锁定在指定订阅内,适合各团队独立核算的场景。共享作用域的利用率通常更高,建议在多订阅环境下优先选择。
长期使用中的坑与优化实践
第一个常见的坑是实例大小灵活性配置不当。预留实例默认开启了实例大小灵活性,同一系列的虚拟机之间可以互相抵扣,比如买了D4s的预留,实际跑的是两台D2s,折扣会自动按比例分摊。但如果业务迁移到了不同系列,比如从D系列换成E系列,预留就直接闲置了。所以规划虚拟机规格时尽量保持在同一系列内做伸缩,规格调整前先评估预留的匹配情况。
第二个坑是忽略预留的到期时间。预留到期后不会自动续费,资源会自动回落到按需计费,账单会突然上涨。建议在企业内部建立预留台账,记录每笔预留的到期日、规格和数量,提前一到两个月评估续购。Azure也支持设置预留到期前的提醒通知,通过预算告警或自动化脚本来监控。
# 查询当前账户下所有预留实例的状态与到期时间
az reservations reservation list \
--query "[].{name:displayName, qty:quantity, sku:sku.name, expiry:expiryDate, state:state}" \
--output table
# 将预留作用域从单订阅改为共享
az reservations reservation update \
--reservation-id "e5b3a1c2-9d4f-4e8a-b6c7-1f2d3e4f5a6b" \
--applied-scope-type Shared第三个实践建议是分层组合策略。把全年稳定运行的部分用三年期预留覆盖,略有波动的部分用一年期预留或节约计划覆盖,峰值部分保留按需弹性。这种分层方式既锁住了最大头的基础成本,又保留了应对业务波动的空间。根据实践反馈,一个合理分层的云环境,计算资源的整体成本可以比纯按需模式降低四到六成,而扩容能力完全不受影响。
最后提醒一点,预留实例并不适合所有资源类型。对于经常需要更换区域、频繁做架构调整的早期项目,或者负载模式还没稳定下来的新业务,贸然买三年预留风险不小。比较稳妥的做法是新业务先跑三个月按需,等负载模式清晰后再做预留决策。云成本优化从来不是一锤子买卖,而是需要持续观察和调整的长期工作。