gpt4 book ai didi

firebase - 如何确保http Cloud Function调用的并发性一次只有一个

转载 作者:行者123 更新时间:2023-12-02 20:15:37 30 4
gpt4 key购买 nike

我已经设置了一个 Http Cloud Function 作为预订系统的后端。此函数从 Cloud Firestore 访问数据,检索现有的预订时间并检查预订是否与现有时间重叠。如果只能触发请求的一个并发实例,那么这不会有问题,但是我注意到,当同时从多个源请求同一函数时,该函数将以某种基于并行的方式运行这些多个请求在我的日志上。

下面是我的函数的片段:

exports = module.exports = functions.https.onCall(async (data, context) => {
const { stand_id, user_id, reservation } = data;
const isReservationValid = await checkAvailability(reservation, stand_id);

if (!isReservationValid) {
throw new functions.https.HttpsError('aborted', 'Errr');
}

return await createReservation(stand_id, user_id, reservation);
});

如果我调用这个函数并传入相同的stand_id,并且重叠的保留时间,就会出现问题,我注意到该函数不会等待第一个被调用的函数完成,然后再开始后续函数请求。

有什么办法可以更好地解决这个问题吗?或者有什么解决方法吗?或者我只是误解了下面的文档?: Doc screenshot

最佳答案

您不能安排一次仅调用一次函数。您应该期望 Cloud Functions 会scale up multiple server instances to handle load ,然后在不再需要时缩小它们。这是 Cloud Functions 的一个重要功能,因为系统绝对需要在负载下进行扩展。

您所指的文档说单个 Cloud Functions 实例一次只能处理一个请求。但您需要首先阅读并理解该部分的第一段,因为这种行为永远不会改变:

Cloud Functions may start multiple function instances to scale your function up to meet the current load. These instances run in parallel, which results in having more than one parallel function execution.

如果您的函数需要在函数中写入 Firestore,并且这些函数可能写入同一文档,则需要使用事务来确保每个更新不会以导致数据丢失的方式相互覆盖损失。

关于firebase - 如何确保http Cloud Function调用的并发性一次只有一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462596/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com