Saga 编排器引擎 (Saga Orchestrator Engines)

概览 (Overview)

在 StackSaga 生态系统中,Saga 编排器引擎 (Saga Orchestrator Engines) 是平台的核心中枢。 它们是负责跨微服务协调分布式事务的关键组件,通过执行 Saga 工作流 —— 即一系列本地事务及其对应的补偿操作 (Compensating Actions) —— 来维护最终一致性 (Eventual Consistency)。

可用的 Saga 编排器引擎实现包括:

同步与 Kafka 编排器引擎均原生支持两种长事务模型 (Long-Running Transaction, LRT):用于不间断自动化流水线的连续型长事务(直通处理,Continuous LRT / Straight-Through Processing - STP),以及用于异步回调、Webhook 和人工审批且无线程饥饿的可暂停长事务(等待状态与人工介入,Pausable LRT / Wait-States & Human-in-the-Loop - HITL)。

编排器引擎如何融入 StackSaga 生态系统?

StackSaga 不仅仅是编排器 —— 它是一个完整的分布式生态系统:

  • 编排器引擎 (Orchestrator Engines) 运行您的业务工作流。

  • 事件溯源层 (Event Sourcing Layer) 记录每个步骤及其执行结果(以便进行重试或追踪)。

  • 数据库支持模块 (Database Support Modules) 允许您使用现有的主数据库作为事件存储 (Event Store) —— 无需独立的存储集群。

  • 环境集成 (Environment Integrations)(Eureka、Kubernetes 等)确保编排器能够在云原生部署中无缝协同。

  • 事务追踪面板 (Transaction Tracing Dashboard) 可视化展示所有工作流,并允许人工干预(重试、取消、状态审查)。

📌 简而言之:编排器引擎是更大运维生态系统中的核心执行大脑。

StackSaga 编排器引擎的核心职责

  • 定义与执行 Saga 流 (Define & Execute Saga Flows) —— 识别步骤顺序,调用对应的微服务,并处理业务分支逻辑。

  • 管理故障与补偿 (Manage Failures & Compensations) —— 当某一步骤失败时,触发已定义的先前步骤的回滚/补偿逻辑。

  • 持久化 Saga 状态 (Persist Saga State) —— 通过事件溯源系统记录每个生命周期事件(启动、成功、失败、重试)。

  • 支持重试与重放 (Support Retrying & Replay) —— 从瞬时网络故障中自动恢复,或手动重启失败的工作流。

  • 暴露监控状态 (Expose Status for Monitoring) —— 向 StackSaga 控制台提供数据,实现毫秒级实时事务追踪。

StackSaga 执行协调器 (SEC)

由于 StackSaga 是 Saga 编排实现之一,需要一个集中式编排引擎来根据编程式导航 (Programmatic Navigation) 处理工作流,例如调用主执行操作 (Primary-Executions)、补偿执行操作 (Compensation-Executions) 以及在资源不可用或遇到瞬时错误时重试事务 (Retrying the Transaction)。 在 StackSaga 中,管理 Saga 工作流中所有这些职责的核心引擎被称为 StackSaga 执行协调器 (SEC, StackSaga Execution Coordinator)。

SEC 履行以下核心职责:

SEC 的核心职责 (Duties of SEC)

  1. 执行长事务 (LRT) 的主执行与补偿执行操作。

  2. 根据编程式导航编排事务工作流走向。

  3. 识别原子执行中的各类异常与错误。

  4. 重试失败的事务。

  5. 调度各执行器的任务执行。

  6. 管理双重一致性问题 (Dual Consistency Problem)。

  7. 状态持久化与生命周期管理。

  8. 事务事件发布。

  9. 领域实体 (DomainEntity) 状态的序列化与反序列化。

上述职责在各个具体实现的专属章节中会有深入讲解。

下面通过一个示例来看 SEC 在框架中的基本协作方式。

以常见的电子商务 (E-Commerce) 应用为例: 我们需要创建一个领域实体 (DomainEntity) 来存储必要的业务数据;同时,我们需要为每个原子事务创建对应的执行器 (Executor)。 仅创建领域实体和执行器并不足以启动执行流程。 为了运行执行流程,我们必须向 SEC 注册初始执行器 (Starting Executor) 和初始领域实体。 随后,SEC 将根据每个执行器做出的导航逻辑,逐一执行各个执行器。 例如,如果我们提供 order-init 执行器作为起始执行器,流程将从该执行器启动,当其执行完毕后,该执行器将根据自身业务逻辑导航到下一个执行器。 (在 StackSaga 中,执行流程完全是动态编程式决定的,绝非死板的预先静态绑定)。

SEC 在通用方法中管理工作流的典型运作方式如下:

  • 请求到达编排服务,并交由 SEC 进行异步或响应式处理。

  • SEC 获取该请求,并从配置的起始点启动流程执行。

  • 根据编程式导航逐一执行每个步骤,同时将状态保存在事件存储 (Event Store) 中,以便后续重试和追踪。

  • 如果发生任何主执行失败,SEC 将以逆序触发对应的补偿执行操作。

  • 如果在补偿执行期间因资源不可用或瞬时网络错误发生失败,SEC 将使事务进入重试模式,并根据配置的重试策略自动重试该事务。

  • SEC 将在每次事务状态发生变更时,向配置的监听器发布事件。

SEC 在不同的 StackSaga 实现中,会结合其特有的专有组件表现出细微差异。有关更多详细信息,请参阅各个实现的 SEC 专属章节。