Google App Engine instances 的实际计费方式是什么?
明确结论
这两种表述说的是同一项计费规则,并非两次独立收取十五分钟费用。
每次启动一个 instance,计费时间都会在正常使用时间的基础上增加十五分钟。官方文档将其称为 15-minute startup fee,另一处文档则按时间轴描述为“Billing 在关闭或最后一个 request 完成十五分钟后结束”。
可以近似理解为:
billable_instance_time = normal_billed_time + 15 minutes
不能将它理解成“先收取十五分钟 startup fee,再将 uptime Billing 额外延长十五分钟”。计费结束时间延长十五分钟,只是 startup fee 的计量方式,两者是等价的。
两种文档为什么看起来不同
第一种表述侧重收费项目:
instance uptime charge + 15-minute startup fee
第二种表述侧重计费时间窗口:
billing_start = instance_start_time
billing_end = lifecycle_end_time + 15 minutes
换算后,两者的结果相同。这里的 startup fee 并非一笔与 instance 时间无关的固定货币费用,而是十五分钟 instance usage 产生的附加计费量。
之所以称为 startup fee,是因为 instance 的创建、初始化和回收都会产生平台成本。在账单计算中,这项成本通过将计费结束时间延后十五分钟来体现。
resident instances 的计算方式
对于 resident instance,计费从 instance 启动时开始,在 backend 关闭十五分钟后结束。
例如:
10:00 instance 启动
11:00 backend 关闭
11:15 Billing 结束
计费时间为:
11:15 - 10:00 = 75 minutes
也就是约六十分钟运行时间,加上十五分钟附加计费时间。
dynamic instances 的计算方式
对于 dynamic instance,文档将生命周期结束点定义为“最后一个 request 处理完成的时间”,此后继续计费十五分钟。
例如:
10:00 instance 启动
10:08 最后一个 request 处理完成
10:23 Billing 结束
计费时间为:
10:23 - 10:00 = 23 minutes
这并不表示 instance 一定会在内存中实际运行到 10:23。平台可能已经将其回收,但计费窗口仍包含后续十五分钟。
如何估算 instance usage
可以按以下逻辑估算单个 instance 生命周期产生的计费时间:
from datetime import timedelta
STARTUP_FEE = timedelta(minutes=15)
def estimate_resident_billed_time(started_at, backend_stopped_at):
billing_ends_at = backend_stopped_at + STARTUP_FEE
return billing_ends_at - started_at
def estimate_dynamic_billed_time(started_at, last_request_finished_at):
billing_ends_at = last_request_finished_at + STARTUP_FEE
return billing_ends_at - started_at
多个 instance 需要分别计算,因为每个 instance 的启动生命周期都会产生十五分钟费用:
total_billed_time = sum(
instance.normal_billed_time + timedelta(minutes=15)
for instance in started_instances
)
连续运行一个 instance 两小时,与频繁创建八个短命 instance,产生的 instance usage 不一定相同。后者可能产生八次十五分钟附加计费:
8 × 15 minutes = 120 minutes
因此,频繁扩缩容可能增加费用。
注意事项
- 十五分钟通常按每次 instance 启动分别计算,并非按应用、版本或整个账单周期只计算一次。
- dynamic instance 的相关计费节点是最后一个 request 完成时间,resident instance 的相关节点则是 backend 关闭时间。
startup fee是计费术语,不表示 instance 在收费期间始终处于可处理请求的运行状态。- “按小时计费”不能直接理解为每次都向上取整到整小时。具体的计费单位、免费额度、instance class 价格和汇总精度,应以所用产品版本及当期官方价格表为准。
- 这些说明对应题目引用的旧版 GAE instance/backend 计费模型。App Engine 后续的产品形态、环境和计费政策可能已经调整,因此不能直接按这套规则推算当前项目账单。
简而言之,十五分钟是每个 instance 生命周期附加的计费时间。startup fee 和“Billing 延长十五分钟”是同一规则的两种说法,并非两项叠加收费。
备注:内容仅供参考。
