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 AirflowActivitiFlowableNetflix Conductor 等提供了使用代码,DSL 或是 BPMN 这类标准的工作流描述方式,允许开发者自己搭建工作流服务。不同云服务厂商也提供了各自的工作流服务如 AWS Step Functions, AWS Simple Workflow ServiceAzure 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

目录
相关文章
|
存储 安全 对象存储
oss访问控制(Access Control)
oss访问控制(Access Control)
1418 4
|
运维 安全 数据挖掘
【数据挖掘】离群点概念、类型、检测的挑战概述(图文解释 超详细)
【数据挖掘】离群点概念、类型、检测的挑战概述(图文解释 超详细)
1385 0
|
Linux 网络安全 数据安全/隐私保护
linux 本地终端 SSH 连接 gcp (Google Cloud Platform ) 配置教程
linux 本地终端 SSH 连接 gcp (Google Cloud Platform ) 配置教程
9682 0
|
弹性计算 算法 应用服务中间件
nginx配置访问密码,实现用户输入用户名密码才能访
如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证。只有让用户输入正确的用户名和密码才能正常访问。效果如下:
3844 0
|
7月前
|
安全
西蒙学习法:快速入门全新领域
西蒙学习法由诺贝尔奖得主赫伯特·西蒙提出,主张通过目标聚焦、知识拆解、持续专注,帮助人在6个月内掌握新技能。特别适合IT从业者应对技术快速更新带来的学习压力,实现高效自我提升。
3330 0
 西蒙学习法:快速入门全新领域
|
缓存 安全 Linux
通过层级内隔离提升软件的安全性|龙蜥大讲堂第112期
本次分享的主题是通过层级内隔离提升软件的安全性,由中科院计算所的武成岗分享。主要分为以下两个部分: 1. 计算系统的安全关乎着整个“数字化”世界的安全 2. 目标:同时获取微内核的安全性和宏内核的高性能 3. 层级内隔离手段 4. 总结
500 12
|
虚拟化 Docker 容器
Minikube - Kubernetes本地实验环境
为了方便大家本地开发和体验Kubernetes,社区提供了可以在本机部署的Minikube。本文介绍利用阿里云的镜像地址在Windows/Mac/Linux上来部署和配置Minikube
243435 77
Minikube - Kubernetes本地实验环境
|
安全 网络协议 数据安全/隐私保护
访问控制(ACL)原理详解
访问控制(ACL)原理详解
1037 0
访问控制(ACL)原理详解
|
存储 弹性计算 运维
如何使用Argo Workflows编排基因计算工作流?
为了高效、准确地整合和分析大量基因计算数据,工作流的自动化编排成为了一项关键技术,而容器化、灵活、易用的工作流引擎Argo Workflows在其中脱颖而出,成为串联基因计算各个环节的得力助手。
|
虚拟化 iOS开发 Docker
虚拟文件系统之争:VirtioFS、gRPC FUSE、osxfs (Legacy)大比拼
虚拟文件系统之争:VirtioFS、gRPC FUSE、osxfs (Legacy)大比拼
881 1

热门文章

最新文章

相关产品

  • 函数计算