【问题标题】:Google App Engine manual scaling instance log littered with /_ah/start requestsGoogle App Engine 手动扩展实例日志中充斥着 /_ah/start 请求
【发布时间】:2017-01-09 20:46:19
【问题描述】:

我正在通过 Google App Engine 模块/服务提供静态网站。为了改善延迟,我配置了两个 B4 实例不断向上的手动扩展。虽然这通常可以正常工作,但该模块/服务的日志实际上充斥着 /_ah/start 请求。据我了解,这是一个预热请求,最初在实例启动时发送给它。这是我的 app.yaml:

runtime: python27
api_version: 1
threadsafe: true
module: site
default_expiration: "2d"
instance_class: B4
manual_scaling:
    instances: 2

handlers:
    -
        url: /proxy/vimeo
        script: site_main.app
        secure: always
    -
        url: /auth/vimeo\.html
        static_files: static/vimeo.html
        upload: static/vimeo.html
        secure: always
    -
        url: '/[^\.]*$'
        static_files: static/index.html
        upload: static/index.html
        secure: always
    -
        url: /assets/(.*)$
        static_files: static/assets/\1
        upload: static/.*
        secure: always
        expiration: "31d"
    -
        url: '/*'
        static_dir: static/
        secure: always
skip_files:
    - '^(.*/)?#.*#$'
    - '^(.*/)?.*~$'
    - '^(.*/)?.*\.py[co]$'
    - '^(.*/)?\..*$'
    - '^(.*/)?.*\.gz'

虽然我们设置了手动扩展的内存驻留实例,但我不明白为什么会经常发出这个请求。事实上,我喜欢认为每个正在服务的 Web 会话都有一个 /_ah/start 请求,这非常奇怪。有没有人有同样的经历?

【问题讨论】:

    标签: google-app-engine google-app-engine-python


    【解决方案1】:

    来自Startup

    每个模块实例都是为了响应启动请求而创建的,启动请求 是对 /_ah/start 的空 HTTP GET 请求。 App Engine 发送此 请求使实例存在;用户不能发送 请求 /_ah/start。手动和基本扩展实例必须响应 开始请求之前,他们可以处理另一个请求。开始 请求可用于两个目的:

    • 启动无限期运行的程序,不接受进一步的请求
    • 在实例接收额外流量之前对其进行初始化

    手动、基本和自动扩展实例启动 不同。当您启动手动扩展实例时,App Engine 立即向每个实例发送 /_ah/start 请求。当你 启动一个基本扩展模块的实例,App Engine 允许它 接受流量,但 /_ah/start 请求未发送到实例 直到它收到第一个用户请求。多重基本缩放 实例仅在必要时启动,以处理增加的 交通。自动伸缩实例没有收到任何 /_ah/start 请求。

    当实例使用 HTTP 响应 /_ah/start 请求时 状态码为 200-299 或 404,视为成功 已启动并可以处理其他请求。否则,App 引擎 终止实例。手动扩展实例重启 立即,而基本扩展实例仅在 服务流量所需的。

    因此收到此类请求是正常的,因为您选择了手动扩展,并且您的应用应该以某种方式回复它,以防止 GAE 重复请求(在重启您的实例后)。

    但由于您实际上并没有任何活动的应用程序代码,而且您提供的只是静态内容,您可以安全地返回默认(自动)缩放,不会发出 /_ah/start 请求。更改应该对响应时间没有任何影响 - 静态内容由 GAE 基础设施直接提供,就像 CDN 一样,甚至无需触及您正在运行的应用程序(实例配置很重要)。出于同样的原因,您也可以将实例类放到最便宜的类:B1。

    更新:

    实际上,app.yaml 内容确实表明您的应用中有一些活动代码:

        url: /proxy/vimeo
        script: site_main.app
    

    您应该有一个相应的site_main.py 文件。如果该代码的性能要求您保留当前的缩放/实例配置,只需将/_ah/start 请求的处理程序添加到该文件中,并使用 GAE 解释为成功的代码之一进行回复 - 这应该结束日志乱扔垃圾。

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 2019-04-26
      • 2020-03-15
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多