【问题标题】:Google Cloud Endpoints slowerGoogle Cloud Endpoints 速度较慢
【发布时间】:2018-03-23 06:44:27
【问题描述】:

我们刚刚迁移到 google cloud endpoints v2 / java8,发现延迟上升了。我们经常在跟踪中看到这种请求:

https://servicecontrol.googleapis.com/v1/services/<myapi>.endpoints.<myappid>.cloud.goog:check

使用大约 14 毫秒。此外,不知何故,内存使用量上升了,我们的 B2 前端突然开始阻塞,并且经常延迟 10 秒,这可能是连接池没有正确完成的问题,但在以前的 endpoints-v1 和 java7 中不知何故不存在。 同时,我们看到每个实例报告了 0 个错误(这是不正确的,它一直在大约 10 到 30 秒后中止请求)并且我们无法获得任何堆栈跟踪来查看请求在哪里像以前一样中止。

杀死/重启实例会解决一段时间的10s问题,但这自然不是解决方案。

为了实现 v2 承诺的性能改进,是否需要执行任何步骤?

【问题讨论】:

  • 我发现了如何查看堆栈跟踪,基本上你必须在 GAE 日志中搜索,而不是在端点日志中搜索。以某种方式直接从端点页面到达那里会很好。

标签: google-app-engine google-cloud-endpoints google-cloud-endpoints-v2


【解决方案1】:

TL;DR - GCE 2.0 单独比 GCE 1.0 更快、更可靠,但不要使用 API 管理,否则您将返还所有这些收益,然后再返还一些收益。

在测试 GCE 2.0 时,我也遇到了严重的缓慢问题,我无法证明让我的用户遭受如此可怕的延迟下降是合理的,因此我着手确定发生了什么。

这是我的方法:

我使用 Endpoints 1.0、Endpoints 2.0 和 Endpoints 2.0 with API Management 设置了一个最小可行的 App Engine 应用程序,该应用程序仅包含一个简单的 API 调用,该调用返回服务器时间戳。您可以在此处查看所有这些代码:https://github.com/ubragg/cloud-endpoints-testing

我将其中的每一个都部署到了单独的 App Engine 应用中,并使用 API Explorer 在这些链接上测试了 API(因此您可以自己尝试):
GCE 1.0
GCE 2.0
@ 987654324@

结果? 以下是每个 API 上一系列快速连续请求的结果:

             GCE 1.0    GCE 2.0    GCE 2.0+AM
average       434 ms      80 ms        482 ms
median         90 ms      81 ms        527 ms
high         2503 ms      85 ms        723 ms
low            75 ms      73 ms        150 ms

如您所见,没有 AM 的 GCE 2.0 既快速又一致。即使是 GCE 1.0 通常也很快,但偶尔会出现一些麻烦的异常值。带有 AM 的 GCE 2.0 几乎总是慢得令人无法接受,只有在极少数情况下才会进入“可能可以接受”的范围。

请注意,所有这些时间都是从 API Explorer 报告的客户端角度来看的。以下是同一时间段内来自 App Engine 信息中心的相同请求的服务器报告平均值:

             GCE 1.0    GCE 2.0    GCE 2.0+AM
average        24 ms      14 ms        395 ms

所以底线是,如果您关心延迟,API 管理并不是一个真正的选择。如果您对如何在没有 API 管理的情况下运行 GCE 2.0 感到好奇,请确保遵循此处的任何说明:https://cloud.google.com/endpoints/docs/frameworks/python/adding-api-management

【讨论】:

  • 这个答案救了我。我疯了,想知道为什么我的 api 这么慢,从应用程序中删除 api 管理解决了所有问题。
【解决方案2】:

使用没有管理库的基本 API 框架(您提到的 14 毫秒调用是其中的一部分),您应该会得到一些改进的延迟。 v2 框架中的内存使用有所增加,因为它现在合并了以前是单独服务的代码。如果您不使用 API 管理,我建议您删除该库并查看它是否有帮助。它应该可以消除 14 毫秒的延迟并显着减少内存使用量,因为您不会加载那么多代码或数据。

【讨论】:

  • 你能告诉我没有 api 管理我会失去什么的文档吗?另外,示例文档提到应该使用 B4_1G 实例,这非常昂贵。这是否意味着现在只有大型项目才真正支持端点的使用,并且应该避免用于小项目?
  • 您会丢失 Cloud Console 的 Endpoints 选项卡、第三方身份验证和 API 密钥支持中的数据。我会先尝试一个普通的 B4 实例。如果这不起作用,我认为我们需要进行一些优化——不应该需要 B4_1G 实例。
猜你喜欢
  • 1970-01-01
  • 2018-12-18
  • 2023-02-05
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2017-01-05
  • 2019-05-30
  • 2013-12-14
相关资源
最近更新 更多