【问题标题】:Google App Engine take long time to process Request for the first time after Redeployment?Google App Engine 重新部署后第一次处理请求需要很长时间?
【发布时间】:2014-06-24 05:20:10
【问题描述】:

在我的 Google 应用引擎项目中,每次我重新部署项目并首次发出请求时,执行操作大约需要 1.5 秒。但在下一个请求中只需要 0.196 秒的时间。

例如: 当我在数据存储上查询以检索数据列表时,时间戳是:

1st Request(Around 1.5 sec)             2nd Request(Around 0.196 sec)
Start Time  1399448227701               Start Time  1399448369720
End Time    1399448229292               End Time    1399448369916

所以我的问题是为什么应用引擎在重新部署后第一次响应需要太多时间??

提前致谢!!!!

【问题讨论】:

    标签: google-app-engine startup


    【解决方案1】:

    它可能取决于几件事,但很可能与您的实例启动所需的时间相对应,这称为加载请求。实例启动后,下一个请求会更快。

    您在重新部署后会观察到这一点,但如果您的 App Engine 实例空闲时间过长(未收到请求),您也会看到相同的行为,然后它会关闭并且下一个请求将不得不等待要启动的新实例。

    您可以更改空闲时间设置以及其他一些内容,例如始终打开的实例数(常驻实例)等。微调这些是您的最佳选择。

    在这里查看documentation,它解释了很多。

    【讨论】:

    • 感谢您的快速回复。我还有一个疑问如何更改应用引擎实例的空闲时间设置?
    • 每次更新后,实例都会重启。您应该将该实例作为不同的版本进行测试,以便您知道它已经启动,然后如果您希望避免启动成本,则将其提升为默认值。
    • 在 App Engine 管理控制台的应用程序设置下,您可以将空闲实例设置更改为始终运行至少 1 个实例(默认情况下为自动),这样您就可以始终准备好一个实例立即处理请求。或者,您可以直接在 app.yaml 文件中使用模块配置(或 Python 以外的其他语言的等效文件)并将 idle_timeout 参数设置为更高的值。查看此文档以获取更多详细信息:developers.google.com/appengine/docs/python/modules
    • 是否可以使用 cronjobs 来保持实例处于活动状态并防止其在设置的最大时间限制内处于空闲状态?请指教。谢谢!
    • 您可以这样做,但更简单的事件是更改您的应用设置以使 1 个实例始终处于活动状态。
    【解决方案2】:

    我遇到了同样的问题。谷歌云人answered well this question here

    TL;DR:

    如果您有一个高频、大量实例流失的场景,并且冷启动时间很慢,那么常驻实例是最好的选择。是的,您最终会获得更多的总实例,但是让 GAE 处理驻留实例的扩展和缩减会更优雅地响应您随时间推移而发生的流量负载变化。

    如果您处理低频流量,偶尔会出现突发性,并且冷启动时间很慢,那么最好保留一个 always-cron 实例,因为您可以优雅地处理初始流量负载,总实例数较少。

    就我而言,我将以下内容添加到我的app.yaml 文件中,它按预期完成了工作:

    automatic_scaling:
      min_idle_instances: 1
    

    不过,我会监控账单。如果下一个账单看起来很疯狂,我会申请一个总是 CRON 的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多