本地事务
在计算机中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠数据库来控制事务,而数据库统称和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。
分布式事务
分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由于不同的服务之间网络远程协作完成事务称之为分布式事务,例如用户注册送积分事务,创建顶戴减库存事务。
分布式事务产生场景
分布式事务基础理论
CAP是什么
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)
为了方便对CAP理论的解释,我们节后电商系统中的一些应用场景来解释CAP
整体执行流程:
1、商品服务请求主数据库写入商品信息(添加商品、修改商品、删除商品)
2、主数据向商品服务响应写入成功
3、商品服务请求从数据库读取商品信息
C:Consistency(一致性)
一致性是指写入操作或的读取操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意节点读取到的数据都是最新状态。
上图中,商品信息的读取要满足一致性就要实现如下目标:
1、商品服务吸入主数据成功,则向从数据库查询新数据也成功
2、商品服务写入主数据库失败,则向从数据库查询新数据也失败
如何实现一致性?
1、写入主数据库后要将数据同步到从数据库
2、写入主数据库后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,以免在新数据写入成功后,向从数据库查询到旧的数据
分布式系统一致性的特点:
1、由于粗壮数据同步的过程,写入操作的响应会有一定的延迟
2、为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源
3、如果请求数据同步失败的节点,则会返回错误信息,一定不会返回旧数据
A:Availability(可用性)
可用性是指任何事务操作都可以得到响应结果,且不会出现响应超时或响应错误
上图中,商品信息读取满足可用性就是要实现如下目标:
1、从数据库接收到查询的请求则立即能够响应数据查询结果
2、从数据库不允许出现响应超时或响应错误
如何实现可用性?
1、写入主数据库后要将数据同步到从数据库
2、由于要保证从数据库的可用性,不可将从数据库中的资源进行锁定
3、即使数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据,如果连旧数据也没有则可以按照约定返回一个默认信息,但不能返回错误或响应超时
分布式系统可用性特点:
所有请求都有响应,且不会出现响应超时或响应错误
P:Partition tolerance(分区容错性)
通常分布式系统的各个节点都部署在不同的子网,这就是网络分区,不可避免的出现由于网络问题而导致节点之间通信失败,此时人可对外提供服务,这叫分区容错性
上图中,商品信息读写满足分区容错性要实现如下目标:
1、主数据库向从数据库同步数据失败不影响写操作
2、其中一个节点挂掉不影响另一个节点对外提供服务
如何实现分区容错性?
1、尽量使用异步取代同步操作,例如使用异步方式将数据从主数据库同步到从数据库,这样节点之间就能有限的实现松耦合
2、添加从数据库节点,其中一个从节点挂掉其他从节点提供服务
分布式分区容错性特点:
分区容错性是分布式系统具备的基本能力
在所有分布式事务场景中不会同时具备CAP三个特性,因为在具备了P的前提下C和A是不能共存的
本图分区容错性的含义是:
1、主数据库通过网络想从数据库同步数据,可以认为主数据库部署在不同的分区,通过网络进行交互
2、当主数据库和从数据库之间网络出现问题不影响主数据和从数据库对外提供服务
3、其中一个节点挂掉不影响另一个节点对外提供服务
如果要实现C则必须保证数据一致性,在数据同步的时候为防止向从数据库查询不一致的数据则需要将从数据库数据锁定,待同步完成后解锁,如果同步失败从数据库要返回错误信息或超时信息
如果要实现A则必须保证数据可用性,不管任何时候都可以向从数据库查询数据,则不会响应超时或返回错误信息
通过分析发现咋满足P的前提下C和A存在矛盾性。
所以在生产中对分布式事务处理时需要根据需要来确定满足CAP的哪两个方面
1、AP
放弃一致性,追求分区容错性和可用性,这是很多分布式系统设计时的选择
通常实现AP都会保证最终一致性,例如:订单退款,今日退款成功,明日账号到账
2、CP
放弃可用性,追求一致性和分区容错性,我们的zookeeper其实就是追求的强一致性,又比如跨行转账,一次转账要求要等待双方银行系统都完成整个事务才算完成
3、CA
放弃分区容错性,即不尽兴分区,不考虑由于网络不通或节点挂掉的问题,则可以实现一致性和可用性,那么系统将不是一个标准的分布式系统,我们最常用的关系型数据就满足了CA
BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
基本可用(Basically Available): 基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
软状态(Soft State): 软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。MySQL Replication 的异步复制也是一种体现。
最终一致性(Eventual Consistency): 最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
什么是2PC
2PC即两阶段提交协议,是将真个事务流程分为两个阶段,准备阶段、提交阶段,2是指2个阶段,P是指准备阶段,C是指提交阶段
XA解决方案
执行流程如下:
总结:



