【问题标题】:Understanding instance hours on the Google Cloud Platform了解 Google Cloud Platform 上的实例小时数
【发布时间】:2019-01-22 02:17:19
【问题描述】:

在 Google Cloud Platform (GCP) 上,我的 Java 应用在标准应用引擎 (GAE) 上运行。昨天我部署了该应用程序。作为该应用程序的唯一用户(直到它上线),我注意到在发出第一个请求时启动时间(也称为“预热”)大约需要 15 到 30 秒。如果我继续每隔几秒发出请求,响应时间会很快(大约一秒或更短)。但是如果我在大约 10 秒后没有提出请求,下一个请求通常需要 15 到 30 秒才能返回。这告诉我 GAE 识别出超过 10 秒的空闲时间并决定终止实例。

这当然不好。即使应用上线,最初也只有少量用户,请求之间的时间肯定会超过 10 秒。

我决定在应用程序中添加一些代码来保持每个微服务的活力。我通过在任务队列中创建一个任务来做到这一点,该任务将调用一个方法,该方法反过来会对每个微服务进行 HTTP 调用。这些是每个服务中的虚拟方法,但它们迫使 Java 加载类。完成所有 HTTP 调用后,我将等待 5 秒,然后将另一个任务放入队列中并重复相同的过程。这行得通。我注意到我不再看到 15 到 30 秒的预热时间。

我在下午晚些时候启动了应用程序,让它运行一夜,看看第二天早上会有什么反应。第二天早上,我注意到反应很快,虽然没有以前那么快。但是大约一个小时后,当我突然收到可怕的“已达到配额”响应并且该应用不再可用时,我感到非常惊讶。

然后我检查了我的帐单,发现我已经支付了 1.50 美元。然而,我的预算设置为 100 美元。那么为什么会达到我的配额并且应用程序停止接受请求?毕竟,即使我达到了配额,我的预算仍然设置为 100 美元,并且最低警报阈值设置为 50%。

然后我查看了我的帐单并看到以下内容:

前端:2,857.24 分钟(1.03 美元) 后端:574.99 分钟(0.03 美元)

所以 2,857 小时大约是 47 小时。由于他们免费为您提供 28 小时,这意味着我需要支付大约 20 小时的费用。 20 乘以 0.05 美元大约是 1.00 美元,这就是我所看到的。

那么,当应用程序运行了大约 12 小时后,为什么我使用 47 小时呢?一个可能的原因是 GAE 启动了多个实例。不幸的是,我没有在 Instances 页面上查看它使用了多少个实例,因为它每天都会重置它,所以我不知道。

如果我的“保持活动”代码每 5 秒保持一次实例活动,为什么 GAE 还要费心启动另一个实例?我的意思是,以 5 秒为间隔的请求非常长。这绝不应该给 GAE 算法一些迹象,表明该实例正在被大量使用并需要启动另一个实例。

我决定停用我的“保持活动”代码并在 GAE 中进行设置,将实例数限制为 1,但我也选择将最小实例数设置为 1。我假设这将使实例保持活动状态并处理我所有的请求,并且每天 28 小时永远不会用完。还是我误解了这些实例时间的工作方式?

【问题讨论】:

标签: java google-app-engine google-cloud-platform


【解决方案1】:

要回答 47 实例小时的问题,控制实例使用成本的因素有几个:

1) 实例大小。较大的实例以最小实例的倍数计算 - 因此一个小时的 F2 与 2 小时的 F1 相同。

2) 如果您使用自动扩展进行扩展和缩减,有时如果您的请求突然激增,可以启动多个实例。关闭实例需要 15 分钟的空闲时间。

3) 每个服务都有自己的实例

因此,基本上,不要依赖您的流量模式来保持您的成本一致。如果需要更严格的控制,可以使用manually scaled instancesmax-instances configuration

至于您的配额问题,我们需要错误消息来查看您达到了哪个配额,没有“实例小时”配额,因此您可能会遇到其他问题。配额和预算是独立的概念,即使您的预算不受限制,一些配额仍然适用(除非您让我们通过请求提高它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2021-01-15
    相关资源
    最近更新 更多