Raft优化问题

Raft的数据读写都需要从leader节点进行,容易造成单点负载较重,nebula目前是否支持follower read吗?以后对于数据存储和读写方面有什么优化的方向吗?

目前还不支持follower reader, 好奇问下你说的follower read需要一致性保证吗, 还是说获取过期数据也可以?
通常多个part的leader会均匀分在不同机器上, 所以你说的单点负载较重的情况其实不大可能出现. 当然, 一段时间内就是出现了热点, 无论怎么分布, 都无法避免这个问题.

我们的考虑是在保证数据一致性的前提下,利用replica提高吞吐量,从而减轻leader的负载

另外在业务中仍然是读多写少,提高读的吞吐量是会提高总体效率的。另外与Nebula技术方案相似的TiDB也支持了follower read,说明这个特性还是很有必要的。

是的, TiDB的解决方案是通过Read index, 同样需要走一次网络, 这个的开销同样不容忽视. 利用replica是否能提高吞吐, 在我看来和业务场景有一定关系, 我理解在集群压力本身已经比较高的情况下, follower read几乎没有提升, 所以TiDB默认也没有使用这个功能.

我理解无论走Read index还是Leader lease, 都需要和leader进行一次交互, 本质上还是leader返回的数据, 欢迎讨论. 相反, 如果不需要考虑一致性的前提下, follower提供的读是不是更有作用?

2 个赞