PAYATHON 2026

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 延长十五分钟”是同一规则的两种说法,并非两项叠加收费。

备注:内容仅供参考。