有关开发后台作业的建议

适用于此 Power Platform Well-Architected 可靠性清单建议:

RE:05 通过实施错误处理和暂时性故障处理,增强工作负载的复原能力。 在解决方案中构建处理组件故障和暂时性错误的功能。

本指南介绍开发后台作业的建议。 后台作业自动运行,无需用户交互。 许多应用程序需要独立于用户界面 (UI) 运行的后台作业。

后台作业的一些示例包括批处理作业、密集型处理任务和长时间运行的流程,如工作流。 应用程序启动作业并处理用户的交互式请求。

例如,应用程序可能需要生成摘要,并从用户上传的文档中提取观点和关键点。 可以执行后台作业来运行 AI 操作并将摘要和要点保存到数据库中。 用户无需等待该过程完成。 再举一例,用户可能提交费用报销申请,这将启动一个后台工作流来处理费用报销申请并将其提交审批。 用户可以继续提交另一份费用报销申请,或者在后台作业运行时退出应用程序。 后台作业完成后,会向用户发送一封电子邮件,确认费用报销已提交审批。

后台作业有助于最大程度地减少应用程序 UI 上的负载,从而提高可用性并减少交互式响应时间。

关键设计策略

若要选择要指定为后台作业的任务,请考虑任务是否在没有用户交互的情况下运行,以及 UI 是否需要等待任务完成。 要求用户或 UI 在运行时等待的任务通常是不适合的后台作业。

后台作业的类型

后台作业的一些示例如下:

  • 需要很长时间才能完成的资源密集型作业,例如运行一系列事务。

  • 批处理作业,例如夜间数据更新或有计划的处理。

  • 长期运行的工作流,如订单履行或预配服务和系统。

  • 需要异步协作的工作流,如审批。

  • 将任务传输到更安全的位置进行处理的敏感数据处理。 例如,您可能不想在 web 应用程序中处理敏感数据。 相反,您想使用 Gatekeeper 模式等模式将数据传输到有权访问受保护存储的已隔离后台进程。

触发器

使用以下方法启动后台作业:

事件驱动的触发器

操作触发启动后台任务的事件驱动调用。 事件驱动触发器的示例包括:

  • UI 或其他作业触发后台作业,并将数据从执行的操作传递到后台作业。 例如,用户通过表单提交费用申请,表单详情传递给后台作业进行处理。

  • UI 或其他作业保存或更新存储中的值。 后台作业监视存储并检测更改,例如添加新值或修改现有值,并根据该更改触发后台作业。

  • UI 或其他作业向终结点发出请求,例如 HTTPS URI 或公开为 Web 服务的 API。 作为请求的一部分,UI 或作业传输后台任务所需的数据。 终结点或 Web 服务调用后台任务,将数据用作其输入。

事件驱动触发器的其他示例包括:在应用程序中提交表单、向数据存储中添加新行、代理中的触发短语、开始调用流的主题、数据存储中更改字段的值、具有特定主题或来自特定发件人的电子邮件到达收件箱,以及要上传到文件存储位置的文件。

使用触发条件来简化工作流并减少不必要的运行次数。 触发条件设置在触发工作流之前必须满足的多个条件。

备注

如果作为工作流的一部分,您更改了启动工作流的数据源,请确保使用触发条件来防止无限循环。 例如,应用程序可能会更改 Microsoft Dataverse 表行中的字段,工作流会根据这些更改的字段执行其他查询,从而进一步修改同一行。 仅当应用程序更改的字段进行更新时,而不是任何其他字段更新时,才使用触发条件启动工作流。

计划驱动的触发器

计时器触发启动后台任务的计划驱动调用。 计划驱动触发器的示例包括:

  • 后台作业每天或每周运行一次,并执行一组操作。

  • 单独的进程或应用程序启动一个计时器,该计时器在时间延迟后或在特定的时间调用后台任务。

适用于计划驱动调用的其他任务示例包括批处理例程(例如,根据客户的最新行为更新相关产品列表)、常规数据处理任务(生成累积结果)、每日报告的数据分析、数据保留清理和数据一致性检查。

返回结果

后台作业从调用后台作业的 UI 或进程在单独的进程中异步运行。 理想情况下,后台作业是即发即弃操作。 它们的运行时进度不会影响 UI 或调用进程,这意味着调用进程不会等待任务完成。 UI 和调用进程无法检测到任务何时结束。

如果需要后台任务与调用任务通信以指示进度或完成,则必须实现一种机制。一些示例包括:

  • 将状态指示器值写入可供 UI 或调用方任务访问的存储,以便监视或检查此值。 后台任务返回给调用方的其他数据可以放在同一存储中。

  • 从 UI 或调用方可以访问的后台任务公开 API 或终结点以获取状态信息。 响应可以包含后台任务返回给调用方的数据。

  • 配置后台任务,以向 UI 返回其处理的状态或数据。

协调

后台任务可能比较复杂,需要运行多个任务。 在这些方案中,通常将任务划分为多个使用者可以运行的较小离散步骤或子任务。 多步骤作业更高效、更灵活,因为单个步骤通常在多个作业中可重复使用。 还可以轻松添加、删除或修改步骤的顺序。

协调多个任务和步骤可能很困难,但有三种常见模式可以指导解决方案:

  • 将任务分解为多个可重用的步骤。 应用程序可能需要对其处理的信息执行不同复杂度的各种任务。 实现此类应用程序的一种简单但不灵活的方法是以整体模块的形式执行此处理。 但是,如果应用程序在其他位置需要部分相同的处理,此方法可能会减少重构代码、优化代码或重用代码的机会。

  • 管理任务步骤的编排。 应用程序可能会执行包含许多步骤的任务,其中一些步骤可能会调用远程服务或访问远程资源。 有时,各个步骤彼此独立,但它们由实现任务的应用程序逻辑进行协调。

  • 管理失败的任务步骤的恢复。 如果一个或多个步骤失败,应用程序可能需要撤消一系列步骤执行的工作,这共同定义了最终一致的操作。

复原注意事项

创建可复原的后台任务,为应用程序提供可靠的服务。 规划和设计后台任务时,请考虑以下几点:

  • 后台任务需要正常处理重启,而不会损坏数据或导致应用程序不一致。 对于长时间运行或多步骤的任务,请考虑使用检查点。 使用检查点将作业的状态保存在永久性存储中,或保存为队列中的消息,并配置重试逻辑以防操作意外失败。

  • 使用队列来与后台任务通信时,队列可以充当缓冲区,用于在应用程序超过一般负载时,存储发送给任务的请求。 任务可以在不太繁忙的时段赶上 UI,重启不会阻止 UI。

缩放和性能注意事项

后台任务必须提供足够的性能,以确保它们在系统负载不足时不会阻止应用程序或延迟操作。 通常,缩放托管后台任务的计算实例时,性能会提高。 规划和设计后台任务时,请考虑以下与可伸缩性和性能相关的要点:

  • 如果向用户显示后台任务的结果,后台作业可能会影响用户体验。 例如,后台作业可能要求用户等待通知、刷新页面或手动检查任务状态。 这些行为会增加用户交互的复杂性,并对用户体验产生负面影响。 考虑将数据返回到 UI 的替代方法,比如通过电子邮件或 Microsoft Teams 发送通知,或者在 UI 中包含检查状态更新的功能。 在我们提交费用表单的示例中,您可以在应用程序中创建一个页面,列出所有提交的费用表单及其状态,并能够触发刷新,而不是将状态返回给 UI。

  • 后台作业可能会给数据同步和进程协调带来挑战,尤其是在后台任务相互依赖或其他数据源的情况下。 例如,后台作业可能会处理数据一致性问题、争用条件、死锁或超时。

  • 为了防止负载下的性能损失,可以实施逻辑,以便处理链的单个点不会导致瓶颈。 请考虑其他限制,例如存储和应用程序与后台任务所依赖的其他服务的最大吞吐量。

权衡:后台作业向系统引入更多组件和依赖项,这可能会增加解决方案的复杂性和维护成本。 例如,后台作业可能需要单独的监控服务和重试机制。

Power Platform 简化

以下部分介绍可用于托管、运行、配置和管理后台作业的服务。

Power Automate

Power Automate 云端流是在云中运行的工作流。 它们可能是由某个事件触发的自动化流程,例如来自特定人员的电子邮件的到达。 它们可能是点击一个按钮后即开始的即时流,例如从移动设备发送给团队的提醒。 它们可能是在某个时间运行的计划流,比如每天向 SharePoint 或数据库上传数据。 您还可以从桌面或移动设备自动执行重复性任务。

了解与吞吐量、请求、并发、循环和拆分相关的自动流、计划流和即时流的限制。 请确保在设计工作流时考虑到这些限制。

通过错误处理计划降低风险。

以下是一些可以使用 Power Automate 流运行后台作业的示例:

Microsoft Dataverse

Microsoft Dataverse 计算列和汇总

  • 公式列是在 Microsoft Dataverse 表中显示计算值的列。

  • 计算列自动执行业务流程中使用的手动计算。 例如,销售员可能想知道商机的加权收入,这基于商机与概率乘积得到的预计收入。 或者,如果订单超过一定金额,他们希望自动应用折扣。 计算列可包含简单数学运算或条件运算(如大于或if-else)的结果等之类的值。

  • 汇总列帮助用户通过监控关键业务指标来获取数据见解。 汇总列包含在与指定行相关的行上计算的聚合值。 这包括常规表和活动表,如电子邮件和约会。 在更复杂的方案中,可以通过行层次结构聚合数据。 作为一名管理员或定制员,您可以通过使用 Power Apps 中的自定义工具来定义汇总列,而无需编写代码。

后台操作可以发送 Dataverse 异步处理的请求。 如果您不想在请求运行时保持连接,后台操作非常有用。

插件是自定义事件处理程序,在处理 Microsoft Dataverse 数据操作期间执行,以响应引发的特定事件。

Microsoft Dataverse 还提供强大的解决方案,通过低代码插件实现更高效的数据架构并减少客户端工作负载。这些插件是可重用的实时工作流,可在 Dataverse 内执行一组特定的命令,在服务器端运行,由个性化的事件处理程序触发。

可靠性清单

请参考整套建议。