【问题标题】:How solve High latency in app engine caused by "This request caused a new process to be started for your application..."?如何解决“此请求导致为您的应用程序启动新进程...”导致的应用程序引擎中的高延迟?
【发布时间】:2019-10-22 16:54:23
【问题描述】:

与标准环境应用引擎、python 3.7 和 cloud sql (Mysql) 配合使用的应用

检查日志时,有一些延迟非常高(超过 4 秒),而预期为 800 毫秒。所有这些日志都伴随着这条消息:

“此请求导致为您的应用程序启动一个新进程, 从而导致您的应用程序代码第一次被加载。 因此,与典型的请求相比,此请求可能需要更长的时间并使用更多的 CPU 申请您​​的申请。”

我知道当它指代一个新进程时,它指的是一个新实例的部署(因为我使用自动扩展)但是奇怪的是,在将这些日志与实例的部署进行比较时,在某些情况下它匹配但在其他人中则不然。

我的问题是,如何减少这些延迟?

应用引擎配置为:

runtime: python37
env: standard
instance_class: F1
handlers:
  - url: /static/(.*)
    static_files: static/\1
    require_matching_file: false
    upload: static/.*
  - url: /.*
    script: auto
    secure: always
  - url: .*
    script: auto
automatic_scaling:
  min_idle_instances: automatic
  max_idle_instances: automatic
  min_pending_latency: automatic
  max_pending_latency: automatic
network: {}

【问题讨论】:

  • 在没有看到详细的 Stackdriver 日志和 app.yaml 的情况下,此消息意味着您的应用的冷启动。您是否启用了自动缩放到零?用更多信息更新您的问题。
  • @JohnHanley 已编辑。在跟踪中我没有看到太多有用的信息,因为时间线仅在图表中显示一个延迟 > 3 秒的条,并且在信息中说 HTTP 方法是 POST 并且 HTTP 状态代码是 200
  • @ozo 你有没有弄明白这个?

标签: google-app-engine google-cloud-platform python-3.7


【解决方案1】:

正如您所注意到的,每当应用引擎需要为您的应用程序启动一个新实例时,这些较慢的请求就会发生,因为初始加载速度很慢(这些称为 "loading requests")。

但是,App Engine 确实提供了一种使用 "warmup" requests 的方法——基本上,是对您的应用程序的虚拟请求,以便在实际需要实例之前启动实例。这可以减少但不能消除影响用户的加载请求。

这可能会略微增加您的成本,但应该会减少加载请求延迟,因为这些虚拟请求将消耗启动新实例的成本。

在python 3.7运行时,你可以在app.yamlinbound_services指令中添加一个“warmup”元素:

inbound_services:
- warmup

这将向/_ah/warmup 发送请求,如果您愿意,您可以在其中执行实例所需的任何其他初始化(例如,启动数据库连接池)。

【讨论】:

    【解决方案2】:

    还有更多策略可以帮助您减少应用程序的延迟。

    您可以修改您的automatic_scaling options 以使用更适合您的应用的内容。

    您可以通过setting the appropriate Cache-Control header on your responses and set reasonable expiration times for static files 更好地管理您的带宽。

    以这种方式使用公共 Cache-Control 标头将允许代理服务器和您的客户端的浏览器在指定的时间段内缓存响应。

    您可以使用更大的实例类(例如 F2)来避免水平缩放如此频繁地发生。正如我从这个问题中了解到的那样,您的延迟主要是在部署新实例时增加的。

    您也可以enable concurrent requests 尽可能异步编写代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多