• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
没心情
Beauty begins the moment you decide to be yourself.
博客园    首页    新随笔    联系   管理    订阅  订阅
分布式事务理解

最近因为工作的原因,涉及到分布式事务,只知道分布式事务是当今比较流行的,是基于微服务盛行的今天,分布式事务是必不可少的在我们的工作中。

实现分布式事务的几种方式:

1、基于数据库(操作简单)

2、基于zookeeper

3、基于redis的(效率高,现在大多数在用的)

大体知道这些,但是具体的更深入的就不太明白,所以今天就趁这个机会,上网搜索了一些资料,汇总了一些前辈的总结,来整明白分布式事务到底是什么,怎么用,再工作中如何实现。、

一:分布式事务的几个特性:

原子性 ,一致性,隔离性(独立性),持久性 (单机上)

二:对于集群的环境下:

需要引入几个新的理论原则来适应这种集群的情况,

1、就是 CAP 原则或者叫CAP定理,那么CAP定理指的是什么呢?

  • 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效)
  • 可用性(Availability) : 每个操作都必须以可预期的响应结束
  • 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成

2、BASE理论

在分布式系统中,我们往往追求的是可用性,它的重要程序比一致性要高,那么如何实现高可用性呢? 前人已经给我们提出来了另外一个理论,就是BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是:

  • Basically Available(基本可用)
  • Soft state(软状态)
  • Eventually consistent(最终一致性)

BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

 

三:实现分布式事务,无外乎那几种解决方案

1、两阶段提交(2PC)

优点: 尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。(其实也不能100%保证强一致)

缺点: 实现复杂,牺牲了可用性,对性能影响较大,不适合高并发高性能场景,如果分布式系统跨接口调用,目前 .NET 界还没有实现方案。

2、补偿事务(TCC)

TCC 其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段:

  • Try 阶段主要是对业务系统做检测及资源预留

  • Confirm 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功。

  • Cancel 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。

  • 优点: 跟2PC比起来,实现以及流程相对简单了一些(补偿事务较为简单一些),但数据的一致性比2PC也要差一些(补偿事务数据的一致性比2pc要相对差一些)

    缺点: 缺点还是比较明显的,在2,3步中都有可能失败。TCC属于应用层的一种补偿方式,所以需要程序员在实现的时候多写很多补偿的代码,在一些场景中,一些业务流程可能用TCC不太好定义及处理。 

3、本地消息表(异步确保)将分布式事务拆分成本地事务进行处理

优点: 一种非常经典的实现,避免了分布式事务,实现了最终一致性。在 .NET中 有现成的解决方案。

缺点: 消息表会耦合到业务系统中,如果没有封装好的解决方案,会有很多杂活需要处理

 

posted on 2018-12-03 16:37  No-心情  阅读(229)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3