cloudrun(或 knative)上的简单 HelloWorld 应用程序似乎太慢

Simple HelloWorld app on cloudrun (or knative) seems too slow

我在 Google Cloud Run 上部署了一个示例 HelloWorld 应用程序,它基本上是 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. 这可能是一个意外的错误吗?这是一个最终会解决的技术难题吗?或者也许没什么问题,只是 k-native?

  2. 的 SLA
  3. 如果Google Cloud Runand/ork-native没问题的话,我的API调用这里主要的耗时因素是什么?我很想学习这个机制。


其他详细信息:

WebPageTest 来自 Seoul/Asia(预热时间):

WebPageTest 来自 Chicago/US(预热时间):


云 运行 产品经理 Steren 的回答

We have detected high latency when calling Cloud Run services from some particular regions in the world. Sadly, Seoul seems to be one of them.

[更新:这个人在他所在的地区有网络问题。我从西雅图测试了他的端点,没有任何问题。详情在下方评论。]

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

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

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

哪些因素对您来说是不同的?

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

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

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

(这里是 Cloud 运行 产品经理)

我们检测到从世界某些特定地区调用 Cloud 运行 服务时存在高延迟。可悲的是,首尔似乎是其中之一。

我们会将其明确捕获为 Known issue and we are working on fixing this before General Availability. Feel free to open a new issue in our public issue tracker