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、@bruce 提问:

SOFAJRaft 可以实现在三个节点中选出一个 leader , 其他逻辑由自己实现吗?

A:可以,可以不用状态机,也不用加载和持久化快照, 只需要选个 leader。

各个节点如何知道自己是主节点还是从节点?

A:示例

SOFAJRaft:https://github.com/sofastack/sofa-jraft

2、@李明 提问:

全局事务执行过程中,有其他线程操作数据库,这时全局事务执行失败,在回滚的时校验数据发现数据被修改过,导致回滚失败,这种情况怎么避免?

A:其他线程也加上 global transactional 注解。分布式事务下,没有单个分支是独立的个体存在,需要拿到全局事务中,让其他事务知晓他的存在,从而避免在分布式调用链路中,恰好遇到同一个数据进行修改时,发生的脏写脏读 globallock 是在更新前去 tc 看下这个时候这个数据有没有被其他事务锁定,没有的话就说明这个数据没有被其他事务使用,是提交的数据,所以这叫读分布式事务下的已提交。

但是他并没有去注册分支,也就是他没有去占有这个全局锁,来达到分布式事务下的排他性。他在得到 tc 响应的时候,去执行 update 是有时间的,此时有个分布式事务下的分支 update 后,拿到了全局锁,然后他的链路二阶段是回滚 ,但是数据就被你这个认为没有全局锁的本地线程给改了,这就导致被干扰无法回滚。

所以 globallock 需要配合 sql 语句,在 update 前,先做 for update 这个数据,拿到这个数据的本地锁,拿到本地锁之后,再去 tc 判断有没有全局锁,如果 tc 没有锁,因为本地已经拿到本地锁了,具有本地事务的排他性,其他分支事务拿不到该数据的本地锁,是无法去注册分支去拿到全局锁,也就是禁止了其他分支事务的干扰,所以不会脏写。

目前 tcc 下一般就是 globallock+select for update 来防止被其他 at 事务改动后,进行了脏写。

3、@ 尚攀 提问:

Raft 是为了解决目前的什么问题?

A: 依赖外部存储。AT 有 before 镜像、after 镜像,after 镜像是在 undo_log 表里存储,那么 before 在哪里存储?未来的 raft 模式,集群支持动态扩缩容,事务信息存储在内存中(测试下来比 redis 快),现在的全局事务信息,分支事务信息,全局锁都是持久化到 db,或者 redis 去的。如果这个时候持久化用的 db 宕机了,Seata-Server 会不可用,而集成了 raft ,leader 宕机后自动选举新 leader,继续运转。所以,利用 raft 一致性算法,可以让多个 Seata 集群内存中的数据保持一致。

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

  本周推荐阅读  

  Seata 项目进展  

本周发布详情如下:

发布 Seata 1.4.0 版本,主要变更如下:

  • 支持 yml 配置文件

  • 支持 Oracle nclob 类型

  • 支持客户端最少的活动负载均衡

  • 支持客户端一致性哈希的负载均衡

  • 支持 Spring Boot 使用自定义配置中心和注册中心

  • 支持配置默认全局事务超时时间

  • 多处 BUG 修复和功能优化

详细参考:

https://github.com/seata/seata/releases/tag/v1.4.0

本文归档在 sofastack.tech。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值