学习笔记---分布式事务的简单总结

分布式事务处理类型以及处理方式的简单概述:

  1. 分布式事务:基于单机事务展开的,而单机事务是基于数据库的ACID来的,离开数据库的话,事务将无从谈起;因此,实现分布式事务,本质上就是实现整个事务链的ACID,也就意味着事务链上的小事务都要实现ACID;
  2. CAP理论:意思就是分区容错性,一致性以及系统的可用性,三者不可兼得,那么只能是牺牲一致性或者可用性了,来保全其余的两个,因此产生了强一致性和弱一致性的处理;但是考虑到具体的情况,假如说在单体应用的事务(非分布式事务)事务链特别长,在执行的业务逻辑的过程也会牵扯到可用性的问题了,个人看法是CAP理论不仅仅是适用于分布式架构上,其实在单体应用上也会应用到;回到分布式事务,分布式事务其实在单体事务上增加几个因素:网络因素以及宕机的可能性;假如说由于网络不稳定以及宕机的发生导致事务的失败,其实这个情况在处理事务ACID的时候直接通过调用接口返回的结果或者直接捕获异常回滚即可,鉴于此理由,个人认为其实在强弱一致性的选择上最终决定的还是基于业务来考虑的,跟单机事务一样的道理,假如说事务链特别长的话,根据业务来决定采取时效性,那就只能选择弱一致性,反之只能选择强一致性;
  3. 分布式事务之隐式以及显式:目前我们编码基本都是基于 spring 的隐式事务来解决的,也就是我们编码的时候不需要在业务逻辑里面掺杂事务的代码,因为 spring 已经为相关的 Bean 生成了事务代理类,aop 前后管理代理 Bean;当然不排除有人是选择硬编码的方式;同样的,在处理分布式事务的时候,也存在这两种方式,但是无论是哪一种方式,都必须存在事务管理中心来统一管理才行,试想一下:假如 A
    事务调用 B事务 成功之后,B事务已经提交,这个时候 A事务执行失败,在宕机的情况下是无法恢复 B提交的事务数据的;同样的,弱一致性也是一样的道理;
  4. 分类之显式:如上点所说,除了对业务逻辑的事务的硬编码之外,还必须维护与事务管理中心的交互来达到事务数据的一致性,这样带来的是程序的不优雅笨重以及编码的负担;
  5. 分类之隐式:这种处理的方式完全交给底层,是主流的做法,阿里的 seata事务框架以及 lcn都是通过这种来处理;seata AT模式主要是通过静态代理数据源,静态代理连接对象,静态代理编译对象来在对执行 sql的解析,获取前置镜像数据,后置镜像数据(事务的执行记录以及原始数据),以及与事务管理中心的交互达到整体事务的控制;而 lcn则是通过 aop连接对象,在提交之前与事务管理中心交互并且挂住事务以此达到事务的控制权;但本质上,两者都是通过在这里插入图片描述获取事务的控制权来达到目的的;

手写分布式事务框架简单实现,基于 spring 事务的监听器来实现获取事务的控制权:
在上面的简单总结可以知道,
分布式处理,不管强弱一致性,都可以将整体的事务链拆分为小事务,就是将每一个节点代表一个小事务;每个节点都得通过控制事务的控制权与通过事务的管理中心的交互,让管理中心统一记录管理,弱一致性的话则需要记录事务的执行记录以及原始的数据;

首先来记录下 spring的事务监听器:TransactionSynchronization 类:
在这里插入图片描述
从方法命名可以知道这几个方法是干嘛用的了;

回到 spring 事务的实现上,是基于:PlatformTransactionManager 来实现的,在此基础上延伸了:AbstractPlatformTransactionManager 这个关键的抽象类,再次在此基础上延伸了:
在这里插入图片描述
在这里使用模板方式,AbstractPlatformTransactionManager 封装了实现了getTransaction,commit,rollback 方法,在实现上通过获取事务,数据源,连接对象,通过连接对象进行事务的提交,挂起以及回滚等操作,并且同时抽象出:
doGetTransaction ,doBegin,doRollback 方法,在 AbstractPlatformTransactionManager 中实现的 commit方法中通过 processCommit 中调用子类的 doCommit 方法来实现的,同样的 rollback 方法一样的道理;
在这里插入图片描述
在这里插入图片描述
也就是说继承体系中的 DataSourceTransactionManager ,JtaTransactionManager 等实现类都是利用在利用了 spring模板方法提供了AbstractPlatformTransactionManager 抽象实现上实现的,就如同 JDK的 AQS一样提供了模板方法,开发者可以定义属于自己的一套锁的逻辑。那么就可以想象到,AbstractPlatformTransactionManager 铁定是已经在执行事务(包括提交或者回滚等)前实现调用了监听了的方法,以beforeCommit 方法为例,断点查找一下,发现:
org.springframework.transaction.support.AbstractPlatformTransactionManager#commit -->
org.springframework.transaction.support.AbstractPlatformTransactionManager#processCommit–>
org.springframework.transaction.support.AbstractPlatformTransactionManager#triggerBeforeCommit–>
org.springframework.transaction.support.TransactionSynchronizationUtils#triggerBeforeCommit—>
org.springframework.transaction.support.TransactionSynchronization#beforeCommit
spring 就是在模板抽象类上通过调用循环调用注册器上的方法,以此来达到事务监听的功能的;

回到获取事务控制权的目标,由对分布式事务实现的简单总结可以知道,关键在与在事务结束前后进行数据的保存或恢复,以及与事务管理中心的交互,因此完全利用 spring的监听器来达到目的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值