SOFA Weekly | 线上直播合辑整理、Seata QA 整理

SOFA WEEKLY | 每周精选,筛选每周精华问答

同步开源进展,欢迎留言互动

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。

SOFAStack 官网: https://www.sofastack.tech

SOFAStack: https://github.com/sofastack

  每周读者问答提炼  

欢迎大家向公众号留言提问或在群里与我们互动

我们会筛选重点问题通过 

" SOFA WEEKLY " 的形式回复

1、@谢小东 提问:

请教一个问题,在使用 Seata AT 模式的时候,新增的一条数据,回滚之前我在 db 改了我刚新增的数据,这个时候如果我抛出异常,但是就不发回滚,该怎么处理?

A:不要在全局事务包裹之外进行对数据的并发操作,如果你这样做,就跳过了 AT 的全局锁,隔离性无法保证,如果你有这方面需求的,可以用 XA 模式,并且使用数据库自身带有排它锁的操作,数据库的自身支持了 XA 模式,就可以帮你保证隔离性。

你的意思就是我在这种情况下 XA 模式适合?XA 模式是行锁么?

A:XA 是数据库自身实现的隔离机制,AT 是统一到 TC 去竞争行锁,而没用到 AT 的地方修改数据库当然就不会去 TC 竞争行锁,隔离性只能保证再全局事务注解下的操作生效。

2、@彭兴家 提问:

请问 Seata 里说的全局锁和本地锁对应 MySQL 的什么锁呀?

A:全局锁就是从 TC 竞争的锁,本地锁就是参与方自己本地的 MySQL 连接,比如 update 不就有排他锁的作用吗,因为一阶段提交,连接释放了,这个本地数据库的锁就解开了。而全局锁是从 TC 拿的,这个锁保证了你的入口只要是分布式事务注解下,就会去竞争这个全局锁。保证了再分布式事务注解下的全局事务间的隔离性

谢谢,明白了。但这样的话,Seata 通过前置镜像回滚。在全局事物执行的过程中,要是其他项目(没在全局事物下的项目)对该条数据进行了修改,那么按照 Seata 的机制,前置镜像对比不同了就不能回滚,需要手动处理?

A:是的,需要人工介入,因为只有人为分析才能校准数据了。对 Seata 来说他只知道要把数据回滚到发生前,但是数据被干扰了,就无法回滚了。

理论上来说这种情况出现的几率很大呀,多个不同项目操作同一条数据。

A:全局事务,字面意思要理解一下。你让他不全局了,让它不覆盖到,如何保证隔离性?要么涉及到的库对应的应用全局使用 Seata AT,要么就换 XA,修改的数据,用 select for update,这个本地锁在二阶段下发通知前不会释放,保证了隔离性。

3、@苏龙飞 提问:

请问,现在我们的 cloud 项目中用了 Seata,数据库只有一个,然后发现性能不够,所以想换成多主从数据库,并且能和 Seata 兼容,有没有好的方案呀?

A:主从方案本就应该是允许暂时的不一致,只要你保证读写都需要的时候,一定是主库,并把主库的 datasource 代理掉就好了,保证需要读后马上写的,一定要是主库操作。

Seata:https://github.com/seata/seata

  SOFAChannel 部分合辑  

  本周推荐阅读  

本文归档在 sofastack.tech。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值