Saga 编排式实现

由中心协调器按状态机依次调用各服务,并在失败时触发补偿;流程逻辑集中、可观测性好,但协调器成为重要组件,需保证其高可用与幂等。

结构协调器 + 有序本地事务 + 补偿动作
优势流程可见、分支与补偿明确
代价协调器承担编排职责,需处理超时、重试与重复回调
  • 状态建模:初始、步骤进行中、补偿中、已完成、已失败
  • 驱动事件:步骤成功、失败与超时事件触发状态迁移
  • 动作幂等:正向调用与补偿动作都要能安全重复执行
  • 持久化:状态与待执行动作先落库,重启后可继续推进
  • 超时控制:每步设置超时与重试上限,超限进入补偿
  • 回调防重:按步骤标识与当前状态校验,过期回调忽略记录
补偿顺序按业务可接受方式逆序补偿;不可逆步骤尽量前移,或改为预留(先冻结再扣减)
观测要点流程图状态分布、单步耗时与补偿触发次数纳入监控
并发处理同一业务实体的 Saga 按标识串行化推进,避免交叉执行导致状态错乱
人工介入多次补偿仍失败时转入人工队列,附带完整步骤轨迹便于定位
测试要点用故障注入逐步骤模拟超时与失败,验证每条补偿路径都能收敛
协调器通常用持久化状态机或工作流引擎实现,确保重启后能继续推进。

易错点

  • 补偿动作未设计幂等,重试造成重复退款或重复释放
  • 协调器无持久化状态,重启后流程丢失

数据来源与参考

  • Chris Richardson《Microservices Patterns》(Manning)
  • microservices.io 模式目录:Saga
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌