跳转至

自定义工作流

如何设计工作流

要设计好一个工作流,应该要考虑以下几个设计要点:

首先,就是要把业务抽象流程化。即将业务用精简的流程图的方式展现出来。对业务的深刻理解,才能抽象出业务流程,包括业务链路、关键节点和分支、异常和重试逻辑、是否需要持久化、是否需要外部输入信息。画出最优的业务流程图,是工作流设计中的首要,也是最重要的一个步骤。

然后,根据每个环节的具体功能和职责来确定工作流节点的具体内容,及其输入输出参数。工作流的功能应该尽量做到职责单一,每个流程只处理一个具体事项,这样更有利于节点的标准化和重用。

最后,工作流节点本身应该是无状态的,工作流的节点的输出仅仅取决于输入参数的配置。也就是说,对于同一组输入参数,不管何时以什么方式调用同一个工作流节点,其输出总是固定的。

工作流设计样例

为更好的说明工作流设计的流程,我们结合一个具体的视频处理案例来说明工作流设计的步骤、要点和注意事项等内容。

案例背景

假设我们接到某个业务的产品需求,它希望将用户上传的任意格式和尺寸的视频处理成9:16的竖屏比例以适合在移动手机上进行播放,并在视频左上角的位置打上图片水印以加强品牌印象,且提供高清(分辨率720*1280)和标清(分辨率576x1024)两路清晰度的 MP4 视频以供用户进行选择。

流程抽象

仔细分析产品需求,按照职责单一原则,我们可以划分以下几个必不可少的工作步骤,每个步骤的主要职能如下:

  • 视频尺寸裁剪 : 负责将用户上传的原始视频进行裁剪,处理成9:16的视频尺寸
  • 视频添加水印 : 负责在视频的固定位置增加指定的水印
  • 视频转码 : 对视频进行转码并生成期望分辨率的视频

提示

根据实际业务场景和需求不同,可能存在与本文所述不同的划分结果,这里仅采用一种较为通用的划分方案作为示例作为阐述。

根据这些工作步骤,我们可以抽象出如下图所示的业务流程。

因为 生成高清视频生成标清视频 的转码流程是两个相互独立无依赖的处理过程,可以并行执行以加快处理速度。因此,优化后的业务处理流程如下:

确定工作节点及参数

根据上述的流程分析,我们可以确定如下的工作节点:

视频尺寸裁剪

该节点负责将用户上传的原始视频进行裁剪,处理成9:16的视频尺寸。其输入参数为用户上传的源视频文件存放路径,输出参数为裁剪后的视频文件存放路径。为了使我们的节点更加具有通用性,我们将期望输出的裁剪后的比例参数作为该节点的一个配置参数。

参数 参数类别 参数类型 参数说明
输入视频文件地址 输入参数 string 用户上传的源视频文件存放路径
裁剪后视频文件地址 输出参数 string 裁剪后的视频文件存放路径
裁剪的目标视频比例* 配置参数 string 裁剪的目标视频比例,例如 9:16

提示

根据实际应用场景的不同,工作流节点参数可能会随着业务场景变化而变化。为了提高节点的复用性,可以尽量将处理环节的变量因素提取出来,作为输入参数或者配置参数暴露给节点外部进行配置。

类似的,我们也可以确定好 添加视频水印视频转码 节点的参数。

添加视频水印

参数 参数类别 参数类型 参数说明
输入视频文件地址 输入参数 string 裁剪后的视频文件存放路径
输入水印图片地址 输入参数 string 水印图片存放路径
水印图片的位置* 配置参数 string 水印图片添加位置,例如 top-left, bottom-right, top-right, bottom-left, center等
增加水印后的视频文件地址 输出参数 string 增加水印后的视频文件存放路径

视频转码

参数 参数类别 参数类型 参数说明
输入视频文件地址 输入参数 string 增加水印后的视频文件存放路径
输出分辨率 配置参数 string 待输出的视频分辨率, 高清(分辨率720*1280)和 标清(分辨率576x1024)
输出格式* 配置参数 string 待输出的视频格式,此处为 MP4
输出视频文件地址 输出参数 string 转码成特定清晰度后的视频文件存放路径

确定工作流及参数

确定好上述工作流节点之后,分析它们之间参数依赖关系和执行先后顺序,可以得出如下图所示的工作流。

工作流的输入参数和输出参数如下表所示:

参数 参数类别 参数类型 参数说明
输入视频文件地址 输入参数 string 用户上传的源视频文件存放路径
输入水印图片地址 输入参数 string 水印图片文件存放路径
输出高清视频文件 输出参数 string 转码后的高清 MP4 视频文件存放路径
输出标清视频文件 输出参数 string 转码后的标清 MP4 视频文件存放路径

提示

此处仅列出了本案例中工作流必要的一些参数,您还可以将其他工作流节点的输入参数或配置参数作为工作流的输入参数。

这样,一个基本的满足产品需求的工作流就设计完成了。在该工作流中,每一个节点都是以整个视频文件作为输入参数进行单独处理的,当视频文件很大时未能充分利用平台的算力资源,存在处理效率低下的问题。针对这种场景,可以采用类似大数据计算中的 Map-Reduce 的并行处理技术优化处理速度,请参考 并行处理 相关章节。

了解更多

至此,我们已经完成一个完整的工作流流程设计过程。如果您想了解更多关于自定义镜像的功能,请参考 自定义镜像 相关章节。