范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

分布式事务系统Seata的这些安保机制是否会让你更放心

  一、背景
  SpringBoot 项目,通过引入seata-spring-boot-starter来接入 Seata,Seata 的能力会通过 SpringBoot 的自动装配机制来引入。在学习的时候是梳理有什么强大的、科技感十足的能力,但在试点的时候则更多考虑的是有哪些安保机制,比如通过什么开关来启停某某功能,以保护程序。今天就梳理有什么安保机制,划清能力边界,让使用者不必太过担心;生产中安全永远是第一的嘛。
  二、认知拉齐-starter 中提供什么能力
  第二部分若真不熟悉,看不懂可跳过进入第三部分。
  Pom 依赖    io.seata    seata-spring-boot-starter    ${seata.version} 
  梳理自动装配类,直接从seata-spring-boot-starter中找文件spring.factories,其中有以下自动装配类:# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration= io.seata.spring.boot.autoconfigure.SeataDataSourceAutoConfiguration, io.seata.spring.boot.autoconfigure.SeataAutoConfiguration, io.seata.spring.boot.autoconfigure.HttpAutoConfiguration, io.seata.spring.boot.autoconfigure.SeataSagaAutoConfiguration
  1、SeataDataSourceAutoConfiguration
  Seata 的 AT 和 AX 模式是基于数据源代理实现的,SeataDataSourceAutoConfiguration 中自动对数据源做了代理,不用使用者手动实现代理。
  2、SeataAutoConfiguration构建全局事务扫描器GlobalTransactionScanner,注入到容器中,其内部做 2 件事情 会初始化 TM、RM 客户端 扫描Bean,对添加了全局事务注解的类(@GlobalTransactional、@GlobalLock、@TwoPhaseBusinessAction)生成代理对象,添加对应的拦截器(拦截器内补充分布式事务的能力)注入一个FailureHandler,其默认实现DefaultFailureHandlerImpl中只会打印错误日志,建议重写,异常发生时及时告知使用者。
  3、HttpAutoConfiguration
  应用通过 http 协议通信时,通过 http header 透传 xid
  4、SeataSagaAutoConfiguration
  Saga 模式才用的到,目前还不了解三、探索 Seata 所提供的安保机制
  3.1 引入 seata-spring-boot-starter 之后 Seata 功能就启动了嘛?
  答案:不,有一个开关seata.enabled,若为 true:则启动自动装配;若为 false:则不启用自动装配。比如就在开发测试环境验证,暂且还不上生产,就可以通过这个开关来实现。
  application.yml 中留意这个配置:seata:   enabled: true
  上述几个自动装配类中都有激活条件,ConditionalOnProperty或 ConditionalOnExpression其用意为,当seata.enabled=true的情况下,自动装配类才生效。@ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) ... @ConditionalOnExpression("${seata.enabled:true}
  3.2 数据源是被自动代理嘛?
  答案 :不,有开关
  seata.enableAutoDataSourceProxy:true,若为 true:则启动自动代理,若为 false:则不启用自动代理。seata:   enableAutoDataSourceProxy: true
  生效源码见下方:@ConditionalOnExpression("${seata.enabled:true} && ${seata.enableAutoDataSourceProxy:true} && ${seata.enable-auto-data-source-proxy:true}") public class SeataDataSourceAutoConfiguration {
  3.3 所有的数据源都会被代理嘛
  答案:不,有两种办法来避免
  方法 1:自动代理+排除法:开启自动代理seata.enableAutoDataSourceProxy:true指定不需要被代理的 DataSouce 的 bean 名称(数组形式)seata:     enableAutoDataSourceProxy: true     excludesForAutoProxying: dataSource1,dataSource2,dataSource3
  方法 2:手动代理关闭自动代理 seata.enableAutoDataSourceProxy:false手动方式对数据源做代理,参考这个代码SeataDataSourceProxy buildProxy(DataSource origin, String proxyMode) { if (BranchType.AT.name().equalsIgnoreCase(proxyMode)) {     return new DataSourceProxy(origin); } if (BranchType.XA.name().equalsIgnoreCase(proxyMode)) {     return new DataSourceProxyXA(origin); } throw new IllegalArgumentException("Unknown dataSourceProxyMode: " + proxyMode); }3.4 加了 Seata 事务注解就生效了嘛,被人不小心复制走的有办法不生效嘛
  答案:算是有,目前已知有以下几种方法
  方法 1: 可指定 Seata 注解扫描的包路径,根据情况结合 排除 bean 名称的方法一起用// add scannable packages GlobalTransactionScanner.addScannablePackages(seataProperties.getScanPackages()); // add excludeBeanNames GlobalTransactionScanner.addScannerExcludeBeanNames(seataProperties.getExcludesForScanning());
  方法 2:使用显式的编程 API 开启事务(待验证)GlobalTransaction tx = GlobalTransactionContext.getCurrentOrCreate(); try {     tx.begin(300000, "test-group");     accountService.addUserInfo(account.getAccountNo(),account.getAccountName(),account.getTip());     storeService.decreaseStock(store);     tx.commit(); } catch (TransactionException e) {     try {         tx.rollback();     } catch (TransactionException transactionException) {         transactionException.printStackTrace();     }     //e.printStackTrace(); }
  3.5 Seata 的全局事务能力是否可以动态启停?
  答案:可以
  场景 1:先禁用再启用,可通过service.disableGlobalTransaction=true在启东时禁用,然后在运行期变更配置为 false ,如果配置中心能力够强,还可单独给某个实例激活全局事务。对应的源码如下public void onChangeEvent(ConfigurationChangeEvent event) {     if (ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION.equals(event.getDataId())) {         disableGlobalTransaction = Boolean.parseBoolean(event.getNewValue().trim());         //compareAndSet(expect, update), 要想更新成功的话,那么这个expect的值一定是1,否则是不会被更新的。         //即配置中心下达启用分布式锁,且客户端未启动         if (!disableGlobalTransaction && initialized.compareAndSet(false, true)) {             LOGGER.info("{} config changed, old value:true, new value:{}", ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION,                     event.getNewValue());             initClient();             ConfigurationCache.removeConfigListener(ConfigurationKeys.DISABLE_GLOBAL_TRANSACTION, this);         }     } }
  场景 2:在运行期关闭已运行的全局事务能力,可通过service.disableGlobalTransaction=true在运行期,关闭全局事务
  3.6 Seata 是否有降级能力?
  答案:有,有两个维度的降级能力,
  方法 1:使用 3.5 中的是否禁用全局事务手动降级
  方法 2:自动降级。配置个阈值,当自检周期(滑动时间窗口内)异常次数达到阈值后就禁用全局事务,当自检周期(滑动时间窗口内)连续成功后则恢复。通过设置client.tm.degradeCheck=true,结合degradeCheckAllowTimes 和 degradeCheckPeriod来设置阈值与自检周期;如下示例:client.tm.degradeCheck=false client.tm.degradeCheckAllowTimes=10 client.tm.degradeCheckPeriod=2000
  3.7 Seata 是否可以不代理无需分布式事务的数据源?
  答案:可以变通实现,有 2 种方法。
  方法 1:DataSouce 从一个变成 2 个,即一个是原始 DataSource,另一个基于原始的 DataSource 代理,生成一个代理的 DataSouce,在使用到分布式事务的逻辑中才使用代理的 DataSouce,不使用分布式事务的逻辑中使用原始的 DataSource。但这种两个 DataSouce 其实是同一个,会使用相同的连接池(用连接池的情况下)。
  方法 2:使用两个完全独立的 DataSouce,其中一个做与分布式事务无关的逻辑;另一个做代理,提供分布式事务的能力。3.8 Seata 的全局事务能力是否可以按请求属性启用
  答案:可以有,这里提供 1 种方法。
  把一个方法拆分,根据流量属性判断是否需要进入到开启分布式事务的方法中。function A(param){     if(param.xx == 开启分布式事务){         A-2(param)     }else{         A-1(param)     } } function A-1(param){ } //A-2上添加分布式事务注解 fcuntion A-2(param){ }四、总结
  本篇梳理的内容是:当我们在试点分布式事务系统 Seata 的时候,对系统安全方面可能有哪些诉求,以及 Seata 能提供怎样的保护能力。毕竟我们引入新系统是为了解决问题而不是创造问题,没有足够使用经验,对内部机制掌握不够的情况下,全面的掌握 Seata 所提供的安保机制,按需禁用或开启、将新能力和老逻辑划清边界、以最小化测试单元的原则来推进,应该会更加顺利。
  作者:Applehope
  链接:https://juejin.cn/post/7172203910533218340

为参选2024与朱立伦党内较劲?侯友宜回应了中国台湾网7月7日讯据台湾中央社报道,中国国民党新北市长侯友宜无论党内还是新北市声量都颇高,外界频传其目标在于2024台湾地区领导人选举,并猜测是否会与中国国民党主席朱立伦在党内较英媒独家老爸给7。5万美元后,拜登儿子戒毒时仍吸毒,视频泄露上面的照片拍摄于本周一(当地时间7月4日),52岁的亨特拜登与父亲美国第46任总统乔拜登一起站在白宫阳台上观看烟花表演,照片里的亨特看起来体面又潇洒,他望向父亲,目光充满关注甚至是张学友为香港送祝福起争议,官方评论区已沦陷,视频被火速删除7月1日,演艺圈超数百位大牌明星发文庆祝香港回归祖国25周年纪念,在这些开心的日子里,大伙儿心情激动又怀着殷切,对中国香港对中华民族送出去最真诚的祝福。1号在下午,CCTV6(直归iOS16的五个最佳功能应用Apple在WWDC2022在主题演讲中宣布了iOS16。即将推出的适用于iPhone的软件充满了新功能,但当你在今年秋季晚些时候开始使用iOS16时候,其中的一些功能将会更加出色孙杨张豆豆结婚早有征兆,女方无名指上戴戒指,多次约会被偶遇近日,有博主爆料,孙杨与张豆豆已经低调领证结婚,女方是一位艺术体操运动员,两人相差5岁,该消息一出,迅速登上热搜,引发网友关注。相比孙杨,张豆豆却很少人熟知,她从9岁就开始学习艺术不剃腋毛登VOGUE封面,勇敢做自己今日,美国版VOGUE杂志公开了八月刊封面,英国女星EmmaCorrin(艾玛科林)成为封面人物。今年26岁的EmmaCorrin因在NETFLIX原创电视剧王冠中饰演年轻的戴安娜7月6日版本更新,5位英雄强度调整,4件装备属性平衡今天王者荣耀迎来了一波更新,此次更新上架了一款新皮肤,上架了多项活动以及皮肤碎片商城也更新了。除了活动以及皮肤的上新,最主要的还是英雄和装备的调整。因为这才是关乎到我们游戏体验的关郑智化星星点灯歌词被改,王心凌不该背锅郑智化的歌曲星星点灯歌词被改以后,引起了全网的热议,当然今天我们不聊什么深度的问题,就光从艺术的角度去聊聊这个行为!不知是哪家粉丝说,听说这首歌的版权不是在郑智化的手中,但是根据著婆婆带娃几大陋习,妈妈看了尽量阻止!放任容易坑娃小编又标题党了。其实不光是奶奶,姥姥带娃也一样会有很多陈规陋习。这主要来源于两代人的认知差别,老年人的思想大多还停留在过去,认为过去我都这么带大了几个孩子,怎么现在就不行了?其实过18岁女生高考601分被害她熬过高考的苦,但没躲过光棍汉的嫉妒文李汐若高中三年,每天早上五点起床,晚上十一点睡觉,其中的艰苦,只有熬过高考的人才能体会到。河南洛阳女生冯某月,熬过了高考的苦,取得了601分的好成绩,她报考了河南一所211郑大。漫画多少女生讨厌别人叫自己小姐姐?觉得油腻讨厌的举个手说起称呼,其实每个人心里想要的称呼都是不一样的,有些人喜欢让别人叫他小仙女或者是美女,而有些人则是喜欢让别人叫他亲爱的小宝贝之类的词语。但是在众多的称呼当中,很多女性都表示自己最讨
怎么样学好小学的简便计算?简便运算我理解的就是一些速算和巧算技巧,小学阶段速算和巧算的核心是凑整先算,凑成整十整百整千这样的数易于简便运算。一年级的凑十法是理论基础,我是王老师,致力于小学数学的精品问答!我初中毕业可以考公务员吗?虽然公务员考试的很多内容,初中生都会,但不代表初中生就有能力当公务员,所以在我国的公务员招考中,初中生是不能报考的。根据各省及全国公务员招考简章要求,大部分地区的最低学历限制是大专女人一生能抗住几次剖腹产?产后吃啥伤口愈合快,身材恢复得好?有些宝妈刚剖腹产完没多久,便有了生育第二个孩子的打算。一般来说医生都会建议女性生产后两年才能进行生育,但有些夫妻听不进去这样的建议,执意要进行生育。之所以会出现这种现象,主要是因为2021年有多少人被负债压的喘不过气?今年43岁,前几年发展得好,总觉得财运滚滚,没想到走错一步,投资失败,负债一千四百万。把仅有的两套房子卖了,一套一千万(幸亏有人接手),一套四百万,还清债务。没房子了,也没债务了。打工是没有前途的,有没有个人创业日入五百或一千的那种商机?当然有!现在来说,还是有不少适合个人干,投资非常少,而且也可以日入500以上的事情的,但是这个要看你的能力以及愿意付出的时间和努力到底有多少了?1外卖小哥外卖小哥是大家都知道的活,你觉得华为哪款手机玩游戏最好,处理器高端?文小伊评科技华为旗下手机众多,适合玩游戏的手机同样也有很多,目前华为手机中常见的处理器分别是麒麟9905G,麒麟9904G,麒麟980以及中端的麒麟810和低端的麒麟710,笔者推从生下来到现在,你喝过多少种茶?让你印象最深的是哪一款茶?谢谢邀请!茶的种类很多,总的来说,分为红茶全发酵茶烏龙茶半发酵茶绿茶无发酵茶。我是潮汕人,潮汕人喜欢冲工夫茶。以烏龙茶为主,如福建烏龙茶,潮州凤凰单丛茶,经常飲用。潮汕工夫茶很讲究内蒙古人的早点一般都有哪些?内蒙古东西幅员辽阔,各地美食各有特点。早点也是各有特点。下面我们就从内蒙古东部,西部,中部三个地区说一下内蒙古各地的早点。第一东部地区特色早点内蒙古东部地区由于和东三省接临,所以饮天赋平庸的学生,通过努力能考上清华北大吗?考清北对于智商高的也是很难我的高中是一个县城高中,1995年一个15岁神童保送南开,1999年被学校开除,神童返高中再战高考,1999年高考数学英语超级难,神童光环还在,三个月时间为什么长胖容易,减肥那么难?大都数人确实是适合长胖容易减肥难这个理的。很多人想要变胖,只要使摄入的能量大于消耗的能量,所以平时大吃大喝各种高热量高糖的不健康的食物和饮料,又整天葛优躺,那么发福是就是迟早的事。得了抑郁症焦虑症,治疗后有完全康复的可能吗?得了抑郁症焦虑症,治疗后有完全康复的可能吗?心理疾病的种类很多,临床常见的有抑郁症和神经症,其中神经症包括焦虑症,强迫症,疑病症,恐怖症。很多抑郁症,焦虑症,强迫症等患者到处治疗,