sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.57k stars 1.14k forks source link

头脑风暴:结合NWR,实现对Quorum的动态调节 #971

Closed shihuili1218 closed 1 year ago

shihuili1218 commented 1 year ago

NWR介绍

N:成员总数 W:写入数据的Quorum数 R:读取数据的Quorum数

满足W+R>N的情况下,读和写一定存在交集,系统一定是满足强一致性的。

基于这个条件,用户可以根据业务场景动态调节读和写Quorum的大小,甚至让其达到一个极端情况,例如W=1,R=N,此时写效率最高,当然这需要付出的代价是不允许有成员宕机。

基于NWR的描述,该设计是否可以用于Raft?

Raft中Leader选举存在两个功能:

  1. 选出集群认可的成员处理写请求
  2. 选出的成员,必须拥有最完整的日志,这用于确保已达成共识的不会被覆盖 这像极了NWR模型中的读场景,而处理事务日志对应NWR模型中的写场景。

在原生的Raft协议中,读写场景都使用多数派作为Quorum数量,两个多数派正好满足W+R>N的场景。如果NWR适用于Raft,用户则可动态调节Quorum数量,例如在一个五成员的集群中,R可以设置为4,W设置为2,那么写性能将会有大幅度的提升。

killme2008 commented 1 year ago

在这里讨论过 https://github.com/sofastack/sofa-jraft/issues/265

fengjiachun commented 1 year ago

在这里讨论过 #265

我说怎么隐约有印象,就没想起来