android - 为什么在 Google App Engine 中总是只有第一个请求才会出现 11 秒的延迟?
问题描述
我正在将我的Nodejs
示例应用程序部署到Google App Engine Flexible
env 并且当我使用表单中的 google 应用程序引擎 URLappspot.com
来访问我的 API 时,从我的 API 发送响应大约需要 11 秒mobile data
,但其他 API 以毫秒为单位发送响应。
此外,只有当我打开我的 android 应用程序并向服务器发送请求时才会发生时间延迟,之后所有请求都需要正常时间,而当我再次打开应用程序并向服务器发送请求时,延迟又会到来。
编辑- 我发现
当您的应用程序仍在启动或预热实例以服务请求时,这可能是一个原因,并且可以称为加载延迟。为避免此类情况,您可以实现健康检查处理程序,如就绪检查,以便您的应用程序仅在就绪时接收流量
这就是为什么我在我的日志中readiness
检查有时会执行检查1 sec
,有时会执行检查200 ms
谁能告诉我在预热我的实例时有什么问题,因为我不认为冷启动时间会导致这个问题。
编辑 2
我也试过设置min_num_instances: 2
,以便一旦加载至少我的 2 个实例将再次无法启动,但问题是延迟再次相同。
编辑 3
runtime: nodejs
#vm: true
env: flex
automatic_scaling:
min_num_instances: 2
max_num_instances: 3
编辑 4
我注意到一个奇怪的行为,当我使用这个应用程序数据包捕获来捕获流量时,所有 https 请求(如果我没有启用 SSL 代理)和所有 Http 请求都以毫秒为单位执行,而没有使用这个应用程序所有 Http/Https 请求需要 11-16 秒的延迟。
我不知道怎么做,但这里有任何证书问题吗?
编辑 5
下面我附加了 Network Profiler,延迟即将到来 15 秒
请帮忙
解决方案
取决于您使用的 App Engine 以及设置缩放的方式,如果您没有准备好的实例来处理请求,则始终存在加载时间。但是,如果您有准备检查以确保您的实例已准备好(并且不是针对请求冷启动),那么应该没有问题。
您能否在日志中找到加载请求或任何相应的慢速请求?如果不是,那么它可能是应用程序的问题。如果可能,不要在您的应用程序上调用此 API,而是从两个应用程序(一个已打开,一个未打开)执行此操作。因此,您从两个应用程序都拨打电话,如果您注意到已经打开的应用程序比另一个应用程序更快地得到响应,这意味着这是应用程序本身的问题。App Engine 无法确定您的应用程序是否已预先打开,因此任何差异都在客户端。
=== 附加信息 ===
在您的日志中,根本没有延迟。该请求进入 Google 并在几毫秒内得到处理。我确信有一些应用程序方面的东西。也许您的应用正在从其他导致延迟的来源构建请求 URL(第一个请求)?App Engine 不知道您的应用程序是否打开或打开后是否发送第一个请求,它无法根据它采取不同的行动。只要您的 App Engine 实例准备就绪并且可用,它就会以相同的方式处理您的请求,无论它是否是您在应用打开后的第一个请求。