知识卡片
Saga用补偿解耦
内容
Saga把长事务拆成一串本地事务和补偿动作,通过协调器或编排流程推进。它不追求跨服务数据库锁,而是把失败恢复显式建模,适合跨上下文的业务交易。
参考来源
- 位置:《复杂软件设计之道》第6章《事件溯源》"6.4.1 引入Saga模式"及"6.4.2 Saga分布式事务原理"(源文件:_chapter_text/ch06.txt)
- 结论依据:原文明确"Saga是将较大的事务分成一组较小的事务,这减少了必须在数据库资源上保留锁的时间……每个较小的交易都可以通过补偿动作撤销",并以旅行预订(出租车/酒店/机票)为例说明失败后逐步补偿回退,通过"持久的Saga事件日志、Saga协调器、补偿行为的幂等性"三部件实现,而非跨服务加数据库锁。
- 原始内容:Saga是将较大的事务分成一组较小的事务,这减少了必须在数据库资源上保留锁的时间,因此可以避免瓶颈。每个较小的交易都可以通过补偿动作撤销……使用事件溯源方式实现Saga需要以下三个部件。1)持久的Saga事件日志……2)Saga协调器……3)补偿行为的幂等性。