Fre*_*dyC 1 firebase google-cloud-functions
我已经看到了所有这些问题和资源,但都不能满足我的担忧。
如果一个函数被多次执行并且同时运行,我怎么知道另一个正在运行并安全地丢弃它?即使我eventId向 DB写入某处,在我设法写入此类信息之前,其他函数仍有可能运行。
使用 Firestore 事务可以帮助解决这个问题吗?如果我要基于eventId事务内部写入文档,那么在我释放“锁定”之前是否可以说任何其他功能将保持安全?
使用的方法.set对我来说是不可行的,因为某些函数正在为文档生成一个唯一的 ID,所以无论如何我最终都会多次编写这些 ID。其他一些功能非常复杂,可以同时生成(或者说转换)一堆文档。
尽管我喜欢云函数的整个想法,但我希望有更多针对此的成熟解决方案。为什么 Firebase 基本上不能做他们想从开发者那里得到的东西?他们可以写入eventId一些内部数据库并防止多次运行函数。强迫每个人自己处理它听起来真的很愚蠢。
幂等性是困难的,并且没有一种正确的方法来实现它。有很多选择,需要考虑不同的情况。最重要的是,并非所有函数都需要幂等,因此在所有实现上强制执行它既昂贵又没有必要。您必须根据函数的功能做出最佳判断。
请记住,幂等性与并行性不同。您无需担心一个函数被同一个事件同时调用两次。无需担心“锁定”任何东西以防止这种情况发生。您需要担心的是确保函数的第二次调用不会做任何超出第一次成功调用会做的不正确的事情。
对于大多数函数,只需记录特定事件 ID 成功发生就足够了。未来的调用可以简单地检查事件是否已被处理,如果是,则提前终止。您可以将其存储在任何您想要的地方。如果需要,请使用事务,以确保安全。您应该至少保留该记录几个小时。
请记住,执行多项工作的函数将越来越难以实现幂等,因为您可能必须记录每个工作阶段是否成功完成。鉴于难度不断增加,最好是一个函数只提交一个更改,然后将结果传递给另一个函数,可能是通过带有有效载荷的 pubsub 触发器来指示接下来会发生什么。
如您所见,这并不简单,您必须仔细考虑,以适合您系统要求的方式处理事情。
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |