Serverless 工作流适用场景及最佳实践

简介: 简介 本文我们将围绕工作流话题,介绍: 什么是工作流,适用哪些场景? 阿里云的全托管工作流服务:Serverless 工作流 Serverless 工作流适用场景 Serverless 工作流编排函数计算的最佳实践 什么是工作流,适用哪些场景? 维基百科对工作流的定义是:对工作流程及其各操作步骤之间业务规则的抽象、概括描述。

简介

本文我们将围绕工作流话题,介绍:

  1. 什么是工作流,适用哪些场景?
  2. 阿里云的全托管工作流服务:Serverless 工作流
  3. Serverless 工作流适用场景
  4. Serverless 工作流编排函数计算的最佳实践

什么是工作流,适用哪些场景?

维基百科对工作流的定义是:对工作流程及其各操作步骤之间业务规则的抽象、概括描述。我们认为工作流的主要职责是:

  1. 保证结果一致性,提高容错性要求:对错误重试,捕获,执行回滚或补偿逻辑
  2. 为长时间运行的流程维护持久化状态,保证任务调度可靠性
  3. 控制逻辑和任务逻辑解耦:细化责任,便于管理、维护和扩展
  4. 流程控制中心化、可视化:增强进度可观测性,简化来自不同背景人群的交流
  5. 模板方式定义控制逻辑和任务依赖:减少重复工作,统一流程描述标准

工作流通常适用于有状态的(stateful),异步 (async),长时间执行(long running)等特性的业务场景。其中比较典型的场景包括:

  1. 视频,音频,图片处理工作流
  2. 订单、审批流程
  3. 数据处理流水线
  4. 自动化运维
  5. 机器学习流水线、基因测序工作流

常见的开源工作流服务软件如 Apache Airflow,Activiti,Flowable,Netflix Conductor 等提供了使用代码,DSL 或是 BPMN 这类标准的工作流描述方式,允许开发者自己搭建工作流服务。不同云服务厂商也提供了各自的工作流服务如 AWS Step Functions, AWS Simple Workflow Service,Azure Durable Functions。那么阿里云有没有一个全托管的工作流服务呢?下面的文章将为您介绍阿里云 Serverless 工作流,其适用场景和最佳实践。

Serverless 工作流 (原函数工作流 FnF)

如下面的胶片所示,Serverless 工作流是一个专注于提供分布式任务编排的全托管 Serverless 阿里云服务。它不仅有完善的工作流功能,也提供了和阿里云多个云服务丰富的原生集成。开发者可以将任务编写成函数计算的函数,构成完全 Serverless 的流程和任务,也可以将无法迁移到函数或者云上的任务继续在自己的 VPC 或是自建机房中运行,将编排和调度控制逻辑在云上执行。Serverless 的特性决定了工作流并行执行数可以弹性水平扩展,无需为工作流服务花费人力资源,仅按使用量付费,不为闲置资源付费。
image

场景 1 - 视频处理

视频处理场景通常涉及多个处理步骤如分片,合并,不同格式转码,不同的处理逻辑需要灵活低排列组合实现完成的视频处理业务,例如有些任务需要借助于函数计算或者 ECS 自建低成本转码,有些任务需要借助于阿里云媒体处理(MPS),点播 (VOD)实现敏感内容审核,CDN 刷新等。取决于原视频的时长,视频处理流程的时间通常也都以分钟,小时,甚至若干个小时为单位计算。这样长时间运行的业务需要可靠的状态维护,错误捕获和重试。视频处理通常在一天中有周期性的波峰波谷,或是突发的海量视频上传。Serverless 弹性伸缩和 Pay-as-you-go 的特性可以从视频处理吞吐量以及成本等角度更好地满足视频处理场景的需求。详细博客参考轻松构建基于 Serverless 架构的弹性高可用音视频处理系统
image

场景 2 - 数据处理流水线

离线大数据 ETL 流水线,海量 OSS 文件批量处理,超大 OSS 压缩包解压等场景通常有执行时间长,对弹性,成本要求高,对结果正确性有较严格要求,且有云服务事件触发或者定时触发的需求。Serverless 工作流最长可以支持执行时长 1 年的流程执行,Serverless 免运维,自动扩容缩容,自带错误重试(retry)和捕获(catch)机制。持久化的状态和消息保证数据处理流水线的最终一致性。通过 FC 的定时触发器也可以触发工作流的周期执行。详见博客使用函数工作流+函数计算轻松构建 ETL 离线数据处理系统。
image

场景 3 - 订单、审批流程

电商订单,出游行程订单等涉及支付,库存预留等关键业务对于数据一致性有极强的要求。在分布式微服务的框架下,任何接口调用都有失败的风险。订单的工作流程设计需要充分考虑各个步骤可能的失败,后果和响应的补偿逻辑。例如在一个涉及多个分布式支付的流程中,如果第三步支付失败,工作流程需要自动将已经扣款的前两部取消并完成退款。Serverless 工作流的 try/catch,持久化状态维护等特点帮助开发者简化 SAGA 模式的开发,实现分布式多步骤事务。审批流程有人工介入,审批网络不统一等场景特点,Serverless 工作流提供的任务分发至队列+回调功能可以帮助审批流程开发者轻松满足此类需求。
image

场景 4 - 自动化运维

生产环境的自动化运维工作流如 ECS 镜像,快照的构建,集群上下线机器需要可靠且灵活的逻辑描述能力。相比于描述依赖关系的 DAG (有向无环图)模型,Serverless 工作流提供了 FDL 这样更加强大和灵活的描述能力。定时触发,长时间执行,低成本和 100% 资源利用率也都是可以满足自动化运维场景中的常见需求。

image

场景 5 - 机器学习流水线

机器学习流水线设计算法开发,数据清洗,转化处理,模型训练,模型部署等多个步骤。生产环境中需要一个轻量的工作流引擎实现一个完整的 ML 反馈回路。Serverless Workflow 提供的人工介入能力,长时间执行和状态靠的特点可以很好地满足 ML 流水线。详见博客生产中的 Serverless 机器学习流水线
image

FC 函数编排最佳实践

这个段落我们将介绍函数计算(FC)异步任务编排的最佳实践。下图列出了 Serverless Workflow 结合 FC 的优势。

强化单个异步函数

需要澄清的是,工作流并非只适用于多个函数的编排,实际上任何一个需要状态观测(可查询),执行时间长,结果重要不允许消息丢失的场景,如下图的事件触发场景所示,即使整个逻辑只有一个 FC 函数,也推荐使用工作流强化,保证函数有足够的重试机会。另一个使用工作流来强化单函数的应用场景是使函数计算 HTTP 触发器能够支持异步调用,目前 FC HTTP 触发器仅限于同步调用。使用 HTTP FC 发起工作流(StartExecution)后即返回。使用另一个 HTTP FC 函数 (DescribeExecution) 达到了 HTTP 异步触发任务且可以使用 HTTP 查询的效果。
image

编排多个函数

下面的一系列图列举了编排多个函数常见的 4 种方式:

  • 方式 1:单体函数(Monolith functions): 整个流程在同一个进程中运行
    image
  • 方式 2:函数编排(Function orchestration): 整个流程由一个编排函数同步调用多个任务函数完成
    image
  • 方式 3:事件触发点对点调用(Choreography):没有中心化的控制器,每个任务负责异步触发下一个任务
    image
  • 方式 4:Serverless 工作流编排(Workflow orchestration): 由中心化的工作流服务调度不同函数
    image

下图是对于 4 种调用方式的对比分析。可以看到单体编排更适用于要求极低延迟,无状态 (stateless)的在线业务,逻辑相对简单,执行时间短的场景。FC 函数编排从维护上与微服务模型更加相似,更易于维护和多个团队协作,由于单函数的执行时间限制,同样不适用于长时间执行,也不适用于需要状态持久化 (stateful) 的流程。事件触发通过异步调用可以突破函数执行时长的限制,并且获得一定程度的状态持久化。然后持久化以及重试的程度并不能自定义,可观测性较低和开发成本偏高。对于长时间执行,需要状态维护,自定义重试等场景的关键流程,我们推荐用 Serverless 工作流的方式编排,获得最高的容错性,无限的执行时长,最优化的成本。

image

总结

本文我们简单介绍了工作流以及阿里云的工作流服务 Serverless Workflow。工作流适用于视频处理,数据处理流水线,订单、审批流程,自动化运维机器学习流水线等依赖工作流引擎的场景。使用工作流可以很好地补充完善单个 FC 异步函数的可靠性和可观测性。对于多个 FC 函数的编排,我们给出了 4 种不同的方法编排方式的最佳实践以及其对比分析,您可以根据实际场景选择编排方式。如果您的异步流程对正确性和持久化要求较高,执行时间较长 (分钟级别),关注异步任务的状态,我们推荐使用工作流编排 FC。如名字所示,全托管免运维,自动伸缩,100% 资源使用率,成本优化是 Serverless 解决方案的核心价值。

image

image

联系我们

如果您对工作流,函数计算,或者 Serverless 相关话题感兴趣欢迎加入我们的官网钉钉群交流、分享、讨论。
image

目录
相关文章
大林算法控制仿真实验(计控实验六simulink)
大林算法控制仿真实验(计控实验六simulink)
大林算法控制仿真实验(计控实验六simulink)
|
Kubernetes 大数据 调度
Airflow vs Argo Workflows:分布式任务调度系统的“华山论剑”
本文对比了Apache Airflow与Argo Workflows两大分布式任务调度系统。两者均支持复杂的DAG任务编排、社区支持及任务调度功能,且具备优秀的用户界面。Airflow以Python为核心语言,适合数据科学家使用,拥有丰富的Operator库和云服务集成能力;而Argo Workflows基于Kubernetes设计,支持YAML和Python双语定义工作流,具备轻量化、高性能并发调度的优势,并通过Kubernetes的RBAC机制实现多用户隔离。在大数据和AI场景中,Airflow擅长结合云厂商服务,Argo则更适配Kubernetes生态下的深度集成。
1539 34
|
9月前
|
人工智能 API 开发工具
Skills比MCP更重要?更省钱的多!Python大佬这观点老金测了一周终于懂了
加我进AI学习群,公众号右下角“联系方式”。文末有老金开源知识库·全免费。本文详解Claude Skills为何比MCP更轻量高效:极简配置、按需加载、省90% token,适合多数场景。MCP仍适用于复杂集成,但日常任务首选Skills。推荐先用SKILL.md解决,再考虑协议。附实测对比与配置建议,助你提升效率,节省精力。关注老金,一起玩转AI工具。
|
安全
西蒙学习法:快速入门全新领域
西蒙学习法由诺贝尔奖得主赫伯特·西蒙提出,主张通过目标聚焦、知识拆解、持续专注,帮助人在6个月内掌握新技能。特别适合IT从业者应对技术快速更新带来的学习压力,实现高效自我提升。
3974 0
 西蒙学习法:快速入门全新领域
|
机器学习/深度学习 人工智能 自然语言处理
掌握这5大要素,开启AI项目落地的成功之门
在AI浪潮下,大模型成为企业转型的关键动力。本文三桥君探讨了AI项目落地的挑战与潜力,并提出五大成功要素:业务热情、认清AI能力、编程能力、小处着手与老板耐心。通过合理选择应用场景,企业可有效推动AI技术融入业务,实现效率提升与决策优化,助力持续发展。
719 3
|
存储 安全 数据安全/隐私保护
Mac如何用命令行处理文件加密压缩
本教程介绍在Mac中通过命令行实现文件和文件夹的加密压缩、分卷处理及解压操作。主要内容包括:1) 使用`zip -er`命令加密压缩文件夹,`zip -e`命令加密压缩单个文件;2) 使用`split`命令按指定大小分割ZIP文件;3) 通过`cat`命令合并分卷文件并使用`unzip`解压。适用于需要安全传输和存储数据的场景。
|
Web App开发 JavaScript 前端开发
Qt(QtWebEngine)加载本地网页跨域问题的总结
Qt(QtWebEngine)加载本地网页跨域问题的总结
770 0
|
Python
Python函数的返回值深入解析
Python函数的返回值深入解析
841 1
|
JavaScript 前端开发 开发者
从零到一:教你如何发布自己的npm插件包
从零到一:教你如何发布自己的npm插件包
|
数据可视化 Linux 程序员
仅需几步就可快速实现SFTP的免密传输
在程序员的日常工作中,通过FTP/SFTP等工具在服务器之间进行文件的交互是一个基操技能,无论是编码开发过程中的跨系统传输文件,还是生产部署过程中的数据索取,熟练掌握这一技能,可以大大的提高开发效率。当然,现在也有很多终端模拟器提供了可视化的文件传输功能,比如XFTP、WINSCP、MobaXterm、Finalshell等等。
609 2

热门文章

最新文章

相关产品

  • 函数计算