Google Cloud Functions执行时间和限制

时间:2019-08-15 09:01:07

标签: google-cloud-platform google-cloud-functions google-cloud-pubsub

我有一个非常简单的像素服务器,它可以检索客户端请求标头/参数/正文以将消息发布到pub / sub主题,并且它是用云函数编写的。在理想的情况下,该函数的执行时间不会超过5-10毫秒,最好的情况是少于5毫秒。

enter image description here

但是随后,在日志中,我看到一些函数调用耗时超过500毫秒

enter image description here

我试图了解云功能冷启动和自动扩展的行为以与成本相关联,因为如果10%的调用由于冷启动而运行的速度慢100倍,我们最终将多付50%的费用/自动缩放

enter image description here

社区中有人可以指出最佳实践来克服这种情况,从而在我们需要处理超过1亿个请求时由于冷启动而节省成本并提高性能吗?另外,由于我们的调用量(100M +),云功能/ pub-sub是否具有任何调用/扩展限制,因此我们需要开始考虑或考虑非服务器解决方案( wink ) ?

1 个答案:

答案 0 :(得分:3)

best practices中有一些技巧可以帮助您减少性能问题:

  • 删除未使用的依赖项

      

    如果您的函数导入模块,则这些模块的加载时间可能会增加冷启动期间的调用延迟。通过正确加载依赖项而不加载不使用的依赖项,可以减少此延迟以及部署功能所需的时间。

  • 使用全局变量在将来的调用中重用对象

      

    不能保证将Cloud Function的状态保留下来以备将来调用。但是,云功能通常会回收先前调用的执行环境。如果在全局范围内声明变量,则可以在后续调用中重用其值,而不必重新计算。

  • 对全局变量进行延迟初始化

      

    如果在全局范围内初始化变量,则初始化代码将始终通过冷启动调用执行,从而增加了函数的延迟。如果某些对象未在所有代码路径中使用,请考虑按需延迟初始化它们。

关于访问Google API的问题,从PUB / SUB获取消息时,最好在全局范围内创建Pub / Sub客户端对象。 public documentation中有更多信息和示例代码。

云功能还需要一些时间来扩展,因此,如果请求数量过多,这也可能会导致您遇到的高延迟。一种解决方法是,创建两个订阅了您的发布/订阅主题的Cloud Functions,或者为这两个功能创建两个单独的主题,然后将工作量分配到这两个中。