SOFA WEEKLY | 每周精选,筛选每周精华问答
同步开源进展,欢迎留言互动
SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。
SOFAStack 官网: https://www.sofastack.tech
SOFAStack: https://github.com/sofastack
每周读者问答提炼
欢迎大家向公众号留言提问或在群里与我们互动
我们会筛选重点问题通过
" SOFA WEEKLY " 的形式回复
1、@廖春涛 提问:
在 SOFAJRaft 中,snapshot load 后应该会有个日志重放的实现,但是我目前看代码没看到说 snapshot 和 LogEntry 有关联的地方,请问是什么关系呢?A:snapshot 就是为了压缩日志,以及加快新节点加入。snapshot 后,会将上上次的 snapshot 当时对应的日志级之前的删掉,为什么是上上次?因为本次 snapshot 的日志,可能还没有复制到所有 follower,这是一个小优化。具体到日志重放,如果启动是 leader,会写入一条当前配置的日志,触发 fsm caller 的 onCommitted,然后去重放从 snapshot 的日志到最新的 committed 的日志到状态机。如果是 follower,安装 snapshot 后, leader 会发送该 snapshot 对应的日志之后的日志,走正常的复制流程,因此也会重放到最新的状态机。
SOFAJRaft 当 Leader 的 Node 执行 apply 后,将 LogEntry 提交给 follower 是通过通知来进行的吗?是不是在 LogManagerImpl 里面的这串代码:A: 这段是 wakeup replicators,复制日志到 follower 都是在 Replicator 中实现的。 2、关于 Seata 的 grouplist 问题:
什么时候会用到 file.conf 中的 default.grouplist?A:当 registry.type=file 时会用到,其他时候不读。
default.grouplist 的值列表是否可以配置多个?A:可以配置多个,配置多个意味着集群,但当 store.mode=file 时,会报错。原因是在 file 存储模式下未提供本地文件的同步,所以需要使用 store.mode=db,通过 db 来共享 TC 集群间数据。
是否推荐使用 default.grouplist?A:不推荐,如问题1,当 registry.type=file 时会用到,也就是说这里用的不是真正的注册中心,不具体服务的健康检查机制当tc不可用时无法自动剔除列表,推荐使用 nacos 、eureka、redis、zk、consul、etcd3、sofa。registry.type=file 或 config.type=file 设计的初衷是让用户再不依赖第三方注册中心或配置中心的前提下,通过直连的方式,快速验证 Seata 服务。 3、关于 Seata 事务分组:
什么是事务分组?A:事务分组是 Seata 的资源逻辑,类似于服务实例。在 file.conf 中的 my_test_tx_group 就是一个事务分组。
通过事务分组如何找到后端集群?A:首先程序中配置了事务分组(GlobalTransactionScanner 构造方法的 txServiceGroup 参数),程序会通过用户配置的配置中心去寻找 service.vgroup_mapping. 事务分组配置项,取得配置项的值就是 TC 集群的名称。拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的 TC 服务列表。
为什么这么设计,不直接取服务名?A:这里多了一层获取事务分组到映射集群的配置。这样设计后,事务分组可以作为资源的逻辑隔离单位,当发生故障时可以快速 failover。 本周推荐阅读
- 蚂蚁金服在云原生架构下的可观察性的探索和实践 | Meetup#3 回顾
- 分布式事务 Seata Saga 模式首秀以及三种模式详解 | Meetup#3 回顾
- 如何使用 SOFAJRaft 实现自己的分布式应用
- 基于实例理解 SOFAJRaft 中的概念和术语