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)
-
执行长事务 (LRT) 的主执行与补偿执行操作。
-
根据编程式导航编排事务工作流走向。
-
识别原子执行中的各类异常与错误。
-
重试失败的事务。
-
调度各执行器的任务执行。
-
管理双重一致性问题 (Dual Consistency Problem)。
-
状态持久化与生命周期管理。
-
事务事件发布。
-
领域实体 (DomainEntity) 状态的序列化与反序列化。
| 上述职责在各个具体实现的专属章节中会有深入讲解。 |
下面通过一个示例来看 SEC 在框架中的基本协作方式。
以常见的电子商务 (E-Commerce) 应用为例:
我们需要创建一个领域实体 (DomainEntity) 来存储必要的业务数据;同时,我们需要为每个原子事务创建对应的执行器 (Executor)。
仅创建领域实体和执行器并不足以启动执行流程。
为了运行执行流程,我们必须向 SEC 注册初始执行器 (Starting Executor) 和初始领域实体。
随后,SEC 将根据每个执行器做出的导航逻辑,逐一执行各个执行器。
例如,如果我们提供 order-init 执行器作为起始执行器,流程将从该执行器启动,当其执行完毕后,该执行器将根据自身业务逻辑导航到下一个执行器。
(在 StackSaga 中,执行流程完全是动态编程式决定的,绝非死板的预先静态绑定)。
SEC 在通用方法中管理工作流的典型运作方式如下:
-
请求到达编排服务,并交由 SEC 进行异步或响应式处理。
-
SEC 获取该请求,并从配置的起始点启动流程执行。
-
根据编程式导航逐一执行每个步骤,同时将状态保存在事件存储 (Event Store) 中,以便后续重试和追踪。
-
如果发生任何主执行失败,SEC 将以逆序触发对应的补偿执行操作。
-
如果在补偿执行期间因资源不可用或瞬时网络错误发生失败,SEC 将使事务进入重试模式,并根据配置的重试策略自动重试该事务。
-
SEC 将在每次事务状态发生变更时,向配置的监听器发布事件。
| SEC 在不同的 StackSaga 实现中,会结合其特有的专有组件表现出细微差异。有关更多详细信息,请参阅各个实现的 SEC 专属章节。 |