1

我们正在努力进行一些优化,以减少我们的 Firebase 云功能中的冷启动时间。因此,我们想比较这些更改实施前后的执行时间。

是否有可靠的方法来测量谷歌云指标资源管理器中云功能的冷启动时间?

我能找到的最接近的指标是执行时间,但不清楚这是否包括在运行函数之前加载依赖项所需的时间。

指标

4

2 回答 2

1

我认为您发现的内容不包括冷启动时间。我认为计算空的 https 触发的云函数execution start之间的差异更准确。execution finish这样,严格意义上的区别将是冷启动时间。

我不知道有一种方法可以系统地计算它。这是因为冷启动与函数本身无关。这只是托管该功能的服务器中的初始化操作。这意味着出于所有意图和目的,该函数甚至在初始化之前都不存在,因此无法访问冷启动开始时的时间戳。

我想您必须手动执行此操作才能以某种方式获得平均值。

编辑0:

也许您可以在调用 https 函数之前创建一个存储当前时间的脚本。然后在函数返回状态为 200 后立即存储另一个时间戳。然后您只需计算两个时间戳之间的差异。你得到一个相对纯净的冷启动时间。

编辑1:

如果您的问题仅涉及云功能,您应该考虑完全绕过冷启动(这是我们一直在做的)。我们通过在Cloud Scheduler上安排 Cron 作业来做到这一点。这是使我们的登录令牌生成器保持“温暖”的 https 函数。它模拟用户每 30 秒请求一次登录令牌,但它会立即删除该令牌。你可以做类似的事情。

在 Cloud Scheduler 中返回状态 200 非常重要(无论发生什么)。我们不希望函数返回任何错误代码,因为这将终止 Cron 作业。

exports.PreventColdStart = functions.https.onRequest((req,res) => {
 
  
 admin.firestore().collection(...).doc(...).set({...}).then(()=>{

  function sleep (time) {
    return new Promise((resolve) => setTimeout(resolve, time));
  }
  
  // Usage!
  sleep(500).then(() => {
    admin.firestore().collection(...).doc(...).delete().then(() => {
      res.status(200).send('Successfully deleted');

  }).catch((error) => {
    res.status(200).send('Did not delete');
  });

  });

 }).catch(()=>{
  res.status(200).send('Could not find document');

 })



})
于 2021-10-13T18:19:39.673 回答
1

您可以使用几个选项来检查所有Firebase 数据库性能使用情况,以选择衡量这一点并概述每个选项提供的功能。但重点是云监控段落的最后一部分。

监控数据库使用情况中介绍了设置 Cloud Monitoring 的步骤。

如果您继续阅读此页面,您可以使用 Cloud Monitoring 概述您可以使用的指标,这可以帮助您浏览可以在下一页中找到的列表,即Monitor Database Usage。此页面还包含您必须衡量 Firebase 性能的上述选项的更多详细信息,最后,在Cloud Monitoring部分中,有一个指向您可以使用的所有指标列表的链接,查看它我认为最接近您的具体情况是instance/cpu/scheduler_wait_time它的描述:

等待时间是 vCPU 准备好运行但意外未计划运行的时间。此处返回的等待时间是所有 vCPU 的累积值。Monitoring 以整秒为单位返回测量值的时间间隔,作为 start_time 和 end_time。此指标仅适用于属于 e2 系列的 VM 或单租户节点上过度使用的 VM。每 60 秒采样一次。采样后,最长 240 秒内数据不可见。instance_name:VM 实例的名称。

随意浏览它们并选择一个满足您需求的指标,我发现其他指标对您的情况也有帮助。

于 2021-10-18T21:12:41.610 回答