咱们对Raft协议已经进行了原理的解析,接下去咱们从通过SOFAJRaft 框架的核心流程剖析加深对Raft协议的理解。SOFAJRaft 是一个纯 Java 的 Raft 算法实现库, 基于百度 braft 实现而来, 使用 Java 重写了所有功能, 支持:
-
领导人选举和基于优先级的半确定性领导人选举。
-
日志复制和恢复。
-
快照和日志压缩。
-
只读成员(learner)。
-
集群成员管理,添加节点,删除节点,替换节点等。
-
完全并发复制。
-
容错能力。
-
非对称网络分区容忍性。
-
当法定人数同伴都死亡的解决方法。
-
管道复制
-
线性一致读,ReadIndex/LeaseRead。
额外扩展了一些功能:
-
对称网络分区容忍性
-
重启后的转移领袖、负载均衡场景实现
-
更丰富的指标统计展示
-
通过Jepsen一致性验证测试
-
包含嵌入式分布式KV存储实现
整体项目如下: