0%

分布式事务

文章字数:1203,阅读全文大约需要4分钟

分布式事务

  1. 是什么
  • 分布式事务就是一次大的事务操作由不同的小操作组成,这些小操作分布在不同的服务器上
  • 分布式事务需要保证不同服务器上的小操作要不全部失败,要不全部成功。本质上是要保证数据库数据一致性
  1. 为什么需要分布式事务
  • 当数据库单表一年产生数据超过1000W时就需要考虑分表,将一个数据库分成多个数据库。保证这些数据库的数据一致性就需要分布式事务
  • 应用业务服务化(SOA),将之前单机应用变成由服务组成的微服务系统。分离出入订单系统用户中心库存中心订单中心等。每个微服务都有自己的数据库。例如提交订单的操作,需要订单和库存同时操作,所以需要分布式事务保证下单成功库存减少,下单失败库存不变。

事务的特性ACID

  1. 原子性A
    整个事务中所有操作要不同时完成,要不全部失败
  2. 一致性C
    事务的执行必须保证系统的一致性,只要事务成功了,事务的操作就一定要体现在数据库中
  3. 隔离性I
    事务之间不会相互影响,一个事物的中间状态不会被其它事务感知
  4. 持久性D
    事务完成了之后事务对数据的操作就会完全保存在数据库中,停电宕机也会保存

基于XA协议的两阶提交

  1. 名词解释
  • XA是一个分布式事务协议,主要分为两个部分事务管理器本地资源管理器
  • 本地资源管理器通常由数据库实现,负责本地资源的提交和回滚
  • 事务管理器作为全局调度者,负责调度本地资源
  1. 步骤
  • 第一阶段:事务管理器通知各个本地资源管理器预备操作,本地资源管理器回复就绪(锁住资源)
  • 第二阶段:事务管理器通知本地资源管理器提交,本地资源管理器回复成功
  1. 优缺点
  • 优点是协议简单,大部分商业数据库(OracleDB2等)都实现了XA协议,使用分布式的成本较低。
  • 缺点是性能差,在mysql中支持不理想(没有prepare阶段日志,准备切换回导致主库和备库数据不一致),很多nosql也没有XA的支持。这些缺点也导致其应用狭隘

基于消息事务实现的最终一致性事务

  1. 解释
  • 消息事务就是基于消息中间件的两阶段提交,是对消息中间件的特殊利用。此方法实现的事务是最终一致性,并不能保证实时一致。
  1. 步骤
  • 系统A发送预备消息给中间件
  • 中间件保存预备消息并返回
  • 系统A执行本地事务
  • 执行结束后发送给消息中间件
  • 消息中间件保存信息并发送给其它系统
  • 其它系统执行本地事务并返回(如果失败中间件会重复发送)
  • mq将最终执行结果返回系统A
  1. 优缺点
  2. 性能好
  3. 缺点是如果其它系统一直不成功,会破坏一致性。

TCC编程模式

  • 根据业务决定具体代码实现
  • 一种编程框架,吧业务逻辑分为Try``Confirm``Cancel三个操作
  • 例如下单,Try就是去库存,Confirm是更新订单,Cancel是失败恢复库存
  • 本质是人为进行两段式提交