0

我最近将我的应用程序从 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 毫秒):

1.028 秒请求的应用统计信息 这是 1.028 秒请求的日志条目的一部分 在此处输入图像描述

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

在此处输入图像描述

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

2 回答 2

1

摆脱 API 管理就成功了。我根据@Codiak 对这个问题的回答尝试了这个:stackoverflow.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
于 2020-04-11T18:46:17.280 回答
0

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

于 2017-12-28T00:08:28.860 回答