我最近将我的应用程序从 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
这是通过 curl 向 API 发出的 3 个请求,间隔数秒。测试应用不应该做任何其他事情:
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 毫秒的额外开销延迟,这似乎完全超出了我的控制,只是发出谷歌云端点请求的预期部分吗?
- 为什么当只处理一个实例和很少的传入请求时,这种延迟波动如此之大?