在 google 云指标资源管理器中测量冷启动时间
Measuring cold start time in google cloud metrics explorer
我们正在努力 optimizations 以减少我们的 firebase 云函数的冷启动时间。因此,我们想比较实施这些更改前后的执行时间。
在 google 云指标资源管理器中是否有可靠的方法来测量云函数的冷启动时间?
我能找到的最接近的指标是执行时间,但不清楚这是否包括在 运行 函数之前加载依赖项所需的时间。
我认为您发现的内容不包括冷启动时间。我认为在空的 https 触发的云函数中计算 execution start
和 execution finish
之间的差异更准确。这样,差异将严格是冷启动时间。
我不知道有什么方法可以系统地计算它。这是因为冷启动与函数本身无关。这只是托管函数的服务器中的初始化操作。这意味着对于所有意图和目的,该函数甚至在初始化之前都不存在,因此无法访问冷启动开始时的时间戳。
我想您必须手动执行此操作才能以某种方式获得平均值。
编辑 0:
也许您可以创建一个脚本,在调用 https 函数之前存储当前时间。然后在函数 returns 之后存储另一个时间戳,状态为 200。然后您只需计算 2 个时间戳之间的差异。你得到一个相对纯粹的冷启动时间。
编辑1:
如果您的问题仅涉及云功能,您应该考虑完全绕过冷启动(我们一直在这样做)。我们通过在 Cloud Scheduler 上安排 Cron 作业来做到这一点。这是使我们的登录令牌生成器保持“温暖”的 https 函数。它模拟用户每 30 秒请求一次登录令牌,但会立即删除该令牌。你可以做类似的事情。
Cloud Scheduler 中 return 状态 200 非常重要(无论发生什么情况)。我们不希望该函数 return 任何错误代码,因为这将终止 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');
})
})
您可以检查所有 Firebase Database Performance 使用情况,并使用多个选项来选择衡量这一点,并概述每个选项提供的功能。但重点关注的是云监控段落的最后一部分。
The steps for setting up Cloud Monitoring are described in Monitor Database Usage.
如果您继续阅读此页面,可以使用云监控概述您可以使用的指标,这可以帮助您浏览列表,您可以在下一页找到 Monitor 数据库Usage. This page also includes more details of the mentioned options you have to measure the performance of firebase 最后,在 Cloud Monitoring section there is a link to a list of all the metrics 你可以使用,通过它我认为最接近你的具体情况根据其描述,它是 instance/cpu/scheduler_wait_time
:
Wait time is the time a vCPU is ready to run, but unexpectedly not
scheduled to run. The wait time returned here is the accumulated value
for all vCPUs. The time interval for which the value was measured is
returned by Monitoring in whole seconds as start_time and end_time.
This metric is only available for VMs that belong to the e2 family or
to overcommitted VMs on sole-tenant nodes. Sampled every 60 seconds.
After sampling, data is not visible for up to 240 seconds.
instance_name: The name of the VM instance.
随意浏览它们并选择满足您需求的指标,我发现其他指标也对您的情况有帮助。
我们正在努力 optimizations 以减少我们的 firebase 云函数的冷启动时间。因此,我们想比较实施这些更改前后的执行时间。
在 google 云指标资源管理器中是否有可靠的方法来测量云函数的冷启动时间?
我能找到的最接近的指标是执行时间,但不清楚这是否包括在 运行 函数之前加载依赖项所需的时间。
我认为您发现的内容不包括冷启动时间。我认为在空的 https 触发的云函数中计算 execution start
和 execution finish
之间的差异更准确。这样,差异将严格是冷启动时间。
我不知道有什么方法可以系统地计算它。这是因为冷启动与函数本身无关。这只是托管函数的服务器中的初始化操作。这意味着对于所有意图和目的,该函数甚至在初始化之前都不存在,因此无法访问冷启动开始时的时间戳。
我想您必须手动执行此操作才能以某种方式获得平均值。
编辑 0:
也许您可以创建一个脚本,在调用 https 函数之前存储当前时间。然后在函数 returns 之后存储另一个时间戳,状态为 200。然后您只需计算 2 个时间戳之间的差异。你得到一个相对纯粹的冷启动时间。
编辑1:
如果您的问题仅涉及云功能,您应该考虑完全绕过冷启动(我们一直在这样做)。我们通过在 Cloud Scheduler 上安排 Cron 作业来做到这一点。这是使我们的登录令牌生成器保持“温暖”的 https 函数。它模拟用户每 30 秒请求一次登录令牌,但会立即删除该令牌。你可以做类似的事情。
Cloud Scheduler 中 return 状态 200 非常重要(无论发生什么情况)。我们不希望该函数 return 任何错误代码,因为这将终止 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');
})
})
您可以检查所有 Firebase Database Performance 使用情况,并使用多个选项来选择衡量这一点,并概述每个选项提供的功能。但重点关注的是云监控段落的最后一部分。
The steps for setting up Cloud Monitoring are described in Monitor Database Usage.
如果您继续阅读此页面,可以使用云监控概述您可以使用的指标,这可以帮助您浏览列表,您可以在下一页找到 Monitor 数据库Usage. This page also includes more details of the mentioned options you have to measure the performance of firebase 最后,在 Cloud Monitoring section there is a link to a list of all the metrics 你可以使用,通过它我认为最接近你的具体情况根据其描述,它是 instance/cpu/scheduler_wait_time
:
Wait time is the time a vCPU is ready to run, but unexpectedly not scheduled to run. The wait time returned here is the accumulated value for all vCPUs. The time interval for which the value was measured is returned by Monitoring in whole seconds as start_time and end_time. This metric is only available for VMs that belong to the e2 family or to overcommitted VMs on sole-tenant nodes. Sampled every 60 seconds. After sampling, data is not visible for up to 240 seconds. instance_name: The name of the VM instance.
随意浏览它们并选择满足您需求的指标,我发现其他指标也对您的情况有帮助。