Cloud Endpoints Framework 版本 2 不一致且无法解释的高延迟

Cloud Endpoints Framework Version 2 inconsistent and high unexplainable latency

我最近将我的应用程序从 Cloud Endpoints Frameworks 版本 1 迁移到版本 2(App Engine python 标准)。据推测,其中一个好处是减少了请求延迟。忽略启动后端实例的预热 and/or,似乎我在可观察的 logs/app 统计数据之外得到无法解释的延迟,从 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 个请求 api 通过 curl 间隔多秒。测试应用不应执行任何其他操作:

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 毫秒):

这是 1.028 秒请求的日志条目的一部分

这是过去一小时的实例延迟:

  1. 为什么我请求的实际延迟比日志和应用统计信息显示的延迟高很多?
  2. 这个额外的开销延迟是否高达 600 毫秒,这似乎完全不受我的控制,只是发出 google 云端点请求的预期部分?
  3. 为什么只处理一个实例和很少的传入请求时,这种延迟波动如此之大?

您的应用程序的性能问题可能是由于 API 管理功能 运行 在请求线程上,而不是在后台线程中。尝试在 app.yaml.

中设置 "threadsafe: true"

摆脱 API 管理就成功了。我根据@Codiak 对这个问题的回答尝试了这个:whosebug.com/questions/45585413/

进行此更改后,延迟变得更加一致并显着改善。

为了做到这一点,我基本上从 app.yaml:

中删除了这两行

ENDPOINTS_SERVICE_NAME:

ENDPOINTS_SERVICE_VERSION: 2018-05-05r0

我还从我的项目中删除了 [apiname]openapi.json。这也意味着我不再需要执行此处描述的许多步骤:

  1. https://cloud.google.com/endpoints/docs/frameworks/python/get-started-frameworks-python#deploy_configuration
  2. https://cloud.google.com/endpoints/docs/frameworks/python/get-started-frameworks-python#deploy_backend