Google App Engine-首次请求很慢

时间:2019-04-17 11:24:44

标签: php google-app-engine amp-html

我对Google App Engine有疑问。我知道第一个请求将比第二个请求花费更长的时间,因为实例是如何缩放的。但就我而言,差异非常大。我没有手动缩放功能,只有一个标准的自动缩放功能,我想对应该做的事情提出一些建议。

这是我的情况: 我有一个电子商务网站的AMP项目(https://amp.dev/)。因此,我没有任何我可以设置Google App Engine建议的预热请求的静态URL。网址是这样的:amp.store/product/{productname},所以{productname}是动态的,我有1000多种产品,并且不能向那些网址发送请求,只是为了让我的实例始终处于活动状态。

app.yaml:

runtime: php55
api_version: 1
service: amp-page

handlers:
- url: .*
  script: main.php

skip_files:....


当我尝试使用Google的PageSpeed Insights时,我会在第一次尝试时遇到此错误:

  

灯塔返回了错误:ERRORED_DOCUMENT_REQUEST。灯塔可以   无法可靠地加载请求的页面。检查您是否正在测试   正确的URL,并且服务器对所有响应正确   要求。 (状态代码:500)

现在,当我经常得到 84/100(移动设备) 99/100(台式机)后,立即重试。

这是一个巨大的差异,这就是为什么我要问。它将解决手动缩放问题,还是有其他方法可以像第二次尝试一样使我的实例或请求更快?

谢谢!

enter image description here

2 个答案:

答案 0 :(得分:2)

要保持至少一个实例运行(即使没有流量),您要将 min_instances app.yaml scaling element设置为1

  

min_instances

     

可选。 App Engine要为其创建的最小实例数   此模块版本。这些实例在请求时提供流量   到达并继续为流量提供服务,即使其他实例   根据需要启动以处理流量。

     

指定一个介于0到1000之间的值。您可以将参数设置为该值   0以允许扩展到0个实例,以在没有请求时降低成本   被送达。请注意,您需要为实例数付费   指定他们是否正在接收流量。

     

重要:如果您使用PHP的App Engine SDK中的appcfg进行部署,则不能在 app.yaml 中使用此参数。代替,   按照Setting Autoscaling Parameters in the API Explorer或使用App Engine Admin API设置参数。

否则,自动缩放将关闭您的空闲实例,使下一个请求成为(长)加载请求。

旁注:您也可以configure warmup requests(创建URL的一部分,这不是任意的静态URL)可以进一步减少用户请求成为加载请求的机会。您无法完全消除它们-实例不能永远存在,并且预热请求并非100%有效,它们只是尽力而为的解决方案。

答案 1 :(得分:1)

一种选择是通过您的cron.yaml文件创建一个cron作业,该作业每隔X分钟请求一次已知页面,以确保您始终在运行一个实例。

在应用程序中创建一个处理程序,该处理程序执行php脚本并返回某种输出。并非数据库繁重的事情。可能像回声“ ok”一样简单;