解决方案讲解 第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端系统,实时监控各区域环境质量情况,查看日月年的数据报告。
以上所讲智能控电和空气检测是智慧校园中的两大内容,随着时间推移,智慧校园的内容势必愈发丰富,本期就分享一个很好的智慧校园项目的方案之案例。
赶紧收藏或转发给更多朋友吧!
正文如下:
智慧校园以“服务能力+生态”的方式,构造智慧化的校园学习、生活、环境。将教学、教研、管理与校园生活进行充分的融合,从总体规划、实施建设、服务集成和应用推广等开展工作,能够加快学校管理信息化进程。