本文只做引荐,大概说一些自己的理解
分布式事物几种解决方案
分布式不存在绝对的事物处理!!!
大概四种解决方案
- 基于消息队列最终一致性;
- TCC型解决方案;
- 二阶段提交强一致性;
- LCN:https://github.com/codingapi/tx-lcn
- 阿里GTS:https://help.aliyun.com/product/48444.html
上面几种不理解各位的可以自行百度,大家理解的都不一样,所以不多说,怕误导各位。
个人感觉LCN比较适合,就是把整个操作加入一个事务组,然后每一步操作都去对事务组进行一个反馈,当某个业务出现异常,对加入事务组中业务进行回滚,只有当最后一步完全成功时,再向事务组发送commit操作,至此,整个事物结束。LCN比较符合下面所说的第二种情况。
这其中也可以进行一个日志记录,如果某个过程出错,手动操作(比较麻烦),大家有兴趣可以试试日志。
常见的一些简单事物,简单说一下:
比如:我下单买某个平台的数字货币,首先进行我的订单处理(简称A服务),然后在操作的同时去付款(简称B服务)。
-
第一种:
我的A服务修改成功,但B服务出现异常,这时可以try然后返回错误状态码,A服务那边接收 错误状态码,对整个方法的事物进行回滚。 -
第二种:
我的A服务修改成功,但B服务修改成功,再到A服务来修改,但是这时A服务失败了,这时没法让B服务回滚,我们该怎么办?
可以使用mq建立一个事物中心,A服务和B服务都不使用事物,一旦一方出现异常,可以用try捕捉,然后向mq发送消息,mq监听到失败之后手动回滚脏数据,可以修改或者删除。其实也可以使用日志进行记录,再手动改,不过比较麻烦。 -
可能说的不是很透彻,都是一个理解和实践的过程。各位同僚有更好的理解可以留言一起探讨一波
最后
大家编程快乐
欢迎关注公众号:慌途L
后面会慢慢将文章迁移至公众号,也是方便在没有电脑的时候可以进行翻阅,更新的话会两边同时更新,大家不用担心!