【问题标题】:How to have app engine avoid cold starts?如何让应用引擎避免冷启动?
【发布时间】:2019-04-16 21:05:37
【问题描述】:

即使有实例已经在运行,我仍然在某些请求上遇到冷启动。

我认为 GAE 会在后台启动一些实例并将它们添加到活动实例池中,这些实例仅在实例启动后才为请求提供服务。不是这样吗?有没有办法配置 GAE 来做到这一点?

相反,一些请求似乎正在等待新实例的整个持续时间才能启动,这可能需要长达 10 秒,而仅使用现有实例会在几秒钟内为所有基准流量提供服务.

更新: 这是我的 app.yaml 配置:

runtime: nodejs10
env: standard
instance_class: F1
handlers:
  - url: '.*'
    script: auto
automatic_scaling:
  min_instances: 1
  max_instances: 3

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    你要找的是Warmup requests:

    预热请求是加载的一种特定类型的加载请求 应用程序代码提前到实例中,在任何活动之前 提出请求。手动或基本扩展实例不会收到 /_ah/warmup 请求。

    来自Configuring warmup requests

    将您的应用程序代码加载到新实例可能会导致loading requests。加载请求可能会导致请求延迟增加 对于您的用户,但您可以使用 warmup 来避免这种延迟 请求。预热请求将您的应用程序代码加载到新实例中 在任何实时请求到达该实例之前。

    不是 100% 完美 - 有一些限制,但它们是次优的。

    配置预热请求意味着:

    【讨论】:

    • 这样可以确保至少有 1 个实例准备就绪,这不等于 min_instances: 1 吗?
    • 嗯,不。它们是正交的。 min_instances: 1 表示至少应始终运行 1 个实例。但是您的问题是关于如何启动实例(例如何时需要第二个实例)。如果没有预热,则使用实际/实时请求来启动实例。因此,该请求将受到较长的响应时间(因为它包括实例启动时间)。当配置了预热请求时,会使用预热请求(不是实时请求)来启动实例,并且只有在该请求被回答 OK(即实例启动并运行)后才会向其发送实时请求。
    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多