解决方案讲解(合集5篇)

时间:2025-05-29 23:04:27 admin 今日美文

解决方案讲解 第1篇

针对事务无法回滚的问题,有人提出说可以再事务参与者执行失败后,再次利用MQ通知消息服务,然后由消息服务通知其他参与者回滚。

        2019年1月份,Seta开源了AT模式。AT模式是一种无侵入的分布式事务解决方案。可以看作是对TCC或者二阶段提交模型的一种优化,解决了TCC模式中的代码侵入、编码复杂等问题。

        在AT模式下,用户只关注自己的“业务SQL”,用户的“业务SQL”作为一阶段,Seata框架会自动生成事务的二阶段提交和回滚操作。

        先看一张流程图:

 有没有感觉跟TCC执行很像,都是分两个阶段:

但AT模式底层做的事情可完全不同,而且二阶段根本不需要我们编写,全部由Seata自己实现了。也就是说:我们写的代码和本地事务时代码一样,无需手动处理分布式事务。

那么AT模式如何实现无代码侵入,如何我们自动实现二阶段代码呢? 

一阶段

在一阶段,seata会拦截“业务SQL”,首先解析SQL语义,找到“业务SQL” 要更新的业务数据,在业务阶段数据被更新钱,将其保存成“before image”,然后执行“业务 SQL”更新业务数据,在业务数据更新之后,在将其保存成“after image”,最后获取全局行锁,提交事务。以上操作全部在一个数据库事务内完成,这样保证了一阶段的原则性。

这里的before image和after image 类似于数据库的undo和redo日志,但其实时用数据库模拟的。

 二阶段提交

 二阶段如果时提交的话,因为“业务SQL”在一阶段已经提交至数据库,所以Seata框架只需将一阶段保持的快照数据和行锁删掉,完成数据清理即可。

二阶段回滚:

 二阶段如果是回滚的话,Seata就需要回滚一阶段已经执行的“业务SQL”,还原业务数据。回滚方式便是用“before image”还原业务数据;但在还原前首先校验脏写,对比“数据库当前业务数据“和”after image“,如果两份数据完全一致就说明没有脏写。可以还原业务数据,如果不一致就说明有”脏写“,出现在脏写就需要转人工处理。

 不过因为有全局锁机制,所以可以降低出现脏写的概率。

AT模式的一阶段,二阶段提交和回滚均由Seata框架自动生成,用户只需要编写”业务SQL“,便能轻松接入分布式事务;AT模式是对业务无任何进入的分布式事务解决方案。

        Seata中的几个基本概念:

        维护全局和分支事务的状态,驱动全局事务提交或回滚(TM之间的协调者)。

        定义全局事务的范围:开始全局事务、提交或回滚全局事务。

        管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

我们看下面的一个架构图

        向TC开启一个全局事务

        调用其他微服务

        执行本地事务

        向TC注册分支事务,并提交本地事务执行结果

一阶段

 二阶段

        分支都成功:通知分支事务,提交事务

        有分支执行失败:通知分支事务,提交事务

        提交事务:直接情况 before_image 和after_image 信息,释放全局锁

        回滚事务:

        以一个示例来说明整个AT分支的工作过程

        业务表: product

        AT分支事务的业务逻辑:

一阶段 

过程:

得到前镜像:

 得到后镜像:

1.插入回滚日志:把前后镜像数据以及业务SQL相关信息组成一条回滚日志记录,插入好UNDO_LOG表中 .

二阶段-回滚

1.收到TC的分支回滚请求,开启一个本地事务,执行如下操作.

2.通过XID和Branch ID查找到相应的UNDO LOG记录.

3.数据效验:拿UNDO LOG中的后镜与当前数据进行比较,如果有不同,说明数据被当前全局事务只带的动作做了修改.这种情况,需要根据配置策略来做处理,详细的说明在另外的文档中介绍.

4.根据UNDO LOG中前镜像和业务SQL的相关信息生成并执行回滚的语句;

1.提交本地事务.并把本地事务的执行结果(即分支事务回滚的结果)上报给TC.

二阶段-提交  

        与2PC相比:每个分支事务都是独立提交,不互相等地啊,减少了资源锁定和阻塞时间

        与TCC相比:二阶段的执行操作全部自动化生成,无代码侵入,开发成本低

        与TCC相比,需要动态生成二阶段的反向补偿操作,执行性能略低于TCC

        Seata(Simple Extensible Autonomous Transaction Architecture, 简单可扩展自治服务框架)是2019年1月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。Seata开源半年左右,目前已经有接近一万star,社区非常活跃。我们热枕欢迎大家参与到Seata社区建设中,一同将Seta打造成开源分布式事务标杆产品。

ps:seata以后再补吧,码字码了3-4天,累死本宝宝了

解决方案讲解 第2篇

ASBR2查找LFIB表,发现私网标签②是自己产生的,剥离私网标签②

然后查找vpnv4路由表项,发现去往的下一跳为和其对应的私网标签①

此时报文为(D: 私网标签①)下一跳为

PE2查找FIB表,发现的Tunnel为非0,即去往通过LDP标签转发,于是查看LFIB表项,找到对应的公网标签和下一跳

此时报文为(D: 私网标签① 公网标签)下一跳为直连下一跳

解决方案讲解 第3篇

      Consistency中文叫做“一致性”。意思是,写操作之后的读操作,必须返回该值。举例来说,某条记录时v0,用户向G1发起一个写的操作,将其改为v1.

接下来,用户的读操作就会得到v1.这叫一致性。

 

 问题时,用户有可能向G2发起读操作,由于G2的值没有发生便变化,因此返回的就是和G2读的操作的结果不一致,这就不满足一致性了。

为了让G2也能 变为V1,就要在G1写操作的时候,让G1向G2发送一条消息,要求G2也改成v1.

 这样的话,用户向G2发起读操作,也能得到v1.

解决方案讲解 第4篇

    一致性和可用性,为什么不可能同时成立?

        答案很简单,因为可能通信失败(即出现分区容错)。

        如果保证G2的一致性,那么G1必须在写操作是,锁定G2的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,G2不能读写,没有可用性。

        如果保证G2的可用性,那么势必不能锁定G2,所以一致性不成立。

        综上所述,G2无法同时做到一致性和可用性,系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那么就无法做到一致性。

解决方案讲解 第5篇

问题解决:解决宿舍、教室等的用电问题。

比如:1、管理人员经常未能发现各用电区域环境的变化,造成电力浪费;

2、校园管理设备需要逐一手动操作,繁杂且效率低,浪费人力资源。

系统配置:智能插座、智能开关、手机端APP、PC端控电监测综合服务平台

特点:

WiFi内置模组、计量计电、电器设备用电消耗数据可上传至云端,电能管理员可以远程查看教室、宿舍、餐厅等用电情况,检测是否使用违规电器,各区域耗电对比、资源节能,并可远程控制、定时开启关闭。

二、智慧空气检测内容

问题解决:解决室内外空气环境质量问题。

比如:

1、校园环境问题不重视,缺乏相应设备与措施;

2、监测设备与治理管控设备未实现数字化管理。

系统配置:室内外空气质量检测仪器、室内空气净化系统、手机端APP、PC端空气监测综合服务平台

特点:

1、空气检测仪器:检测室内外污染物,高标准度传感器,红线预警通报功能,自启空气净化系统;

2、空气清净机:针对室内环境,脱臭过滤网,污染物质分离过滤,去除细菌和异味加速新空气置换;

3、手机端和PC端系统,实时监控各区域环境质量情况,查看日月年的数据报告。

以上所讲智能控电和空气检测是智慧校园中的两大内容,随着时间推移,智慧校园的内容势必愈发丰富,本期就分享一个很好的智慧校园项目的方案之案例。

赶紧收藏或转发给更多朋友吧!

正文如下:

智慧校园以“服务能力+生态”的方式,构造智慧化的校园学习、生活、环境。将教学、教研、管理与校园生活进行充分的融合,从总体规划、实施建设、服务集成和应用推广等开展工作,能够加快学校管理信息化进程。