分布式事务
关系型数据库事务(本地事务)
- 原子性:构成事务的所有操作,要么都执行完成,要么都不执行/
- 一致性:在事务执行前后,数据库的一致性约束没有被破坏。
- 隔离性:并发的两个事务的执行互不干扰
- 持久性:事务完成后,事务对数据的更改会被持久化到数据库,且不会被回滚。
分布式事务 :涉及多个事务之间网络远程协作的事务
微服务之间通过网络(HTTP)通信。
产生场景:
- 微服务架构,跨JVM进程产生分布式事务
- 单体系统访问多个数据库实例,跨数据库实例
- 多服务访问同一个数据库实例,跨JVM进程,两个微服务持有不同的数据库连接。
CAP理论: 一致性、可用性、分区容忍性
分布式事务控制到哪个程度呢?
- 具备P市,C、A不能共存
一致性
强一致性: 任何事件查询每个结点的数据都一致。
分区容忍性
- 通常,分布式系统的各结点部署在不同的子网,就是网络分区。不可避免地会出现,因为网络问题导致结点间通信失败。节点间通信失败时,仍然可对外提供服务就是分区容忍性。
目标: - 主数据库向数据库同步数据失败不印象读写操作。
- 其中一个结点挂了,不影响其他节点
实现: - 异步取代同步(结点间松散耦合)
- 一主多从
分区容忍性是分布式系统具备的基本能力
。
AP
放弃一致性
CP
放弃可用性
CA
放弃分区容忍性,不进行分区。不考虑网络不同或者结点挂掉的情况。不是标志的分布式系统。常用的关系型数据库。
BASE理论(AP的扩展)
强一致性和最终一致性
Basically Available、 Soft state、Eventually consistent
柔性事务
:
- 出现故障时,允许部分不可用,包装核心功能可用
- 最终一致性
- 软状态: 比如支付中、数据同步中… …
分布式事务解决方案
2PC
两阶段提交协议[准备阶段、提交阶段]
整个事务过程由事务管理器和参与者组成
事务管理器决策事务的提交和回滚。事务参与者负责自己本地事务的提交和回滚。
2PC解决方案:
XA方案
2BC的传统方案在数据库层面实现。
DTP分布式事务处理模型
- 角色:
- AP:应用程序,使用DTP分布式事务的程序。
- RM:资源管理器
- TM:事务管理器
- 基于数据库的XA协议来实现2PC又称为XA方案,XA : 2PC接口协议。
TM向AP提供应用程序编程接口,AP通过TM提交及回滚事务
TM交易中间件通过XA接口来通知RM数据库事务的开始、结束以及提交、回滚
问题:依赖于数据库,要求数据库支持2PC协议;准备阶段没有正式提交。资源锁需要等两个阶段结束才会释放。
Seata方案
开源的分布式事务框架
。性能较好。对业务0侵入。提供2PC及TCC模式的分布式事务解决方案
TCC: [try cancel Confirm]
try阶段都成功就认为一定能成功;如果Confirm失败则重试,或人工介入处理;
如果有try失败,就回滚成功try的资源。因为try时做了资源预留等操作。
幂等问题
:幂等是指:同一个操作,无论请求多少次,其结果都相同。解决:增加执行状态,每次执行前都查询该状态。空回滚
:没调用try,却调用了Cancel方法。出现原因:一个分支事务所在服务宕机或网络异常,分支事务记录为失败,这时其实没有执行try方法,但是故障恢复后,分布式事务进行回滚调用二阶段的Cancel方法,从而形成空回滚。解决:第一阶段Try方法中插入记录表示第一阶段执行了,Cancel接口读取该记录,判断是否执行了Try.悬挂
:对于分布式事务,其二阶段Cancel比Try接口先执行。出现原因:
TCC解决方案
Hmily