你必须了解的分布式事务解决方案

温馨提示:文章很干,请多喝水

img

什么是分布式事务

什么是事务想必大多数朋友应该都很清楚了,不清楚的可以看前面的文章《》。

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。

简单来说,就是一个大的操作由 N 个小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。比如存在一个订单的微服务,一个库存的微服务,当订单完成需要同步减少库存,这时候就要在事务上确保完整和一致。

相关理论

关于事务的特性(ACID)隔离级别这里就不再重复介绍了,可以看前面的文章,这里着重介绍下两个新的知识:CAP 理论BASE 理论。

CAP 理论

一致性Consistency)在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。

可用性Availability) 一直可以正常的做读写操作。简单而言就是客户端一直可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题。

分区容错性PartitionTolerance)指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。事实上我们在设计分布式系统是都会考虑到 bug、硬件、网络等各种原因造成的故障,所以即使部分节点或者网络出现故障,我们要求整个系统还是要继续使用的

CAP 是一个已经被证实的理论,在分布式系统中最多只能同时满足这三项中的两项,而分区容错性是分布式系统必须满足的,所以在分布式系统中常见的组合就是 CP 和 AP

CP:放弃可用性,注重一致性和分区容错性,其实这就是所谓的强一致性,可能在银行跨行转账这种强一致业务场景才会用到,具体得根据业务场景做取舍。

AP:放弃强一致性,注重可用性和分区容错性,这是现在绝大多数分布式业务场景的选择,只要最后能保证最终一致性( BASE 理论)即可。

BASE 理论

基本可用Basically Available)基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

软状态Soft State)软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。MySQL Replication 的异步复制也是一种体现。

最终一致性Eventual Consistency)最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

常见解决方案 1、两阶段提交

两阶段提交(Two-phaseCommit),简称为 2PC,两阶段提交是一种强一致性设计,它引入一个事务协调者的角色来协调管理各个参与者(也可称之为各本地资源)的提交和回滚。

所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。

准备阶段(Prepare Phase):首先协调器会向所有的参与者发送准备提交或者取消提交的请求,然后会收集参与者的决策。

提交阶段(Commit Phase):协调者会收集所有参与者的决策信息,当且仅当所有的参与者向协调器发送确认消息时协调器才会提交请求,否则执行回滚或者取消请求。

img

2PC 存在的问题:

同步阻塞:所有的参与者都是事务同步阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。

单点故障:一旦协调者发生故障,系统不可用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggwgw.html