db2 42997怎么解决_微服务架构下,如何解决事务问题?

微服务的优点有很多,比如独立迭代、领域划分、功能复用、跨语言等优点,但也带来了一些缺点,今天就谈谈服务化后带来的分布式事务问题。


在介绍分布式事务之前,先提两个基本方法论。

  1. CAP定理,Consistency、Availability、Partition tolerance,任何分布式系统只可能同时满足两点,不能做到三者兼顾。
  2. BASE理论,基本可用、软状态、最终一致性。

分布式事务的解决方案也是基于以上的两个理论做为支撑,通过场景不同,设计出不同的解决方案。


XA事务:XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA实现分布式事务的原理如下:

840d7c2e8af5ef625b7bce62d9ccaad3.png

XA事务原理

XA事务的优点比较明显,简单、易用、成本低,但缺点显而易见,性能差、场景受限,在互联网场景下几乎很难有发挥空间,它满足了CAP原理中的CP属性。


本地表+MQ:BASE理论的应用,属于可靠消息最终一致性的范畴。服务执行过程中,会通过MQ进行通信,如果mq发送成功,当前服务正常响应客户端,如果发送mq失败,重试,重试仍失败,写入本地表(本地表和业务表在一个 事务里,保证一致性),通过定时任务保证一定会发送mq成功,保证数据的最终一致性。当然mq接收端一定要做幂等,避免重复消息导致执行错误。

本地表+mq的方式本质上牺牲了数据强一致性,提高了系统的可用性和性能,在数据不要求强一致的场景下适用。

举个例子:支付成功后生成会计凭证,如下图。

7d978423bea25359071336b700f2dbef.png

例子


接下来 ,介绍一下Seata这个开源产品,看看它是怎么解决分布式事务的问题的。

Seata架构:

b55a89715862a8386d98f1aa88463275.png

Seata架构

描述:

  • TM要求TC开始一个全新的事务,生成XID
  • XID贯穿调用链
  • RM注册本地事务
  • TM要求TC提交或者回滚
  • TC驱动XID下的本地事务进行提交或者回滚

Seata——AT模式:

d1e25f7947617d40d9f625c9dc1c4770.png

AT模式

645e21b84e9b87d4fa6a9e468f6bf2ac.png

AT模式

AT模式:

  • 无侵入的解决方案,业务只关注自己的SQL,框架会自动生成二阶段提交和回滚
  • 一阶段,业务数据和回滚日志数据记录在同一个事物中,释放资源
  • 二阶段,快速提交,或者通过log回滚,过程中通过lock进行互斥

Seata——TCC模式

1f74fdbb6cddea20ccf7310e6104d135.png

TCC模式交互图

TCC模式:

  • 第一阶段prepare,调用自定义行为
  • 第二阶段commit,调用commit行为
  • 第三阶段rollback,调用自定义rollback行为

以上就是结合我们的业务场景和实践经验总结的分布式事务的解决方案,每个公司的业务不同、场景不同,选取的方案自然有差别,没有最好的方案,只有最合适的方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值