Saga分布式事务

孤者浪人 提交于 2021-02-17 10:50:12

前言

说到分布式事务,大部分人都会知道ACID,两阶段提交,TCC等常见模式。 在微服务大行其道的今天,基于Saga实现的分布式事务则更具普适性。

微服务事务

微服务是将服务粒度控制在上下文内的松耦合的服务架构。对于微服务架构的事务建议对于数据库提供强一致的事务,在服务上下文之间依靠最终一致性方案来解决服务之间协同的问题。

Saga

saga是30年前的一篇数据库论文提到的概念。 论文中定义saga事务是一个长事务,整个事务可以由多个本地事务组成,每个本地事务有相应的执行模块和补偿模块,当saga事务中任意一个事务出错了,可以调用相关事务进行对应的补偿恢复,达到事务的最终一致性

幂等

由于分布式系统中网络带来的不可靠性,saga调用服务提出了服务应该支持幂等,在服务调用超时重试情况下,不至于产生问题。

隔离性

saga事务没有准备阶段,不具备隔离性,如果多个saga事务同时操作同一资源会遇到多线程临界资源的情况,产生数据丢失或者脏数据。

为解决隔离性,可以参考TCC模式,在业务层加入session及锁机制保证操作串型化,通过业务层面达到隔离效果。

事件

saga在分布式架构下,采用事务驱动方式,让服务进行相关交互,业务方订阅相关领域事件即可。 通过事件方式降低系统复杂度,提升系统扩展性,但要注意事件循环依赖的问题。

Saga事务框架实现

组成部分:

  • 服务发现模块
  • 微服务处理模块
  • 集中式/分布式saga协调器
  • saga执行模块

saga协调器

处理saga调用请求接收,分析及执行和结果查询等内容。

执行模块根据调用图谱生成调用任务,调用微服务处理模块相关接口,如果执行出错采取补偿方法。

saga执行模块

通过分析请求的json数据,构建调用关系图谱,json用来描述saga事务串型调用子事务并执行子事务。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!