Codebase 为 Java 的 Raft 库集成方案调研
Codebase 为 Java 的 Raft 库集成方案调研
动机
2022 年,Apache IoTDB 的分布式版本计划为共识算法抽象出通用的接口,进而在当前社区实现的 raft 算法外兼容进来至少一种成熟的共识算法,以此来提升系统的稳定性,从而促进社区的良性发展。
当前主流的共识方案有 single-leader,multi-leader 和 leaderless 三种,然而后两者很难满足符合人直觉的强一致性,具体可以参照 ddia 第五章。对于 single-leader 的共识方案,raft 相比 paxos 在近五年受到了更多的关注,主要原因在于可理解性和可维护性。此外当前开源的 raft 库也非常多,最出名的莫过于 etcd,其可以被称为云原生时代的基石。
由于 Apache IoTDB 当前的 codebase 为 Java,因此本文档将调研 Java-Based 的开源 Raft 库,并计划给出至少一个成熟共识算法库的兼容方案。
概况
以下表格简单调研了在 Github 上开源且 star 数超过 500 的 Java-Based 的 Raft 库。总体而言,sofajraft 和 ratis 相比其他项目要成熟许多,因而以下仅对此两个项目的兼容方案进行深入研究。
✅ 支持 ❌ 不支持 ?未知
仓库
star 数
运营主体
活跃程度
领导者选举
日志同步
成员变更
禅让
对称/非对称分区容错
learner
batching & pipeline 优化
multi-raft
metric
混沌测试
2.7k
蚂蚁金服
活跃
2.2k
3 年未维护
0.9k
个人
2 年未维护
0.6k
ASF
活跃
0.5k
LF
活跃
Repository
stars
Operating Entity
Community
Health
Leader
Election
Log Replication
Membership
Change
Leader Transfer
partition fault tolerance
learner
batching & pipeline optimizations
multi-raft
metric
No Dependency on Third-Party Storage Engines
Chaos Testing
3.5k
Ant Financial
Active
2.4k
Atomix
Inactive
1.2k
Personal
Inactive
1.2k
Apache
Active
0.8k
Linux
Inactive