分布式事务分享一点相关经验

2020-05-16  本文已影响0人  爱骑车的豆子

在传统的单体应用(包含单体应用的多份部署,比如使用反向代理等方式),业务code集中在一起,可以轻松保证事务的ACID;然而到了现在的微服务时代或者服务网格时代,单体应用被按照业务进行水平拆分,以前在一个事务内的业务代码被分散到了多个进程之中,随之带来了令人烦恼的分布式事务问题,如何保证进程之间事务完整性成为了微服务带来的难题,此篇将分享之前对分布式事务的研究,包含对几个业界知名框架的研究。

知名的CAP理论

file

CAP理论:指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)

分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP理论的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时C和P两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即在此情况下获得了CP系统,但是CAP不可同时满足。

基于CAP理论,分布式事务必须在AP和CP模式之间进行选择,而A(可靠性)对于在线业务来说又是不可或缺的,所以最后对于分布式事务的处理则演变为现在的AP加数据最终一致性方案。

最终一致性

异于事务的强一致性,强调的是结果,能够在较短的时间内完成数据的一致性,并不适用于对数据要求强一致性的场景,比如部分金融场景;实现最终一致性的方式也有很多,比如两段式提交,TCC(try confirm cancel),最大努力通知等。

开源实现

file

开源实现大部分都是2PC(两段式提交),方案提供一个高可用的TM,并提供对应的Client(相当于RM),利用注解切面的方式和远程调用是传递事务唯一标识,通过TM的协调进行监控,事务的提交回滚等。

最后,对于分布式事务的问题,个人强烈建议能避开还是避开,不论使用那种方式都存在需要人工介入处理的情况,正所谓天下无难事,只要肯放弃!哈哈哈!

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

上一篇下一篇

猜你喜欢

热点阅读