实现 raft 的时候一些思考, 求 v 友印证下

2019 年 3 月 22 日
 scalaer

当集群选举完后,follower 和 leader 的已提交的 logs 保持一致。

下面有两种情况:

所以强一致性的 kv 分布式服务, 写的性能会有极限, 读的性能跟机器数量成正相关

3132 次点击
所在节点    程序员
10 条回复
ccpp132
2019 年 3 月 22 日
写也可以对 key partition 来分库做扩展
zhangtao
2019 年 3 月 22 日
是的,所以需要划分多个 raft 集群,来支持不同的业务
louhubiao
2019 年 3 月 22 日
生产环境中读的性能也就单机,不指望能有很好的读性能
petelin
2019 年 3 月 22 日
不对啊 你要是链接的正好是那一小部分节点就有可能 master 写入了 你读不到
mortonnex
2019 年 3 月 22 日
@ccpp132 partition 是为了解决并发,但 raft 的写是顺序的,也就是说临界资源不是库,而是 leader 本身,所以 partition 的优化非常有限,除此之外,写的瓶颈是网络,因为需要 Follower 的 ack
EmdeBoas
2019 年 3 月 22 日
1.选 he 举 xie 完并不能保证 follower 和 leader commit logs 一致,保证的是如果某个日志条目在某个 term 中已经被提交,那么这个条目必然出现在更大 term 的所有 leader 中
2. 读必须走 leader,最原始的 logRead 还需要落一次盘,indexRead 才可以不落盘,leaseRead 不用走 raft-roundtrip,但也还是需要读 leader。所以单 raft 读也无法 scale-out
3. multi-raft 可以做读写的 scale-out
scalaer
2019 年 3 月 22 日
@EmdeBoas 多谢指正
wweir
2019 年 3 月 22 日
为了强一致性,读写都是单机,因为要同步,性能还要比单机低一点。
所谓性能高,都是以牺牲强一致性为基础的,中间有填不上的缝,在特定场景会产生时序上不一致的数据
7173842
2019 年 3 月 22 日
这时候,group raft 就出来了
ty4z2008
2019 年 3 月 22 日
可以看看 TiDB 的 raft 实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/547521

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX