实现 raft 的时候一些思考, 求 v 友印证下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
scalaer
V2EX    程序员

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

  • /li>  
  •   scalaer 2019-03-22 18:36:30 +08:00 2990 次点击
    这是一个创建于 2460 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    下面有两种情况:

    • 客户端向集群请求读。 请求可以通过负载均衡分发到随便一台机器, 直接查询返回结果, 所以读的性能跟机器的数量成正相关.

    • 客户端向集群请求写。 如果请求到达的是 follower, 则需要返回 leader 的地址, 让客户端将请求 redirect 到 leader, 所以写的性能理论上是一台机器写磁盘的极限

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

    10 条回复    2019-03-22 22:09:20 +08:00
    ccpp132
        1
    ccpp132  
       2019-03-22 18:48:15 +08:00 via Android
    写也可以对 key partition 来分库做扩展
    zhangtao
        2
    zhangtao  
       2019-03-22 19:00:42 +08:00   2
    是的,所以需要划分多个 raft 集群,来支持不同的业务
    louhubiao
        3
    louhubiao  
       2019-03-22 19:40:55 +08:00 via Android
    生产环境中读的性能也就单机,不指望能有很好的读性能
    petelin
        4
    petelin  
       2019-03-22 19:44:31 +08:00 via iPhone   1
    不对啊 你要是链接的正好是那一小部分节点就有可能 master 写入了 你读不到
    mortonnex
        5
    mortonnex  
       2019-03-22 19:56:08 +08:00
    @ccpp132 partition 是为了解决并发,但 raft 的写是顺序的,也就是说临界资源不是库,而是 leader 本身,所以 partition 的优化非常有限,除此之外,写的瓶颈是网络,因为需要 Follower 的 ack
    EmdeBoas
        6
    EmdeBoas  
       2019-03-22 19:56:15 +08:00   2
    1.选 he 举 xie 完并不能保证 follower 和 eader commit logs 一致,保证的是如果某个日志条目在某个 term 中已经被提交,那么这个条目必然出现在更大 term 的所有 leader 中
    2. 读必须走 leader,最原始的 logRead 还需要落一次盘,indexRead 才可以不落盘,leaseRead 不用走 raft-roundtrip,但也还是需要读 leader。所以单 raft 读也无法 scale-out
    3. multi-raft 可以做读写的 scale-out
    scalaer
        7
    scalaer  
    OP
       2019-03-22 21:41:10 +08:00
    @EmdeBoas 多谢指正
    wweir
        8
    wweir  
       2019-03-22 22:01:16 +08:00 via iPhone
    为了强一致性,读写都是单机,因为要同步,性能还要比单机低一点。
    所谓性能高,都是以牺牲强一致性为基础的,中间有填不上的缝,在特定场景会产生时序上不一致的数据
    7173842
        9
    7173842  
       2019-03-22 22:06:17 +08:00
    这时候,group raft 就出来了
    ty4z2008
        10
    ty4z2008  
       2019-03-22 22:09:20 +08:00
    可以看看 TiDB 的 raft 实现
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2570 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 15:14 PVG 23:14 LAX 07:14 JFK 10:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86