【发布时间】:2018-05-10 04:46:06
【问题描述】:
我最近将我的应用从 Cloud Endpoints Frameworks 版本 1 迁移到版本 2(App Engine python 标准)。据说好处之一是减少了请求延迟。忽略预热和/或启动后端实例,似乎我在可观察的日志/应用程序统计数据之外得到了无法解释的延迟,从 300 毫秒到 2 秒不等。在观察了大约一周后,我终于回到了 echo 示例并部署到了一个测试应用程序,并注意到了完全相同的行为。
回显示例:https://cloud.google.com/endpoints/docs/frameworks/python/get-started-frameworks-python
这是我的 app.yaml 中的相关实例设置:
runtime: python27
env: standard
threadsafe: true
instance_class: B2
basic_scaling:
idle_timeout: 900s
max_instances: 2
这里有 3 个通过 curl 向 API 发出的请求,间隔数秒。测试应用不应该做任何其他事情:
MacBook-Pro$ curl -H "Content-Type: application/json" -X POST -d '{"content":"hello world"}' https://testtictactoe-164905.appspot.com/_ah/api/echo/v1/echo -w "@curl-format.txt"
{
"content": "hello world"
}
time_namelookup: 0.005
time_connect: 0.019
time_appconnect: 0.152
time_pretransfer: 0.152
time_redirect: 0.000
time_starttransfer: 0.263
--------
time_total: 0.263
MacBook-Pro$ curl -H "Content-Type: application/json" -X POST -d '{"content":"hello world"}' https://testtictactoe-164905.appspot.com/_ah/api/echo/v1/echo -w "@curl-format.txt"
{
"content": "hello world"
}
time_namelookup: 0.005
time_connect: 0.020
time_appconnect: 0.144
time_pretransfer: 0.144
time_redirect: 0.000
time_starttransfer: 0.613
--------
time_total: 0.613
MacBook-Pro$ curl -H "Content-Type: application/json" -X POST -d '{"content":"hello world"}' https://testtictactoe-164905.appspot.com/_ah/api/echo/v1/echo -w "@curl-format.txt"
{
"content": "hello world"
}
time_namelookup: 0.005
time_connect: 0.021
time_appconnect: 0.145
time_pretransfer: 0.145
time_redirect: 0.000
time_starttransfer: 1.028
--------
time_total: 1.028
这是第一个 0.263 秒请求的应用统计信息(总计 48 毫秒): 这是 0.263 秒请求的日志条目的一部分:
这是 1.028 秒请求的应用统计信息(总计 504 毫秒):
这是过去一小时的实例延迟:
- 为什么我的请求的实际延迟远高于日志和应用统计信息显示的延迟?
- 这种高达 600 毫秒的额外开销延迟是否似乎完全超出了我的控制,是否只是发出谷歌云端点请求的预期部分?
- 为什么当只处理一个实例和很少的传入请求时,这种延迟波动如此之大?
【问题讨论】:
-
我不确定您从哪里得到“据说其中一个好处是减少了请求延迟。” Endpoints v2 实际上做了更多的事情(API 管理功能),所以我不希望延迟减少。
-
通过阅读此链接得知:cloud.google.com/endpoints/docs/frameworks/legacy/v1/python/… 福利下的第一个要点是“减少请求延迟”
-
谢谢;我会在内部仔细检查。
-
您能否检查一下您是否在日志中看到这样的警告? “没有调度器线程, scheduler.run() 将被报告调用”
-
我刚刚向这个接口发出了 10 个 curl 命令,有一段时间没有使用过,第一个命令确实有警告:没有调度程序线程,report() 将调用 scheduler.run() ...)。随后的 9 个命令没有这个警告。 curl 报告的延迟范围从 2.148 秒到 0.687 秒。如果您想要我的日志的完整副本,请告诉我。
标签: google-app-engine-python google-cloud-endpoints-v2