微服务分布式事务Saga框架

Eventuate Tram Saga框架是使用JDBC / JPA的Java微服务的Saga框架。

微服务架构遇到的主要挑战是维护跨服务的数据一致性。每项微服务都有自己的私有数据,不能使用传统的分布式事务(JTA/Raft等两段提交PC),这种情况下解决方案是使用Saga。

Saga是这样跨多个微服务的维持数据一致性的:使用使用消息或事件协调串起一个个本地交易。一个Saga由一系列的步骤组成,每一步都包括事务,事务补偿或两者兼而有之。每个事务都是使用命令消息(Command message)来调用Saga参与者。一个Saga会依次以向前顺序执行各个事务步骤。如果其中一个步骤失败了,那么Saga就执行补偿事务以相反的顺序来实现回滚。

Eventuate Tram Saga在作者书籍“Microservice Patterns”中有更详细的描述。它建立在Eventuate Tram框架上,它使应用程序不使用JTA情况下能够原子地更新数据库并发布消息。

GitHub - eventuate-tram/eventuate-tram-sagas: Saga