SOFA Weekly | QA 整理

2021-03-26 · SOFA 团队 ·

SOFA WEEKLY | 每周精选,筛选每周精华问答 同步开源进展,欢迎留言互动 weekly.jpg SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。

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

每周读者问答提炼

欢迎大家向公众号留言提问或在群里与我们互动 我们会筛选重点问题 通过 “ SOFA WEEKLY ” 的形式回复

1、@明惑 提问:

使用 jraft 跨 IDC 搭建了集群,一旦读 follower 节点,有 13ms 的网络延迟,用了lease read,读 leader 还好,直接返回。读 follower,要和 leader 通信,hreadb 有跨机房部署的场景吗?

A:ollower 节点提供读能力,属于额外赠送的能力,其实 readIndex 的实现必须要和 leader 现有一个通信,这个没办法;我们不开 follower 读,从 leader 读;etcd 的 read-index 也是一样的原理,都需要请求一次 leader,  zk 我了解貌似还不支持 follower 读;当然如果你不要求线性一致读,那么你绕开 raft 状态机,直接从你的存储里面读就好,如果你要的是最终一致性,那么你直接从 follower 节点上绕过 raft 直接读。
A:核心就是:follower 节点必须知道 leader 此时的 applyIndex 到哪里,然后需要再等待自己状态机的 applyIndex 也到达这个位置了才能提供读,否则就有可能一个数据 leader 上有,follower 上没有,这就很明显违背了线性一致读,所以和 leader 的这一次通信必须有,不过数据包很小,通常应该很快。
SOFAJRaft:https://github.com/sofastack/sofa-jraft

2、@吴岳奇 提问:

需求场景:AbstractRoutingDataSource 动态切换数据源,同一方法下,对两个不同服务器上数据表新增,涉及分布式事务。 问题: springboot 整合 Seata AT 模式 ,但无法动态代理数据源,一直代理的 yml 配置的默认的数据源。

A:多数据源关闭自动代理;bstractRoutingDataSource 内部的多个数据源手动代理后放进去。
Seata:https://github.com/seata/seata

3、@彭勃 提问:

我在启动 Seata server 的时候,日志里报告了这种找不到 zookeeper 相关节点的异常;KeeperErrorCode = NoNode for /seata/store.mode。

A:应该是用了zk 当配置中心,但是又没有写配置进去。
Seata:https://github.com/seata/seata

本周推荐阅读