分布式事务 学习

分布式事务

关系型数据库事务(本地事务)

  • 原子性:构成事务的所有操作,要么都执行完成,要么都不执行/
  • 一致性:在事务执行前后,数据库的一致性约束没有被破坏。
  • 隔离性:并发的两个事务的执行互不干扰
  • 持久性:事务完成后,事务对数据的更改会被持久化到数据库,且不会被回滚。

分布式事务 :涉及多个事务之间网络远程协作的事务

微服务之间通过网络(HTTP)通信。

产生场景:
  • 微服务架构,跨JVM进程产生分布式事务
  • 单体系统访问多个数据库实例,跨数据库实例
  • 多服务访问同一个数据库实例,跨JVM进程,两个微服务持有不同的数据库连接。

CAP理论: 一致性、可用性、分区容忍性

分布式事务控制到哪个程度呢?

  • 具备P市,C、A不能共存
一致性

强一致性: 任何事件查询每个结点的数据都一致。

分区容忍性
  • 通常,分布式系统的各结点部署在不同的子网,就是网络分区。不可避免地会出现,因为网络问题导致结点间通信失败。节点间通信失败时,仍然可对外提供服务就是分区容忍性。
    目标:
  • 主数据库向数据库同步数据失败不印象读写操作。
  • 其中一个结点挂了,不影响其他节点
    实现:
  • 异步取代同步(结点间松散耦合)
  • 一主多从
    分区容忍性是分布式系统具备的基本能力
AP

放弃一致性

CP

放弃可用性

CA

放弃分区容忍性,不进行分区。不考虑网络不同或者结点挂掉的情况。不是标志的分布式系统。常用的关系型数据库

BASE理论(AP的扩展)

强一致性和最终一致性

Basically Available、 Soft state、Eventually consistent

柔性事务

  • 出现故障时,允许部分不可用,包装核心功能可用
  • 最终一致性
  • 软状态: 比如支付中、数据同步中… …

分布式事务解决方案

2PC

两阶段提交协议[准备阶段、提交阶段]
整个事务过程由事务管理器和参与者组成
事务管理器决策事务的提交和回滚。事务参与者负责自己本地事务的提交和回滚。
分布式事务 学习_第1张图片
分布式事务 学习_第2张图片

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模式的分布式事务解决方案

分布式事务 学习_第3张图片

TCC: [try cancel Confirm]

try阶段都成功就认为一定能成功;如果Confirm失败则重试,或人工介入处理;
如果有try失败,就回滚成功try的资源。因为try时做了资源预留等操作。

分布式事务 学习_第4张图片

  • 幂等问题:幂等是指:同一个操作,无论请求多少次,其结果都相同。解决:增加执行状态,每次执行前都查询该状态。
  • 空回滚:没调用try,却调用了Cancel方法。出现原因:一个分支事务所在服务宕机或网络异常,分支事务记录为失败,这时其实没有执行try方法,但是故障恢复后,分布式事务进行回滚调用二阶段的Cancel方法,从而形成空回滚。解决:第一阶段Try方法中插入记录表示第一阶段执行了,Cancel接口读取该记录,判断是否执行了Try.
  • 悬挂:对于分布式事务,其二阶段Cancel比Try接口先执行。出现原因:
    分布式事务 学习_第5张图片
TCC解决方案

分布式事务 学习_第6张图片
Hmily

分布式事务 学习_第7张图片

可靠消息最终一致性方案

你可能感兴趣的:(java学习笔记,分布式,学习)