JAVA:.NET5兄,听说你要将"分布式事务"拱上"神坛" ?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA:.NET5兄,听说你要将"分布式事务"拱上"神坛" ?相关的知识,希望对你有一定的参考价值。
昨天终于发工资了,第一反应就是想给女朋友一个惊喜,打开银行的APP工资转钱给女朋友,不料,出现了这样的提示界面:
刚才明明已经扣款了,却提示转账失败,我开始焦虑了,还好,不一会儿,收到银行的消息,转账失败的钱,已经退还给我了。为啥卡里扣钱那么迅速,而对方却要几秒才能到账?并且转账失败后,扣除的钱还能及时的返还到我的卡里?万一钱返还失败怎么办?又或者我转一次钱,对方却收到了两次转账的申请又该如何?带着这些问题,我脑海中浮现出“分布式事务”这个概念。
先说事务,我们将对数据库的单个或多个操作序列的执行定义为事务,这些操作要么全做,要么全不做,是一个不可分割对工作单位。
-
原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
-
一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外,一致性还有另外一层语义,就是事务的中间状态不能被观察到。
-
隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行,如同只有这一个操作在被数据库所执行一样。
-
持久性:已被提交的事务对数据库的修改应该永久保存在数据库中。在事务结束时,此操作将不可逆转。
那什么是分布式事务呢?分布式事务与单机事务一样都是由一组操作序列组成,不同的是单机事务只是在单机上执行,而分布式事务则是在多台机器上执行。分布式事务执行的过程中,要比单机事务复杂的多,因为分布式事务除了要保证各个子事务的ACID特性外,还需要对这些子事务进行协调,决定各个子事务的提交与回滚,以保证全局事务的ACID特性。
对于分布式事务来讲,全局事务的正确执行依赖各个子事务的正确执行。只有当各个局部操作都正确执行后,全局事务才可以提交,当发生异常要回滚全局事务时,所有局部操作也应回滚。因此,所有子事务均正确提交是分布式事务提交的前提。为实现分布式事务的提交,普遍采用两阶段提交协议(2 Phase Commit),简称2PC协议。
为什么需要学习分布式事务?因为分布式事务可以解决这几个问题。第一个是业务的并发要求非常高,对应的业务操作不能在同一个数据库中完成,也就是说不能通过数据库本身的事务实现。第二个是资源的分布问题(比较常见),有的业务资源是部门A负责的,有的业务资源是部门B负责的,这样的情况下怎么实现一个事务。第三个是大时间跨度的问题,完成一个事务需要很长很长时间,这种情况怎么处理?
分布式事务不仅是处理高并发以及数据同步的利器,也是.NET高级开发/架构师必备技能,12月8日~10日,资深架构师Tony老师,将开启《分布式事务实战》专题,课程以实战为主,案例均来自于JD项目真实场景,课程全网首发,仅开放了200个学习名额,本号粉丝,可白嫖免费扫码加入!
4、分布式事务Saga在.Net5微服务中如何落地
4、.Net5微服务中2PC/3PC如何进行最佳实践
以上是关于JAVA:.NET5兄,听说你要将"分布式事务"拱上"神坛" ?的主要内容,如果未能解决你的问题,请参考以下文章
拥抱.NET5?先搞定分布式事务吧!
AJAX和JQUERY实现部分刷新
光子独立服务器 Unity3D .Net5 问题
“运行时环境”和“软件框架”的含义?
java 将两个相同对象不同属性list合并?
python怎么将数据写入txt文件