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

时间:2019-05-29 02:10:07

标签: google-cloud-platform google-cloud-run knative-serving knative

我在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的SLA?

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


其他详细信息:

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

[更新:此人所在地区存在网络问题。我没有问题地从西雅图测试了他的端点。详情请见下面的评论。]

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

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

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

与您不同的因素有哪些?

  1. 您的集装箱图片有多大?检查容器注册表的大小。我的容器不到100 MB。容器越大,冷启动时间越长。
  2. Container Registry使用的存储桶在哪里?您希望存储桶位于us-central1或至少位于US中。宣布新的Cloud Run区域后,这将很快改变。
  3. 您要测试哪种类型的Internet连接?家庭或企业。无线或以太网连接?您在哪里测试?启动一个临时的Compute Engine实例,对Cloud Run重复测试并进行比较。这将从等式中删除您的ISP。

增加分配给容器的内存。这会影响性能吗? Python / Flask不需要太多内存,我的容器通常为128 MB和256 MB。容器映像已加载到内存中,因此,如果您的容器过大,则现在可能剩下足够的内存,从而降低了性能。

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

答案 1 :(得分:0)

(此处为Cloud Run产品经理)

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

我们将明确地将其捕获为Known issue,并在正式发布之前进行修复。随时在我们的public issue tracker

中打开一个新期刊