业务量级扩大之后的分库,以及微服务落地之后的业务服务化,都会产生分布式数据不一致的问题。既然本地事务无法满足需求,因此分布式事务就要登上舞台。
什么是分布式事务?我们可以简单地理解,它就是为了保证不同数据库的数据一致性的事务解决方案。
CAP原则和BASE理论
CAP原则是Consistency(一致性)、Availability(可用性)和Partition-tolerance(分区容错性)的缩写,它是分布式系统中的平衡理论。在分布式系统中,一致性要求所有节点每次读操作都能保证获取最新数据;可用性要求无论任何故障产生后都能保证服务仍然可用;分区容错性要求被分区的节点可以正常对外提供服务。事实上,任何系统只可同时满足其中两个,无法三者兼顾。对于分布式系统而言,分区容错性是一个最基本的要求。那么,如果选择了一致性和分区容错性,放弃可用性,那么网络问题会导致系统不可用。如果选择可用性和分区容错性,放弃一致性,不同的节点之间的数据不能及时同步数据而导致数据的不一致。
BASE理论针对一致性和可用性提出了一个方案,BASE是Basically Available(基本可用)、Soft-state(软状态)和Eventually Consistent(最终一致性)的缩写,它是最终一致性的理论支撑。简单地理解,在分布式系统中,允许损失部分可用性,并且不同节点进行数据同步的过程存在延时,但是在经过一段时间的修复后,能够达到数据的最终一致性。BASE强调的是数据的最终一致性。相比于ACID而言,BASE通过允许损失部分可用性来获得一致性。
比较常用的分布式事务解决方案包括强一致性的两阶段提交协议、三阶段提交协议,以及最终一致性的可靠事件模式、补偿模式、阿里的TCC模式。
其中,XA协议是一个分布式事务协议,它有两个角色:事务管理者和资源管理者。我们可以把事务管理者理解为协调者,而把资源管理者理解为参与者。XA协议通过二阶段提交协议保证强一致性。顾名思义,二阶段提交协议具有两个阶段:第一阶段准备,第二阶段提交。
三阶段提交协议,三阶段提交协议很好地解决了二阶段提交协议带来的同步阴塞问题,是一个非常有参考意义的解决方案。但是,极小概率的场景下可能会出现数据的不一致性。因为三阶段提交协议引入了超时机制,如果出现资源管理者(参与者)超时场景就会默认提交成功,如果其没有成功执行,或者其他资源管理者(参与者)出现回滚,那么就会出现数据的不一致性。二阶段提交协议存在诸多潜在问题,因此三阶段提交协议出台了。三阶段提交协议是二阶段提交协议的改良版本,它与二阶段提交协议的不同之处在于引入了超时机制来解决“同步阻塞”问题,此外加入了预备阶段,尽可能提早发现无法执行的资源管理者(参与者)并终止事务,如果全部资源管理者(参与者)都可以完成,才发起第二阶段的准备和第三阶段的提交。否则,其中任何一个资源管理者(参与者)回复执行,或者超时等待,那么就终止事务。总结一下,三阶段提交协议包括第一阶段预备、第二阶段准备和第二阶段提交。
三阶段提交协议很好地解决了二阶段提交协议带来的同步阻塞问题,是一个非常有参考意义的解决方案。但是,极小概率的场景下可能会出现数据的不一致性。因为三阶段提交协议引入机制,如果出现资源管理者(参与者)超时场景就会默认提交成功,如果其没有成功执行,或者其他资源管理者(参与者)出现回滚,那么就会出现数据的不一致性。
引自《高可用可伸缩微服务架构:基于Dubbo、Spring Cloud和Service Mesh》
网友评论