分布式事务与分布式锁区别及概念学习

一、 分布式事务

1.1 背景

传统事务ACID是基于单数据库的本地事务,仅支持单机事务,并不支持跨库事务。但随着微服务架构的普及,业务的分库分表导致一个大型业务系统往往由若干个子系统构成,这些子系统又拥有各自独立的数据库。往往一个业务流程需要由多个子系统共同完成,而且这些操作可能需要在一个事务中完成,这种事务即为“分布式事务”。当更新内容同时分布在不同库中,不可避免会带来跨库事务问题。跨分片事务也是分布式事务,没有简单的方案,一般可使用"XA协议"和"两阶段提交"处理。分布式事务能最大限度保证了数据库操作的原子性。但在提交事务时需要协调多个节点,推后了提交事务的时间点,延长了事务的执行时间。导致事务在访问共享资源时发生冲突或死锁的概率增高。随着数据库节点的增多,这种趋势会越来越严重,从而成为系统在数据库层面上水平扩展的枷锁。

1.2 最终一致性

对于那些性能要求很高,但对一致性要求不高的系统,往往不苛求系统的实时一致性,只要在允许的时间段内达到最终一致性即可,可采用事务补偿的方式。与事务在执行中发生错误后立即回滚的方式不同,事务补偿是一种事后检查补救的措施,一些常见的实现方法有:对数据进行对账检查,基于日志进行对比,定期同标准数据来源进行同步等等。事务补偿还要结合业务系统来考虑。

1.3 CAP和BASE理论

1.3.1、CAP

Consistency Acailability Partition tolerance 的简写

  • Consistency:一致性

    对某个客户端来说,读操作能够返回最新的写操作结果

  • Acailability:可用性

    非故障节点在合理的时间内返回合理的响应

  • Partition tolerance:分区容错性

    当出现网络分区后,系统能够继续提供服务。什么是网络分区?

    因为分布式系统中系统肯定部署在多台机器上,无法保证网络做到100%的可靠,所以网络分区一定存在,即P一定存在;在出现网络分区后,就出现了可用性和一致性的问题,我们必须要在这两者之间进行取舍,因此就有了两种架构:CP架构,AP架构;

1.3.2、AP和CP的选取

由于网络分区一定存在,所以要根据业务场景选取保证强一致性或可用性。

  • CP:强一致性的方案便是CP架构,即通过牺牲可用性来保证一致性,这种方案适用于对一致性要求很高的场景,比如金融交易等。

  • AP:在分布式系统中,除了特殊强一致性要求高的场景,业务往往更多追求的是可用性,它的关注程度比强一致性要高。AP更注重最终一致性,进而引出BASE理论。

1.3.3、BASE理论

BASE理论本质上是对CAP理论的延伸,是对 CAP 中 AP 方案的一个补充。BASE理论指的是基本可用 Basically Available,软状态 Soft Stat,最终一致性 Eventual Consistency,核心思想是即便无法做到强一致性,但应该可以有采用适合的方式保证最终一致性,BASE:Basically Available Soft Stat Eventual Consistency的简写。

  • BA:Basically Available 基本可用

  • 分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用

  • S:Soft Stat 软状态\n\n允许系统存在中间状态,而该中间状态不会影响系统整体可用性

  • E:Consistency 最终一致性

    系统中的所有数据副本经过一定时间后,最终能够达到一致的状态

1.3.4、柔性事务和刚性事务

提供强一致性的事务称之为刚性事务,把提供最终一致性的事务称之为柔性事务。刚性事务可以完全满足ACID四个特性,柔性事务一般遵循的是分布式领域中的BASE理论。

  • 柔性事务(如分布式事务)为了满足可用性、性能与降级服务的需要,降低一致性(Consistency)与隔离性(Isolation)的要求,遵循 BASE 理论,传统的 ACID 事务对隔离性的要求非常高,在事务执行过程中,必须将所有的资源对象锁定,因此对并发事务的执行极度不友好,柔性事务(比如分布式事务)的理念则是将锁资源对象操作从本地资源对象层面上移至业务逻辑层面,再通过放宽对强一致性要求,以换取系统吞吐量的提升。此外,虽然柔性事务遵循的是 BASE 理论,但是还需要遵循部分 ACID 规范。

  • 刚性事务(如单一数据库事务)完全遵循 ACID 规范,即数据库事务的四大基本特性ACID, 刚性事务满足ACID理论, 柔性事务满足BASE理论,追求基本可用,最终一致。

1.4 2PC(强一致性分布式事务)

二阶段提交(Two-phase Commit),是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段提交也被称为是一种协议(Protocol)。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。2PC是强一致性的算法。

二阶段提交算法的成立基于以下假设:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
学习分布式系统需要掌握多个方面的知识,包括分布式计算、分布式存储、分布式数据库分布式文件系统、分布式消息队列等等。以下是一个完整的学习路线: 1. 计算机网络基础知识:包括 TCP/IP 协议、HTTP 协议、DNS、负载均衡、CDN 等等。 2. 操作系统基础知识:包括进程管理、线程管理、内存管理、文件系统等等。 3. 数据库基础知识:包括关系型数据库、NoSQL 数据库、ACID 和 BASE 等概念。 4. 分布式计算:包括分布式计算模型、分布式任务调度、分布式锁分布式算法等等。 5. 分布式存储:包括分布式文件系统、分布式对象存储、分布式块存储等等。 6. 分布式数据库:包括分布式事务分布式一致性、分布式锁分布式缓存等等。 7. 分布式消息队列:包括消息队列的基本概念、消息队列的应用场景、消息队列的实现原理等等。 8. 微服务架构:包括微服务架构的设计原则、微服务架构的实现方式、微服务架构的优缺点等等。 9. 容器技术:包括 Docker、Kubernetes 等容器技术的基本概念、容器编排、容器网络等等。 10. 云计算基础知识:包括云计算的基本概念、云计算的服务模型、云计算的部署架构等等。 以上是一个比较完整的学习路线,如果你想深入学习分布式系统,还需要不断地学习和实践,了解最新的技术发展动态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liumce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值