微服务实战(十三)初探微服务分布式事务 - Seata AT

本章主要内容

本章我们主要了解一下分布式事务的概念、目前市面上的解决方案、以及在微服务中如何实现分布式事务。

什么是事务,什么是ACID

首先,提到分布式事务,咱们得明白什么是事务(Transaction),百科的链接放这里咯,事务应该具有4个属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。这四个属性通常称为ACID特性

举例:我们把这件事看做一个事务:“张三有300元,李四有500元,张三转账100给李四,李四又转回50给张三,最后张三有250元,李四有550元” 。   

原始状态--张三有300元,李四有500元

操作--张三转账100给李四,李四又转回50给张三

结果--张三有250元,李四有550元

原子性 atomicity: 一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。即“张三转账100给李四,李四又转回50给张三”这套操作,要么全做,要么不做。

一致性(consistency)务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。实际上跟原子性是同一回事,只不过从不同角度来看,一致性是从结果的角度出发,即如果“操作”发生,那么“结果”就是“张三有250元,李四有550元”,而如果不发生,则“结果”是 “张三有300元,李四有500元”,在这件事上,不允许出现其他“结果”。

隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。   在我们这个事务中,假如在做“张三转账100给李四,李四又转回50给张三” 这个过程中,突然有个王五给张三转了100元,那么就干扰了我们这个事务的结果,在数据库中,通过锁机制来让有资源冲突的事务不能并行,即王五的转账必须等我们当前这个事务执行完有结果后才能开始。

持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 按照字面就很好理解了,我们对数据进行改变后,就保存了,除非有其他正常操作来改变这个值,不然这个值就永久不变了。

什么是分布式事务

 

  1. 刚性事务:遵循ACID原则,强一致性。
  2. 柔性事务:遵循BASE理论,最终一致性;与刚性事务不同,柔性事务允许一定时间内,不同节点的数据不一致,但要求最终一致。

分布式事务是指在分布式的环境下实现事务(目前主要是讲柔性事务),那什么是分布式环境呢?即跨服务器、跨数据库的环境,比如之前提到的示例,非分布式事务(本地事务)可以看成整个示例在同一个数据库里执行,而分布式环境下,可能不同用户的余额按照规则被放到不同的数据库里,可能交易服务器和账户服务器也不在同一个服务器中。

本地事务的实现逻辑是这样的: 库A   开启事务-->库A "张三转账100给李四" -->库A  提交/回滚事务

而到了分布式环境࿱

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值