我在 上部署了一个示例 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 毫秒,或多或少
所以我的问题如下:
它可能是一个意外的错误吗?这是一个最终会解决的技术难题吗?或者也许没有什么问题,它只是 SLA 的
k-native
?如果
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 服务时延迟较高。可悲的是,首尔似乎就是其中之一。