• 分布式事务理解


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

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

    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中 有现成的解决方案。

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

  • 相关阅读:
    sqlserver 配置管理器中无法启动sqlserver服务
    9.4笔记
    ASP.NET 正则表达式验证
    ASP.NET之OnClientClick 事件
    ASP.NET之js 根据textbox变化刷新相关数据
    SQL
    leetcode:Roman to Integer(罗马数字转化为罗马数字)
    leetcode:Integer to Roman(整数转化为罗马数字)
    leetcode:Palindrome Number
    leetcode:String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/takemyjavalisfe/p/10059309.html
Copyright © 2020-2023  润新知