SOFA WEEKLY | 每周精选,筛选每周精华问答 同步开源进展,欢迎留言互动 SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。
SOFAStack 官网: https://www.sofastack.tech SOFAStack: https://github.com/sofastack
每周读者问答提炼
欢迎大家向公众号留言提问或在群里与我们互动 我们会筛选重点问题 通过 “ SOFA WEEKLY ” 的形式回复
@孙军超 提问:
请教一下 jraft-rheakv rocksdb 的 get put 操作,耗时要 5 秒钟,是服务端配置需要优化吗? 以下是我的服务端配置截图。
A:kill -s sigusr2 可以看到性能指标度量,官方文档请看一下有相关说明。
SOFAJRaft:https://github.com/sofastack/sofa-jraft
@戚金奎 提问:
请教一个问题:如图,目前服务都是通过 openfeign 远程调用,如果 setScore 所在的服务抛出了异常,是能直接出发事务回滚吗(我本地的无法出发回滚),还是需要在这个 seata1 里面接受一下返回值然后抛出异常才可以回滚吗(目前我这边是这种可以回滚)?
A:决议全局提交/回滚的只能是
@GlobalTransactional 注解的发起者,它 catch 到异常才会触发回滚;远端的异常应该是没抛给调用者,或者被框架拦截了异常。
Seata:https://github.com/seata/seata
@谭玖朋 提问:
这两个地方调用 rollback 有特殊意义吗?我发现在此之前没有更新操作啊。
A:这个地方应该是一个编码的习惯,在 autocommit=false 的时候,返回前都做一次 commit 或者 rollback 操作,确保当前的事务能够提交或者回滚,同时释放数据库的锁(哪怕前面并没有事务和锁)。
Seata:https://github.com/seata/seata
@戚金奎 提问:
请教一个问题:如果出现如图的这种情况, 执行的这个全局事务在获取全局锁之后,会获取 m 字段最新的值,再和自己的 before_image 里面记录的值去比较,发现不一致,全局事务失败并回滚。
A:所有写场景要被 globaltransational 覆盖,不允许直接去数据库改数据。否则就会出现在全局事务被决议回滚的时候,别的地方把这个数据改了。
Seata:https://github.com/seata/seata
@姜世存 提问:
请教一个问题,这个 LoadLevel 注解有什么作用
A:所以别的业务要继承 Seata,写入口加入 globaltransational 注解,只读无需加注解。
Seata:https://github.com/seata/seata
@winyQ 提问:
项目里 Seata 用 AT 模式,可以在项目里再集成 JTA 吗,两个并存有没有什么问题?
A:JTA 是 XA ,无法跟 AT 兼容。
Seata:https://github.com/seata/seata
本周推荐阅读
本周发布
本周发布详情如下:
1、sofa-common-tools 发布 v1.3.3 版本,主要变更如下:
- 修复 log space factory 的懒初始化模型问题
详细参考:
https://github.com/sofastack/sofa-common-tools/releases/tag/v1.3.3