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 毫秒
所以我的问题如下:
这可能是一个意外的错误吗?这是一个最终会解决的技术难题吗?或者也许没什么问题,只是 k-native
?
的 SLA
如果Google Cloud Run
and/ork-native
没问题的话,我的API调用这里主要的耗时因素是什么?我很想学习这个机制。
其他详细信息:
- 我所在的位置:Seoul/Asia
- 我的 Cloud 运行 应用的区域:us-central1
- 我正在测试的互联网连接类型:商业、有线
- 应用的容器镜像大小:343.3MB
- Container Registry 使用的存储桶位置:gcr.io
WebPageTest 来自 Seoul/Asia(预热时间):
- 内容类型:text/html
- 请求开始:0.44 秒
- DNS 查找:249 毫秒
- 初始连接:59 毫秒
- SSL 协商:106 毫秒
- 第一个字节的时间:961 毫秒
- 内容下载:2 毫秒
WebPageTest 来自 Chicago/US(预热时间):
- 内容类型:text/html
- 请求开始:0.171 秒
- DNS 查找:41 毫秒
- 初始连接:29 毫秒
- SSL 协商:57 毫秒
- 第一个字节的时间:61 毫秒
- 内容下载:3 毫秒
云 运行 产品经理 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 毫秒。
哪些因素对您来说是不同的?
- 您的容器镜像有多大?检查 Container Registry 的大小。我的容器小于 100 MB。容器越大冷启动时间越长
- Container Registry 使用的存储桶位于何处?您希望存储桶位于 us-central1 或至少位于美国。当宣布新的 Cloud 运行 区域时,这种情况很快就会改变。
- 您在哪种类型的互联网连接下进行测试?居家或商务。无线或以太网连接?你在世界上的哪个地方进行测试?启动一个临时的 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
我在 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 毫秒
所以我的问题如下:
这可能是一个意外的错误吗?这是一个最终会解决的技术难题吗?或者也许没什么问题,只是
k-native
? 的 SLA
如果
Google Cloud Run
and/ork-native
没问题的话,我的API调用这里主要的耗时因素是什么?我很想学习这个机制。
其他详细信息:
- 我所在的位置:Seoul/Asia
- 我的 Cloud 运行 应用的区域:us-central1
- 我正在测试的互联网连接类型:商业、有线
- 应用的容器镜像大小:343.3MB
- Container Registry 使用的存储桶位置:gcr.io
WebPageTest 来自 Seoul/Asia(预热时间):
- 内容类型:text/html
- 请求开始:0.44 秒
- DNS 查找:249 毫秒
- 初始连接:59 毫秒
- SSL 协商:106 毫秒
- 第一个字节的时间:961 毫秒
- 内容下载:2 毫秒
WebPageTest 来自 Chicago/US(预热时间):
- 内容类型:text/html
- 请求开始:0.171 秒
- DNS 查找:41 毫秒
- 初始连接:29 毫秒
- SSL 协商:57 毫秒
- 第一个字节的时间:61 毫秒
- 内容下载:3 毫秒
云 运行 产品经理 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 毫秒。
哪些因素对您来说是不同的?
- 您的容器镜像有多大?检查 Container Registry 的大小。我的容器小于 100 MB。容器越大冷启动时间越长
- Container Registry 使用的存储桶位于何处?您希望存储桶位于 us-central1 或至少位于美国。当宣布新的 Cloud 运行 区域时,这种情况很快就会改变。
- 您在哪种类型的互联网连接下进行测试?居家或商务。无线或以太网连接?你在世界上的哪个地方进行测试?启动一个临时的 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