分布式事务

本地事务

  • 本地事务是指单个数据库上的事务操作,一个本地事务允许一个数据库连接
  • 满足ACID(原子、一致、隔离、持久)刚性事务规范

分布式事务

  • 分布式事务属于柔性事务,满足CAP和BASE理论
  • CAP:指的是在一个分布式系统中,一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance),三者不可兼得。简单描述就是分布式系统一旦产生网络分区导致各节点数据未同步,此时要满足强一致性则需要阻塞等待,那么将牺牲可用性,反之不牺牲可用性则牺牲强一致性。
  • BASE:BA(Basic Availability 基本业务可用性)、S(Soft state 柔性状态)、E(Eventual consistency 最终一致性)。BASE理论是对CAP的补充,当分区时,为了满足可用性(及AP),而牺牲一致性,分区恢复后,数据还是要最终一致。
  • 柔性事务与刚性事务的区别,柔性事务放宽了一致、隔离性中间状态,以换取可用性和性能需求。

补充说明:

  • 分布式系统:一个系统的各组件、业务模块等,需要分别部署到不同部署单元(如物理机、容器、虚拟机等)上运行,并且他们之间相互协作,那么就构成了分布式系统。
  • 分布式强调的是职责分离和相互协作,集群强调的是负载均衡和高可用。
  • 数据一致性分为强一致性、弱一致性、最终一致性。最高也只能做到强一致,因为事务提交时,由于网络传输延迟,数据同步不可能不消耗时间。因此CAP理论是忽略网络延迟的。

分布式事务的产生2种原因

  1. 分库分表,由于多库操作,本地事务无法满足事务需求。
  2. 服务拆分,由于服务间相互调用,当涉及到数据操作时,非同一个数据库连接,本地事务无法满足事务需求。

柔性事务4种类型

  1. 两阶段型,代表模式有XA
  2. 补偿型,可选模式有AT、TCC、saga
  3. 异步确保型,异步确保是为了解决事务同步阻塞问题,其代表有MQ事务消息
  4. 最大努力通知型

解决分布式事务的2种基础理论或协议

  1. 2PC(两阶段提交),2个阶段,准备阶段提交阶段,2个角色,协调者参与者,两阶段提交虽然相对简单,但是有几个问题,如同步阻塞、数据不一致、单点故障、容错性低。
  2. 3PC(三阶段提交),3个阶段,相较于两阶段,三阶段提交对协调者和参与者引入了超时机制,并且在准备阶段后加入预提交来保证所有参与者事务状态。

基于2PC,常见分布式事务的4种解决方案(分布式事务模式)

  1. AT,一种无全局行锁的最终一致性分阶段事务模式,对业务代码有一定侵入性,但无需担心全量锁定问题。其机制是:一阶段解析sql并记录快照,二阶段可恢复快照。
  2. TCC,另一种最终一致性的分阶段事务模式,对业务代码有更强的侵入性,但性能比 AT 模式更高。其机制是:try(检查、预留资源)、confrim(确认则提交结果)/cancel(取消则释放预留资源),比如转账时先冻结转账所需额度,成功则提交,失败则解锁额度。
  3. saga,用于处理长时间运行的事务,同样具有较强的侵入性。其机制是:一阶段直接提交,并提供二阶段补偿接口。
  4. XA,强一致性的分段事务模式,牺牲了可用性。其机制是:事务管理器先协调事务参与者(资源管理器)预提交事务,如果全部成功再提交事务,否则回滚

其他思考:分布式数据库是做什么的,为了解决什么问题?

关系型数据库使用表格结构存储数据,强调数据的一致性和完整性。面对复杂场景很难满足高可靠、高性能、高可扩展的需求。

分布式数据库适用于大规模数据存储和处理的场景,将数据分散存储在多个服务器上,具有高可扩展性和高可靠性。但是带来了数据一致性和系统复杂性等的问题。

待完善...

你可能感兴趣的:(分布式)