工作流引擎选择标准与指南


在本指南中,我们探讨了工作流引擎的基本要素、它们的质量和功能,以及为您的特定用例选择正确的引擎时要考虑的关键因素。通过了解项目的独特需求(无论是面向开发人员还是非技术用户),并评估每个引擎的可扩展性、可重用性、可观察性、弹性和耐用性,您可以做出最能满足您需求的明智决策。

这是具有活跃社区支持的流行引擎的简短列表,有关更详尽的精选列表,请查看 Awesome-workflow-engines
常见有Apache Airflow、n8n、DTFx、Temporal、Node-RED

两种主要类型的工作流引擎迎合不同的受众。

  • 开发人员(工作流即代码):面向开发人员的工作流引擎强调基于代码的配置、可扩展性以及与现有开发人员工具和平台的集成。如Apache Airflow、DTFx、Temporal
  • 最终用户(工作流作为 DSL):为非技术用户设计的工作流引擎优先考虑用户友好的界面、可视化设计功能和温和的学习曲线。如n8n、Node-RED

基于 DSL 的工作流引擎的优点

  • 可视化编辑:这些引擎通常提供一个用户界面,可以在其中可视化编辑和查看工作流程。
  • 集成:许多基于 DSL 的引擎支持与各种外部系统和服务的预构建集成,例如数据库、消息传递平台或第三方 API。这些集成可能是有益的,因为它们简化了与这些外部组件的连接和交互过程,与从头开始开发自定义集成相比,节省了时间和精力。
  • 动态配置:由于基于DSL的工作流程本质上是配置文件,因此它们可以轻松存储在blob存储中并加载到引擎中而无需部署,从而在更新或添加新工作流程时提供更大的灵活性和易用性。
  • 易于使用:由于使用了面向非技术用户的简化语言,因此非开发人员更容易使用基于 DSL 的引擎。
  • 增强功能:基于 DSL 的方法允许使用从本质上相似的其他系统检索到的附加配置来增强代码,从而使非技术用户更容易适应和扩展工作流程功能。

基于代码的工作流引擎的优点

  • 类型安全:活动通常需要访问先前数据或全局状态才能处理输入数据。通常,这些数据是无类型的,这可能会导致在工作流开发过程中忽略边缘情况。
  • IDE 支持:构建工作流程时,DSL 方法在为推荐活动以及输入和输出类型提供 IDE 支持方面存在不足。
  • 调试器:通常,基于 DSL 的引擎缺乏用于快速识别代码错误的调试器支持,而是依赖于错误报告和日志记录。
  • 可测试性:基于代码的引擎允许开发人员为各个工作流程组件编写单元测试,以及为整个工作流程编写集成测试。这可以确保工作流程按预期运行,提高代码质量,并减少在开发过程中引入错误或不一致的可能性。


评估工作流引擎的标准
评估工作流引擎时,请考虑以下标准:

  • 性能:评估引擎满足用例特定性能要求的能力。
  • 集成:评估各种引擎提供的内置集成,特别是那些针对非技术用户的集成,以简化您的用例实施。
  • 流行度:考虑引擎的社区支持和使用,如 GitHub Stars 和托管平台的拉动所证明的那样。
  • 功能:确定哪些功能对于您的用例至关重要,并根据这些功能的实现来评估引擎。
  • 可扩展性:考虑您的用例的可扩展性要求以及引擎的设计是否可以满足此类要求。
  • 许可:考虑您的用例的许可要求,并查看工作流引擎许可证是否适合您的项目用例。
  • 编程语言:选择引擎的一个关键标准是使用一个可以轻松为您和您的团队构建自定义工作流程并且使用正确的库的引擎。
  • 集成类型:根据项目的特定需求以及它应如何与现有系统或开发流程集成,评估所需的工作流引擎类型,例如库、框架、API 或成熟的应用程序。

可扩展性
可扩展性对于任何应用程序来说都是一个至关重要的功能,工作流引擎使您的代码能够大规模处理不断增加的执行次数。例如,工作流引擎可以有效地管理和协调工厂车间内的众多 PLC,即使设备数量及其复杂性不断增加。
可扩展的工作流引擎应提供以下功能:

  • 多集群复制:跨多个集群分发和同步工作流数据,以实现高可用性和容错能力。
  • 旧数据归档:存储和管理历史工作流程数据,以用于合规性、审计和分析目的。
  • 可扩展的持久性存储:使用可扩展的存储解决方案来适应不断增长的工作流数据和活动负载。

可重复使用性
工作流引擎应该使开发人员能够创建可重用的活动和组件,这些活动和组件可以轻松集成到新的工作流中。这不仅节省了时间,而且确保了不同进程之间行为的一致性。例如,可重复使用的支付处理活动可用于各种工作流程,例如在线购买、订阅续订或退款。
实现可重用性的工作流引擎应提供以下功能:

  • 子工作流程执行:允许工作流程调用并执行其他工作流程。
  • 活动重用:使活动或组件能够在多个工作流程中重用。
  • 共享库或模板:提供预定义工作流模式、活动或模板的存储库,以简化和标准化工作流创建。

可观察性
监控和维护系统的健康状况对于保持流程顺利运行至关重要。工作流引擎应该提供查询和观察每个活动、工作流、工作流组或整个系统的状态的功能。例如,系统管理员可以轻松跟踪长时间运行的数据处理工作流程的进度,实时识别瓶颈或错误。
具有强大可观察性的工作流引擎应提供以下功能:

  • 指标:收集和分析工作流程、活动和资源的性能指标,以优化和监控系统。
  • 跟踪:利用分布式跟踪来可视化工作流的调用图,包括其活动和任何子工作流。这使您可以更有效地调试和诊断问题
  • 日志记录:记录和存储工作流执行、错误和事件的日志,以帮助故障排除和审核。
  • 警报:根据预定义条件发送警报或触发操作,例如工作流故障、高资源使用率或长时间运行的活动。

弹性
弹性是工作流引擎的一个显着优势,因为它们提供了使用不同策略重试活动和工作流的能力。此功能有助于确保暂时性错误(例如临时网络中断)不会导致整个过程失败。
弹性工作流引擎应提供以下功能:

  • 活动和工作流程的重试策略:根据用户定义的策略自动重试失败的活动或工作流程。
  • 活动和工作流程超时:设置活动或工作流程可以运行或等待操作的时间限制,防止流程停滞。
  • 回退策略:定义重试失败或满足某些条件时的替代操作或通知。

持久性
持久性确保工作流可以处理高度复杂的工作流、无限期运行或等待操作数小时甚至数天,而不会丢失数据或状态。例如,大型组织中的审批流程可能需要多个级别的签核,并且关联的工作流必须能够等待必要的审批,即使需要几天的时间。借助耐用的工作流引擎,开发人员可以创建长期运行的流程,在较长时间内保持其状态和数据完整性,确保在执行过程中不会丢失任何关键信息。
持久的工作流引擎应提供以下功能:

  • 计时器:安排工作流程在预定时间或间隔开始执行。
  • 睡眠功能:允许工作流程暂停或等待操作,而不消耗过多资源,支持长时间运行的流程。
  • 当前和过去状态的可见性:提供对工作流程的当前状态和历史执行情况的洞察,从而实现更好的跟踪、管理和审核。