什么是 Durable Functions?
借助 Durable Functions,可在无服务器环境中实现复杂的有状态函数。
在示例方案中,对于项目设计提案,公司目前采用手动审批流程。 此流程具有多个步骤,流程中各步骤的持续时间各不相同。 在内部实现自动化流程的工作非常复杂,且成本高昂。 各步骤的协调需要付出一番努力。 此外,必须能够将自定义逻辑合并到工作流。
此单元将介绍 Durable Functions 的优点。 还将介绍与 Durable Functions 相关的各种函数类型和关键概念。
Durable Functions
Durable Functions 是 Azure Functions 的一个扩展。 Azure Functions 在无状态环境中运行,而 Durable Functions 在调用多个函数时可以保留状态。 通过这种方法,可简化无服务器环境中复杂的有状态执行。
Durable Functions 可根据需要进行缩放,并提供在云端高效实现复杂工作流的方式。 使用 Durable Functions 的一些优势包括:
使你能编写事件驱动的代码。 Durable Functions 能够异步等待一个或多个外部事件,然后执行一系列任务来响应这些事件。
这些函数可以链接在一起。 你可以实现常见模式(例如扇出/扇入),通过一个函数并行调用其他函数,然后累积结果。
可以编排并协调函数,指定函数的执行顺序。
为你管理状态。 无需编写自己的代码,即可保存长时间运行的函数的状态信息。
借助 Durable Functions,可使用业务流程函数定义有状态工作流。 业务流程函数具有以下附加优势:
可在代码中定义工作流。 不必编写 JSON 说明或使用工作流设计工具。
可以同步和异步调用函数。 被调用函数的输出保存在本地的变量中,供后续调用的函数使用。
函数等待时,Azure 自动检查函数的进度。 函数等待时,Azure 可能选择冻结函数并保存其状态,以便保留资源并降低成本。 函数再次开始运行时,Azure 解除冻结函数并还原其状态。
函数类型
可使用三种 Durable Functions 类型:客户端、业务流程协调程序和活动。
Client 函数是创建 Durable Functions 业务流程实例的入口点。 可运行这些函数来响应来自许多源的事件,如传入的新 HTTP 请求、要发布到消息队列的消息、到达事件流的事件。 可采用支持的任何语言编写这些函数。
Orchestrator 函数说明操作的执行方法和运行顺序。 在代码(C# 或 JavaScript)中编写业务流程逻辑。
Activity 函数是 Durable Functions 业务流程中的基本工作单元。 活动函数包含业务流程中的任务执行的实际工作。
应用程序模式
可使用 Durable Functions 实现很多常见工作流模式。 这些模式包括:
函数链接:在此模式下,工作流以指定顺序执行一系列的函数。 一个函数的输出应用于序列中下一个函数的输入。 最后一个函数的输出用于生成结果。
扇出/扇入:此模式并行运行多个函数,然后等待所有函数完成运行。 可以聚合并行执行的结果,或者将它们用于计算最终结果。
异步 HTTP API:此模式解决在使用外部客户端协调长时间运行的操作的状态时出现的问题。 HTTP 调用可触发长时间运行的操作,然后将客户端重定向到状态终结点。 客户端通过轮询此终结点可获取操作的完成时间。
监视:此模式在工作流中实现重复的过程,可能是查找状态的更改。 例如,此模式可用于轮询,直至满足特定条件为止。
人机交互:此模式合并还会涉及一些人机交互的自动化流程。 自动化流程中的手动流程比较棘手,因为人不像大多数计算机一样具有高可用性,响应方式也不同。 如果人未能在指定的响应时间内正确交互,可使用超时和补偿逻辑合并人工交互。 审批流程是一个涉及人机交互的流程示例。
与逻辑应用的比较
Durable Functions 和逻辑应用均是用于启用无服务器工作负载的 Azure 服务。 Azure Durable Functions 的目的是作为功能强大的无服务器计算选项运行自定义逻辑。 Azure 逻辑应用更适用于集成 Azure 服务和组件。 任何一种技术均可用于创建复杂的业务流程。 借助 Azure Durable Functions,可通过编写代码并使用 Durable Functions 扩展来开发业务流程。 借助逻辑应用,可通过使用设计图面或通过编辑配置文件来创建业务流程。
下表列出了 Azure Durable Functions 和 Azure 逻辑应用之间的一些主要差异。
任务 | Azure Durable Functions | Azure 逻辑应用 |
---|---|---|
开发 | 代码优先(命令性) | 设计优先(声明性) |
连接 | 大约十几个内置绑定类型。 可为自定义绑定编写代码。 | 大型连接器集合。 适用于 B2B 的 Enterprise Integration Pack。 你还可以生成自定义连接器。 |
操作 | 每一个活动都是一个 Azure Functions。 编写活动函数的代码。 | 现成操作的大型集合。 通过自定义连接器集成自定义逻辑。 |
监视 | Azure Application Insights | Azure 门户、Azure Monitor 日志 |
管理 | REST API、PowerShell、Visual Studio | Azure 门户、REST API、PowerShell、Visual Studio、Visual Studio Code 扩展 |