我在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
和/或k-native
没问题,API调用的主要耗时因素是什么?我很想学习这种机制。
其他详细信息:
WebPageTest来自亚洲首尔(预热时间):
WebPageTest(来自美国芝加哥)(预热时间):
答案 0 :(得分:2)
[更新:此人所在地区存在网络问题。我没有问题地从西雅图测试了他的端点。详情请见下面的评论。]
在过去的几个月中,我一直在与Cloud Run一起工作。我已经部署了几个生产应用程序和数十个测试服务。我在西雅图,Cloud Run在us-central1中。我从来没有注意到延迟。实际上,我对容器启动的速度印象深刻。
对于我的一项服务,我看到到485ms第一个字节的冷启动时间。下次调用266ms,360ms。我的容器正在Internet上检查SSL证书(2)。响应时间非常好。
对于另一个服务是PHP网站,冷启动到第一个字节的时间是312ms,然后是94ms,112ms。
与您不同的因素有哪些?
增加分配给容器的内存。这会影响性能吗? Python / Flask不需要太多内存,我的容器通常为128 MB和256 MB。容器映像已加载到内存中,因此,如果您的容器过大,则现在可能剩下足够的内存,从而降低了性能。
Stackdriver日志向您显示什么?您可以看到容器启动,请求和容器终止。
答案 1 :(得分:0)
(此处为Cloud Run产品经理)
从世界上某些特定地区调用Cloud Run服务时,我们检测到高延迟。可悲的是,首尔似乎就是其中之一。
我们将明确地将其捕获为Known issue,并在正式发布之前进行修复。随时在我们的public issue tracker
中打开一个新期刊