分布式事务模式之SAGA-从SAGA起源到Seata崛起

分布式事务模式之SAGA-从SAGA起源到Seata崛起
最新回答
陞香洇染

2022-10-20 22:01:23

Saga的起源可以追溯到1987年Hector和Kenneth的论文,彼时SQL成为国际标准,而Saga正是为解决长事务性能问题而提出的。长事务,即Long Lived Transaction(LLT),因其执行时间长、涉及资源广泛,容易引发性能问题和系统风险。为确保原子性,系统会加锁资源,这可能导致其他事务延迟和增加死锁风险。

为缓解性能,有时会降低LLT的原子性要求,允许在事务未完成前释放部分资源,以保持系统可用性。Hector和Kenneth通过机票预订场景解释了这种控制机制,通过将长事务分解为多个子事务,每个子事务负责单独操作,即使部分失败也能部分回滚,减少整体锁定时间。

Saga本身即一串事件的集合,将LLT拆解为saga事务,每个子事务S都有对应补偿事务C。数据库作为 Saga Execution Component (SEC),记录事务活动,并由Saga Daemon (SD) 负责协调和状态感知。在失败时,有两类补偿策略可以选择。

Seata作为分布式事务解决方案的代表,如日中天,它提供AT、TCC、SAGA和XA事务模式,尤其在Java领域占据主导地位。Seata架构基于分布式事务的子事务分支与全局事务模型,包含RM(应用层面的事务管理)和TC(协调者角色)等关键组件。

Seata站在了 Saga 和 XA 规范等前人的肩膀上,结合历史积累,支持多种事务模式。对于复杂业务流程,Seata通过状态机管理saga事务,确保在异常时执行补偿逻辑。补偿事务的可靠性则依赖于延迟管理和重试策略的优化。

总结来说,从 Saga 的起源到 Seata 的崛起,分布式事务解决方案的核心在于处理长事务的挑战,通过优化策略和实践,提高系统的性能和可用性。