云任务+云功能-重复执行

时间:2020-01-25 17:04:31

标签: google-cloud-platform google-cloud-functions google-cloud-tasks

我正在一起使用Google Cloud Tasks和Cloud Functions来并行执行很多任务。

  • 使用HTTP触发器部署Cloud Function。
  • 我正在一个队列中创建多个HTTP目标任务,以为多个不同的输入调用相同的Cloud Function。
  • 由Cloud Function完成的任务涉及调用HTTP API,这些API有时可能会失败并需要重试。因此,任务队列的maxAttempts = 10。
  • 此过程每天运行一次,并在30分钟左右的时间内生成约11000个任务。

在大多数情况下,它似乎运行良好,但是我看到几次意外的行为发生:有时,Cloud Tasks认为该函数失败并重试,即使该函数尚未完成运行,并最终成功。发生这种情况时,我会在队列的日志中看到此消息(该队列是使用--log-sampling-ratio=1.0创建的):

  • Cloud Tasks创建一个任务。
  • 尝试调度1。
  • 云功能执行1开始。
  • 云功能执行1崩溃。队列的日志显示尝试1失败,状态为“ UNAVAILABLE”,并且按预期尝试了调度2。
  • 云功能执行2开始。
  • 即使执行2尚未完成,队列的日志也显示调度尝试2失败并显示“ UNAVAILABLE”状态,然后尝试进行调度3。
  • 云功能执行3开始。
  • 云功能执行3的状态为200。
  • Cloud Function执行2的状态为200。

因此Cloud Function最终成功执行了2次。

我知道Cloud Tasks不能始终保证严格的一次执行,如文档中所述。但是,我仍然想确认是否会发生这种特殊情况,以及是否有任何方法可以防止这种情况发生。

1 个答案:

答案 0 :(得分:0)

在你的任务中定义:

tasksClient.createTask({ parent: queuePath, task, resource: { retryConfig: { maxAttempts: 1 } } })

我在这里找到它:doc