使用 TaskQueue 和 Datastore 计算任务组完成时间

Figure out group of tasks completion time using TaskQueue and Datastore

我有一个推送任务队列,我的每个作业都包含多个类似的 TaskQueue 任务。这些任务中的每一个都需要不到一秒钟的时间才能完成,并且可以将新任务添加到队列中(它们也应该完成才能认为作业已完成)。任务结果写入 DataStore。

目标是了解作业何时完成,即它的所有任务都已完成。

写入非常频繁,我无法将结果存储在一个实体组中。对此有好的解决方法吗?

在类似的上下文中,我使用了基于内存缓存的方案,它没有像数据存储实体组那样显着的写入速率限制:

  • 每个作业都会获得一个与之关联的唯一内存缓存键,并将其传递给可能入队的每个后续执行任务
  • 每个执行任务都会使用当前时间戳更新与作业键对应的内存缓存值,并且还会将完成检查任务加入队列,延迟空闲超时值,如果超时值足够大以声明作业已完成。
  • 每个完成检查任务都会将作业键对应的内存缓存值与当前时间戳进行比较:
    • 如果增量小于空闲超时,则表示作业未完成(由于此完成检查任务已入队,因此执行了其他一些任务,因此其他一些完成检查任务在队列中)
    • 否则任务完成

注意:空闲超时应大于任务在队列中可能花费的最长时间。