给女朋友的一次转账,引发了我对分布式事务的深刻思考!

dotNET全栈开发

共 1751字,需浏览 4分钟

 ·

2020-12-08 15:57

昨天终于发工资了,第一反应就是想给女朋友一个惊喜,打开银行的APP工资转钱给女朋友,不料,出现了这样的提示界面:

过了一会,APP又提示这样的错误:
刚才明明已经扣款了,却提示转账失败,我开始焦虑了,还好,不一会儿,收到银行的消息,转账失败的钱,已经退还给我了。为啥卡里扣钱那么迅速,而对方却要几秒才能到账?并且转账失败后,扣除的钱还能及时的返还到我的卡里?万一钱返还失败怎么办?又或者我转一次钱,对方却收到了两次转账的申请又该如何?带着这些问题,我脑海中浮现出“分布式事务”这个概念。


先说事务,我们将对数据库的单个或多个操作序列的执行定义为事务,这些操作要么全做,要么全不做,是一个不可分割对工作单位

事务拥有以下四个特性,习惯上被称为ACID特性:
  1. 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  2. 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外,一致性还有另外一层语义,就是事务的中间状态不能被观察到。
  3. 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行,如同只有这一个操作在被数据库所执行一样。
  4. 持久性:已被提交的事务对数据库的修改应该永久保存在数据库中。在事务结束时,此操作将不可逆转。
那什么是分布式事务呢?分布式事务与单机事务一样都是由一组操作序列组成,不同的是单机事务只是在单机上执行,而分布式事务则是在多台机器上执行。分布式事务执行的过程中,要比单机事务复杂的多,因为分布式事务除了要保证各个子事务的ACID特性外,还需要对这些子事务进行协调,决定各个子事务的提交与回滚,以保证全局事务的ACID特性。


对于分布式事务来讲,全局事务的正确执行依赖各个子事务的正确执行。只有当各个局部操作都正确执行后,全局事务才可以提交,当发生异常要回滚全局事务时,所有局部操作也应回滚。因此,所有子事务均正确提交是分布式事务提交的前提。为实现分布式事务的提交,普遍采用两阶段提交协议(2 Phase Commit),简称2PC协议。

为什么需要学习分布式事务?因为分布式事务可以解决这几个问题。第一个是业务的并发要求非常高,对应的业务操作不能在同一个数据库中完成,也就是说不能通过数据库本身的事务实现。第二个是资源的分布问题(比较常见),有的业务资源是部门A负责的,有的业务资源是部门B负责的,这样的情况下怎么实现一个事务。第三个是大时间跨度的问题,完成一个事务需要很长很长时间,这种情况怎么处理?

分布式事务不仅是处理高并发以及数据同步的利器,也是.NET高级开发/架构师必备技能,12月8日~10日,资深架构师Tony老师,将开启《分布式事务实战》专题,课程以实战为主,案例均来自于JD项目真实场景,课程全网首发,仅开放了200个学习名额,本号粉丝,可白嫖免费扫码加入!

重要:
课程安排

DAY1:同步分布式事务解决方案Saga
1、分布式事务核心--Cap理论
2、分布式事务有哪些应用场景
3、同步分布式事务Tcc和Saga差别在哪里
4、分布式事务Saga在.Net5微服务中如何落地
5、Saga分布式事务如何保证高并发/高可用特性

DAY2:异步分布式事务解决方案本地消息表
1、异步分布式事务到底是什么
2、哪些场景会应用异步分布式事务
3、Saga方案和本地消息表方案本质区别
4、.Net5微服务中如何落地实现本息消息表
5、本地消息表方案落地后有哪些缺陷值得注意

DAY3:数据库分布式事务解决方案2PC/3PC
1、什么是刚性事务2PC/3PC
2、分布式事务2PC和3PC之间根本联系和区别
3、2PC/3PC核心应用时机
4、.Net5微服务中2PC/3PC如何进行最佳实践
5、2PC/3PC本质缺陷在哪里?如何解决?
6、2PC/3PC能够带来哪些扩展与启示


长按扫码,免费入群学习

如遇扫码失败,请添加下方微信
微信号:ruanmou_xy

超多资料,免费领取




浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报