Firebase 云函数幂等性问题

Firebase 云函数幂等性问题,firebase,google-cloud-functions,Firebase,Google Cloud Functions,我已经实现了context.eventId,但是现在我遇到了以下问题。显然,我并不期望调用会以相同的顺序触发,甚至每个动作只触发一次,但是,同样的事件发生在3次10秒之间似乎很糟糕 第一次触发时间为17:07:33( 17:07:43第二次触发(10秒后) 第三次触发时间为17:07:54(11秒后) 在触发三次(相隔10秒)的同一事件之间其他事务也发生过,因此,当它第一次触发时,它保存了eventId,然后它丢失了它,因为发生了另一个事件。10秒后,同一事件再次触发,这显然没有标记为重复,因为

我已经实现了
context.eventId
,但是现在我遇到了以下问题。显然,我并不期望调用会以相同的顺序触发,甚至每个动作只触发一次,但是,同样的事件发生在3次10秒之间似乎很糟糕

  • 第一次触发时间为17:07:33(
  • 17:07:43第二次触发(10秒后)
  • 第三次触发时间为17:07:54(11秒后)
  • 在触发三次(相隔10秒)的同一事件之间其他事务也发生过,因此,当它第一次触发时,它保存了
    eventId
    ,然后它丢失了它,因为发生了另一个事件。10秒后,同一事件再次触发,这显然没有标记为重复,因为
    lastEventId
    已被以前的事务覆盖(这发生在10秒钟的间隙内)

    这怎么可能?我们怎么才能避免?处理它们只需约150毫秒,因此它不是一个大函数文件,在冷启动期间需要大量时间。它缓存了全局变量(firestore),它对我在某些函数上使用的变量进行延迟加载。总体而言,它是一个轻函数文件。同一文件中只有250行代码和9个函数


    云函数为后台函数的执行提供了至少一次的保证。这意味着一个函数可以在每个事件中执行多次。虽然这并不常见,但这只是多台机器必须异步协调和通信时可伸缩系统处理潜在错误的方式。

    如果对事件重复函数调用对您的函数有问题,您需要以幂等的方式编写函数。您可以进一步了解,然后阅读


    无法避免的总体问题是计算机科学中的呼叫。您可以阅读相关内容以更好地理解更大的问题。基本上,所有运行云功能的计算机系统无法始终100%可靠地相互通信(由于错误和数据丢失),因此重试是确保函数至少执行一次的关键,这总比不执行要好。

    嗨,道格!我完全理解你的观点。我只是想弄清楚如何处理它,因为当两次或多次执行之间存在如此大的差距时,
    lastEventId
    解决方案不起作用。这
    eventId将被下一个事件覆盖,在第一个事件的第二个触发器完成时,它仍将被处理,因为lastEventId实际上不是“最后一个”我在事务中又执行了一次读取操作,将文档本身标记为已处理,而不是保留最后一个事件或将其缓存在全局数组中