Azure 批处理服务在作业完成时添加 webhook

Azure batch service add webhook on job completion

我已经为使用 ffmpeg 的媒体文件编码设置了批处理服务。每个作业可以包含多个任务,每个任务将编码一个文件。我使用特定于任务的资源和输出文件系统,因此批处理服务会自动从 blob 存储中获取和传送文件。

但是:我如何知道作业或任务已完成或失败? 由于这项工作可能需要很长时间——在低优先级节点上更是如此——我需要某种 webhook 或事件。持续轮询作业状态是不可行的。

我能想到的方案:

  1. 在运行ffmpeg命令后,连接一个curl命令。类似于:

"commandLine" : "/bin/bash -c "ffmpeg -i inputFile outputFile && curl https://my-webhook-receiver.org ""

从技术上讲它是可行的,但我担心时机问题。 curl 请求可能(?)在批处理服务将结果文件推送回 blob 存储之前完成。如果它是一个大文件,并且上传可能需要半分钟,我会在文件存在于输出容器之前得到通知。

  1. 使用 blob 存储事件系统。 这样做的好处是结果文件显然必须已经到达。但是,如果作业失败怎么办?它永远不会被触发...

  2. 批处理警报系统。您显然可以为某些批处理事件(例如任务完成)创建警报,您可以将其连接到一个操作组,最后一个网络钩子。这是正确的决定吗?感觉有点老套,不是使用这个系统的正确方法。

没有办法将 azure batch 与例如天蓝色事件网格直接? 让我的服务器知道编码文件已准备就绪的“正确”方式是什么?

有几种方法可以解决这个问题,尽管不可否认其中一些解决方案不是很优雅:

  1. 为每个任务创建一个 task dependency。依赖任务是调用 webhook 的任务。您可以使依赖任务被调用,即使它所依赖的任务因某些退出代码而失败。您还可以创建一个依赖于作业中所有任务的“合并任务”,它可以在一切完成时通知您。
  2. 改用job manager task。作业管理器通常用于监视工作流的进展并生成其他任务,因此您将能够查询任务完成的状态(成功或失败)并通过此任务或作业管理器生成的任务发送您的 webhook 命令。
  3. 在作业完成时使用 job release mechanisms 到 运行 操作。这不能解决您的 per-task 通知问题,但可以用作作业完成信号。