分布式事物几种解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载,如需转载请注明原博文出处! https://blog.csdn.net/qq_25112523/article/details/84147495

本文只做引荐,大概说一些自己的理解


分布式事物几种解决方案

分布式不存在绝对的事物处理!!!

大概四种解决方案

  1. 基于消息队列最终一致性;
  2. TCC型解决方案;
  3. 二阶段提交强一致性;
  4. LCN:https://github.com/codingapi/tx-lcn

上面几种不理解各位的可以自行百度,大家理解的都不一样,所以不多说,怕误导各位。

个人感觉LCN比较适合,就是把整个操作加入一个事务组,然后每一步操作都去对事务组进行一个反馈,当某个业务出现异常,对加入事务组中业务进行回滚,只有当最后一步完全成功时,再向事务组发送commit操作,至此,整个事物结束。这其中也可以进行一个日志记录,大家有兴趣可以试试。

常见的一些简单事物,简单说一下:

比如:我下单买某个平台的数字货币,首先进行我的订单处理(简称A服务),然后在操作的同时去付款(简称B服务)。

  • 第一种:
    我的A服务修改成功,但B服务出现异常,这时可以try然后返回错误状态码,A服务那边接收 错误状态码,对整个方法的事物进行回滚。

  • 第二种:
    我的A服务修改成功,但B服务修改成功,再到A服务来修改,但是这时A服务失败了,这时没法让B服务回滚,我们该怎么办?
    可以使用mq建立一个事物中心,A服务和B服务都不使用事物,一旦一方出现异常,可以用try捕捉,然后向mq发送消息,mq监听到失败之后手动回滚脏数据,可以修改或者删除。其实也可以使用日志进行记录,再手动改,不过比较麻烦。

  • 可能说的不是很透彻,都是一个理解和实践的过程。各位同僚有更好的理解可以留言一起探讨一波

最后

大家编程快乐
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_25112523/article/details/84147495