Saga 协同式实现

各服务订阅事件并在本地事务完成后发布新事件,由事件链推动流程;解耦度高、无中心组件,但整体流程分散,排障与变更影响评估更难。

结构事件链驱动,各服务自主决定后续动作
优势无中心编排组件,松耦合
风险流程隐式,缺少全局视图,容易出现循环或孤儿事件
  • 事件命名用过去时,表达已经发生的事实
  • 订阅克制:每个服务只订阅自己关心的少数事件
  • 补偿显式:失败事件对应明确的回滚订阅方与动作
  • 关联追踪:同一关联 ID 贯穿全链路事件与日志
  • 消费防御:幂等消费与乱序容忍一并设计
  • 流程文档:维护事件流向图并随新增订阅同步更新
schema 治理事件字段变更按兼容规则管理(先加字段,消费方迁移后再清理)
演进提示协同链条变复杂后可局部引入协调器,按流程段收敛职责
补偿纪律补偿动作设重试上限,超限转人工处置队列
排障手段按关联 ID 聚合事件链,离线重建流程实例定位卡点
协同式适合步骤少、参与者稳定的流程;步骤多或有严格补偿顺序时,编排式更易管控。

易错点

  • 事件链无全局负责方,异常路径无人处理
  • 缺少流程级追踪,问题定位需要人工拼事件

数据来源与参考

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