1、@明惑 提问:
使用 jraft 跨 IDC 搭建了集群,一旦读 follower 节点,有 13ms 的网络延迟,用了lease read,读 leader 还好,直接返回。读 follower,要和 leader 通信,hreadb 有跨机房部署的场景吗?
A:follower 节点提供读能力,属于额外赠送的能力,其实 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
本文分享自微信公众号 - 金融级分布式架构(Antfin_SOFA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。