本方案演示了如何使用函数工作流和函数计算批量处理 OSS Bucket 下的图片文件。该流程包含以下步骤:
- 调用函数任务列举 OSS 某路径下的图片文件,返回文件列表。
- 并行处理步骤一返回的所有文件,对每一个图片串行做如下处理:
- 调用函数任务做缩放处理,处理结果存入 OSS。
- 调用函数任务做人脸识别,并标注人脸,将标注后的文件存入 OSS。
- 判断是否还有更多文件,如是,则继续步骤一,否则结束流程。
- 支持长时间运行流程。由于将流程分解为多个步骤,只需要确保每个步骤能够在函数计算时间限制(10分钟)内完成即可,流程总时长限制为一年。
- 并发处理能力。依赖于 FnF 的并行调度能力和函数计算的自动扩展能力,可以对数据并行处理。
- 高可靠性和高容错性。由于涉及分布式操作(读取和写入 OSS 数据,执行函数等),各种异常(网络,硬件等)都可能导致步骤执行失败。利用 FnF 的失败重试和捕获功能,能够最大限度保证流程执行顺利完成。
- 更少的代码做更多的事。支持多种控制原语,例如顺序,分支,并行等,尽量减少业务中实现重复的编排代码。
- Serverless。 FnF 根据实际执行步骤转换个数收费,执行结束不再收费。免于管理硬件预算和扩展。
- 使用函数计算的定时触发器功能定时执行流程自动处理数据。例如,程序在某个小时上传的文件会存入 OSS Bucket 的相应路径下(2019-05-01T02),定时触发器在下个小时通过调用 FnF StartExecution API 执行流程,处理上个小时的数据。
- 对 OSS Bucket 下的对象(视频,图片,数据)处理,结果存入 OSS。
- 将文件存储(NAS)的文件转存至 OSS。
- 对日志服务(LogHub)数据处理(聚合,压缩等),结果存入 OSS。
-
使用Funcraft部署函数
fun deploy -t template.yml
-
使用阿里云 CLI 创建流程。使用控制台请参见文档。流程定义使用oss-flow.yaml。
aliyun fnf CreateFlow --Description "demo" --Type FDL --Name oss-image-process --Definition "$(<./flows/oss-flow.yaml)" --RoleArn acs:ram::account-id:role/fnf
-
使用阿里云 CLI 执行流程。使用控制台请参见文档。执行使用下面的输入格式。该输入将会处理
hangzhouhangzhou
的所有文件。aliyun fnf StartExecution --FlowName oss-image-process --Input '{"bucket": "hangzhouhangzhou", "prefix": ""}' --ExecutionName run1