php - Google App Engine - 第一个请求很慢
问题描述
我有一个关于 Google App Engine 的问题。我知道由于实例的扩展方式,第一个请求将比第二个请求花费更长的时间。但就我而言,差异非常大。我没有手动缩放,只有标准的自动缩放,我想对我应该做什么提出一些建议。
这是我的情况:我有一个电子商务网站
的 AMP 项目 ( https://amp.dev/ )。所以我没有任何静态 URL 可以设置 Google App Engine 推荐的预热请求。url 是这样的:amp.store/product/{productname}
,所以它{productname}
是动态的,我有超过 1000 种产品,不能向这些 url 发送请求,只是为了让我的实例始终处于活动状态。
应用程序.yaml:
runtime: php55
api_version: 1
service: amp-page
handlers:
- url: .*
script: main.php
skip_files:....
当我PageSpeed Insights
从 Google 尝试时,我在第一次尝试时收到此错误:
Lighthouse 返回错误:ERRORED_DOCUMENT_REQUEST。Lighthouse 无法可靠地加载请求的页面。检查您是否正在测试正确的 URL,以及服务器是否正确响应所有请求。(状态码:500)
现在,当我在经常得到84/100(mobile) 99/100(desktop)之后再次尝试时。
这是一个巨大的差异,这就是我问的原因。它会解决手动缩放的问题,还是有任何其他方法可以像第二次尝试一样保持我的实例或请求更快?
谢谢!
解决方案
要保持至少一个实例运行(即使没有流量),您需要将min_instances app.yaml
缩放元素设置为1
:
min_instances
可选的。App Engine 为此模块版本创建的最小实例数。这些实例在请求到达时为流量提供服务,并且即使在根据需要启动其他实例来处理流量时也继续为流量提供服务。
指定一个介于 0 到 1000 之间的值。您可以将该参数设置为值 0 以允许扩展至 0 个实例以在没有请求提供服务时降低成本。请注意,无论是否接收流量,您都需要为指定的实例数量付费。
重要提示:如果您使用 App Engine SDK for PHP 中的 appcfg 进行部署,则不能在app.yaml中使用此参数。相反,请按照在 API Explorer 中设置自动缩放参数中所述或使用App Engine Admin API设置参数。
否则,自动缩放将关闭您的空闲实例,使下一个请求成为(长)加载请求。
旁注:您还可以配置预热请求(创建其 URL 是其中的一部分,它不是任意静态 URL)以进一步减少用户请求成为加载请求的机会。你不能完全消除它们——实例不会永远存在,预热请求也不是 100% 有效的,它们只是一个尽力而为的解决方案。
推荐阅读
- java - 将对象添加到 ArrayList,在 Java 中给出 NullPointerException
- javascript - 带有 react-redux 的摘要页面:容器或展示组件
- excel - 将我的 vba 代码的最终输出粘贴为值
- python - Django Dumpdata 文件包含调试日志
- sql-server - 更新命令运行但在 Dapper 中返回 -1
- prestashop - HTTP 200 - prestashop 安装期间的解析器错误 MACOSX
- swift - 线程跳过数据库 DataSnapshot (FireBase)
- ssl - 如何修复 etcd 集群“错误”tls:第一条记录看起来不像 TLS 握手“”
- spring-boot - 使用 id 生成器向数据库插入记录时,哪种方式更好?
- react-redux - 如何递归调用 redux saga watcher