云服务的账单是很多技术负责人每个季度都要面对的难题,而在Azure的计费体系里,虚拟机的按需付费单价往往是整个账单中占比最高的部分。针对长期稳定运行的业务负载,微软提供了预留实例(Reserved VM Instances,简称RI)这种购买方式,用户承诺一年或三年的使用期限,就能获得明显的折扣。但折扣背后到底能省多少钱、性能是否会受到影响、买错了能不能退,这些问题如果不提前搞清楚,很容易花冤枉钱。本文结合一年的实际使用数据,详细拆解Azure预留实例的成本结构和性能表现。

预留实例的计费原理与实际折扣力度
首先要澄清一个常见误解:预留实例并不是一台预先分配好的物理或虚拟机器,它本质上是一种计费层面的折扣权益。你购买的其实是某个特定虚拟机系列在某个区域的用量额度,当区域内部署了匹配的虚拟机时,系统会自动按折扣价计费。这意味着即便你把虚拟机删掉重建,只要规格和区域匹配,折扣依然生效,灵活性比很多人想象中要高。
折扣力度与虚拟机系列和承诺期限直接相关。以常见的D系列通用型虚拟机为例,一年期预留实例在东亚区域的折扣通常在30%到40%之间,三年期则可以接近60%。Windows系统的虚拟机由于包含了授权费用,绝对金额节省更多。下面用一段Azure CLI命令来查询预留实例的报价,方便自己做横向对比:
# 查询指定区域的预留实例价格(以Standard_D4s_v5为例) az reservations estimate-price --vm-sku Standard_D4s_v5 \ --location eastasia --term P1Y --quantity 1 \ --reserved-resource-type VirtualMachines
需要特别注意的是,预留实例的计费匹配规则。默认情况下折扣按照区域匹配,如果你购买的是D系列在东亚区的预留,那么只有在东亚区运行的D系列同代虚拟机才能享受折扣。如果跨系列或跨区域部署,折扣不会自动生效,账单依然按需计价。建议在购买前用estimate-price接口做一次预估,确认业务实际运行的规格与购买计划完全一致。
一年使用成本实测:按需付费与预留实例对比
我们选取了一台运行内部管理系统的Standard_D4s_v5虚拟机(4核16GB),在东南亚区域连续运行十二个月,对比两种计费方式的实际支出。按需付费模式下,该规格每小时单价约为0.21美元,一个月不间断运行的成本大约在150美元左右,一年累计约1800美元。换成一年期预留实例后,加上折扣实际年支出约1150美元,节省幅度在36%上下,与官方标称的折扣基本吻合。
除了虚拟机本身的计算费用,还要关注关联成本的变化。预留实例折扣只作用于计算部分,虚拟机挂载的托管磁盘、公网IP、出站流量费都不在折扣范围内。在我们这台机器上,磁盘和带宽的年支出约420美元,这部分三年内不会有任何变化。所以评估整体节省率时要算总账,如果计算部分占比不高,整体节省率会被稀释。做一个简单的成本结构表格更直观:
| 成本项 | 按需付费(年) | 预留实例(年) | 节省比例 |
|---|---|---|---|
| 虚拟机计算费用 | 约1800美元 | 约1150美元 | 36% |
| 托管磁盘与存储 | 约320美元 | 约320美元 | 0% |
| 公网IP与流量 | 约100美元 | 约100美元 | 0% |
| 合计 | 约2220美元 | 约1570美元 | 约29% |
另外一个容易被忽视的点是计费粒度。预留实例按小时粒度匹配用量,如果虚拟机在某个小时内停机,这部分预留额度就被浪费了。因此对于每天定时开关机的开发测试环境,预留实例的利用率可能远低于预期,这类场景更适合考虑Azure的节省计划或者 spotted虚拟机方案,成本效益会更好。
预留实例下的性能表现是否打折扣
不少运维同学担心,打了折的虚拟机在资源分配上会不会被降级。从底层机制来看,这种担心没有必要。预留实例只改变账单金额,虚拟机仍然运行在完全相同的硬件池中,与其他按需付费的实例共享同样的物理主机和网络设施。我们在购买预留前后分别做了基准测试,结果可以佐证这一点。
测试使用UnixBench和fio两个工具,分别在购买预留实例前后各采集三轮数据。CPU单项得分差异控制在2%以内,属于正常的系统波动范围;磁盘的4K随机读写IOPS稳定在标称的5000左右,顺序吞吐也维持在190MB/s上下,与折扣前没有可观测的差距。测试命令如下,有条件的读者可以自行验证:
# 磁盘4K随机写性能测试
fio --name=randwrite --ioengine=libaio --rw=randwrite \
--bs=4k --numjobs=4 --iodepth=32 --runtime=60 \
--group_reporting --filename=/dev/sdc
# CPU综合性能测试
yum install -y unixbench
Run --cpu 4
需要提醒的是,性能波动的真正来源往往是虚拟机的宿主机代际不同,而不是计费方式。同一规格在不同时间创建,可能落在不同批次的硬件上,性能存在百分之几的差异属于正常现象。如果对性能一致性要求极高,可以考虑启用超线程隔离的规格或者使用专用主机方案,但这与是否购买预留实例无关。
购买策略与常见误区规避
预留实例一旦购买便进入计费周期,虽然支持一定的退款和换购,但规则比较严格。一年期预留实例每个订单的退款和换购总额度不能超过五万美元,超出部分无法退回。换购时新旧实例的按比例折算逻辑也容易出错,建议在购买前充分确认需求。范围设置上,预留实例可以绑定到单个资源组、单个订阅或者共享范围,共享范围的匹配优先级最低但灵活性最高,适合虚拟机分布在不同订阅的团队。
在决定购买之前,建议先用成本管理门户查看过去三个月的虚拟机用量报告,筛选出每月运行时长超过700小时且规格稳定的实例,这些是最适合买预留的候选对象。对于负载波动大的业务,先评估节省计划(Savings Plan)这种更灵活的方案,它按整体消费承诺打折,不锁定具体规格,虽然折扣略低但容错性更好。两者也可以组合使用,把稳定负载交给预留实例,弹性负载交给节省计划,整体成本结构会更加健康。
总结这一年的使用体验,Azure预留实例在成本上的收益是实打实的,只要业务负载稳定,一年下来节省三成左右的开支并不困难,性能上也没有任何妥协。关键在于购买前的评估是否细致,把运行时长、规格匹配、范围设置这几件事核对清楚,就能放心地锁定折扣,让每一分云支出都花得更值。