我正在通过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请求,这非常奇怪。有没有人有同样的经历?
答案 0 :(得分: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 Engine 终止实例。手动缩放实例重新启动 立即,而基本缩放实例仅在重新启动时重新启动 提供交通所需。
因此,您选择手动扩展并且您的应用应以某种方式回复此请求以获取此类请求是正常的,以防止GAE重复请求(重新启动您的实例后)。
但是,由于您实际上没有任何有效的应用程序代码,并且您提供的所有内容都是静态内容,因此您可以安全地返回到没有/_ah/start
请求的默认(自动)扩展。这个更改应该对响应时间没有任何影响 - 静态内容直接由GAE infra提供,比如CDN,甚至没有触及正在运行的应用程序(实例配置很重要)。出于同样的原因,您也可以将实例类放到最便宜的一个:B1。
更新
实际上,app.yaml
内容确实表明了您应用中的一些有效代码:
url: /proxy/vimeo
script: site_main.app
您应该拥有相应的site_main.py
文件。如果该代码的性能要求您保持当前的扩展/实例配置,则只需将/_ah/start
请求的处理程序添加到该文件,并使用GAE解释为成功的代码之一进行回复 - 这应该结束垃圾乱扔垃圾。