0

我在 上部署了一个示例 HelloWorld 应用程序Google Cloud Run,基本上k-native,每次调用 API 最多需要 1.4 秒,以端到端的方式。应该是这样吗?

示例应用位于https://cloud.google.com/run/docs/quickstarts/build-and-deploy

我在本地主机上部署了相同的应用程序作为 docker 容器,端到端大约需要 22 毫秒。

GKE集群上的同一个应用程序端到端大约需要 150 毫秒。

import os

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    target = os.environ.get('TARGET', 'World')
    return 'Hello {}!\n'.format(target)

if __name__ == "__main__":
    app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))

我在 FaaS 方面有一点经验,我希望 API 调用会在我连续调用它们时变得更快。(如冷启动与热启动)

但无论我执行多少次命令,它都不会低于 1.4 秒。

我认为网络距离不是这里的主导因素。通过 ping 到 API 端点的往返时间只有 50 毫秒,或多或少

所以我的问题如下:

  1. 它可能是一个意外的错误吗?这是一个最终会解决的技术难题吗?或者也许没有什么问题,它只是 SLA 的k-native

  2. 如果Google Cloud Run和/或没有问题k-native,那么我的 API 调用的主要耗时因素是什么?我很想学习这个机制。


额外细节:

  • 我所在的位置:首尔/亚洲
  • 我的 Cloud Run 应用的区域:us-central1
  • 我正在测试的 Internet 连接类型:商业、有线
  • 应用的容器镜像大小:343.3MB
  • Container Registry 使用的存储桶位置:gcr.io

来自首尔/亚洲的WebPageTest(预热时间):

  • 内容类型:文本/html
  • 请求开始:0.44 秒
  • DNS 查找:249 毫秒
  • 初始连接:59 毫秒
  • SSL 协商:106 毫秒
  • 到第一个字节的时间:961 毫秒
  • 内容下载:2 毫秒

来自芝加哥/美国的WebPageTest (预热时间):

  • 内容类型:文本/html
  • 请求开始:0.171 秒
  • DNS 查找:41 毫秒
  • 初始连接:29 毫秒
  • SSL 协商:57 毫秒
  • 到第一个字节的时间:61 毫秒
  • 内容下载:3 毫秒

Cloud Run 产品经理 Steren 的回答

我们检测到从全球某些特定区域调用 Cloud Run 服务时延迟较高。可悲的是,首尔似乎就是其中之一。

4

2 回答 2

2

[更新:此人在他所在的地区有网络问题。我在西雅图测试了他的端点,没有任何问题。下面的评论中有详细信息。]

在过去的几个月里,我一直在使用 Cloud Run。我已经部署了几个生产应用程序和几十个测试服务。我在西雅图,Cloud Run 在 us-central1。我从来没有注意到延迟。实际上,容器启动的速度给我留下了深刻的印象。

对于我的一项服务,我看到第一个字节的冷启动时间为 485 毫秒。下一次调用 266ms,360ms。我的容器正在 Internet 上检查 SSL 证书 (2)。响应时间非常好。

对于另一个 PHP 网站服务,冷启动时第一个字节的时间是 312 毫秒,然后是 94 毫秒,112 毫秒。

对您来说可能有哪些不同的因素?

  1. 你的容器镜像有多大?检查 Container Registry 的大小。我的容器小于 100 MB。容器越大,冷启动时间越长。
  2. Container Registry 使用的存储桶位于何处?您希望存储桶位于 us-central1 或至少位于美国。随着新的 Cloud Run 区域的发布,这种情况很快就会改变。
  3. 您在什么类型的 Internet 连接下进行测试?家庭或企业。无线或以太网连接?您在世界上的哪个地方进行测试?启动一个临时 Compute Engine 实例,对 Cloud Run 重复测试并进行比较。这将从等式中删除您的 ISP。

增加分配给容器的内存。这会影响性能吗?Python/Flask 不需要太多内存,我的容器通常是 128 MB 和 256 MB。容器图像被加载到内存中,所以如果你有一个臃肿的容器,你现在可能有足够的内存来降低性能。

Stackdriver 日志向您展示了什么?您可以查看容器启动、请求和容器终止。

于 2019-05-29T02:59:39.523 回答
0

(此处为 Cloud Run 产品经理)

我们检测到从全球某些特定区域调用 Cloud Run 服务时延迟较高。可悲的是,首尔似乎就是其中之一。

我们将明确将此捕获为已知问题,并且我们正在努力在正式发布之前解决此问题。随时在我们的公共问题跟踪器中打开一个新问题

于 2019-06-03T21:26:23.653 回答