我有一个第 1 代 Firebase 云功能,它可以迭代用户集合并将消息排队以通过第 2 代 Firebase 任务发送给所述用户。我将任务升级到第 2 代,希望克服发送消息时的冷启动延迟。
作为基本测试,我为 Firebase 云任务配置了并发性,并对由该函数启动的 20 条消息测试进行了排队。观察到的结果是每秒发送 1 条消息。我本来希望所有 20 个都能很快交付,但也许我错过了一些东西。此时,第 2 代函数的处理速度并不比第 1 代函数快。
目前我的目标是nodejs 14,计划很快升级到18。所有 20 条消息均以每秒 1 条的速度发送,并且在此消息测试中没有遇到错误。
这是有问题的代码:
const {onTaskDispatched} = require("firebase-functions/v2/tasks");
const {logger} = require("firebase-functions/v2");
const client = require('twilio')(id, auth);
exports.sendMessage = onTaskDispatched({
//minInstances: 0,
memory: '1GiB',
concurrency: 50,
minBackoffSeconds: 10,
maxBackoffSeconds: 600,
rateLimits: {
maxConcurrentDispatches: 100,
}
}, async (req) => {
const message = req.data.message;
if (message) {
try {
const res = await client.messages.create(message);
return res.sid;
} catch (error) {
logger.warn(`Error sending text to: ${message.to} - ${error}`);
throw(error);
}
}
});
您需要将内存设置为至少 2gib:
请参阅此处的文档: https://cloud.google.com/functions/docs/configuring/concurrency
“设置大于 1 的并发值需要函数拥有 1 个或更多 vCPU - 请参阅默认内存和 vCPU 值的内存限制。”