raft协议的实现

背景

一致性协议(共识机制) 的理论近年来借助于大数据、分布式系统、区块链等技术的发展,从理论到实践都有了很多成果,
比如Zab的Zookeeper,Paxos的ElasticSearch,Raft的Etcd,还有各种区块链的共识一致性机制,比如 Pow , Pos , Dpos等等,
这些协议和技术都是为了解决一个核心问题: 在分布式环境中,如何保证数据的一致性和可靠性。

什么Raft

Raft 的主要思想和实现在许多篇文章中已经有阐述,这里不再复述,可以参阅
raft-paper 等文章

什么是Etcd

Etcd 分布式的kv存储系统,当然对比一些诸如HBase/Cassandra 甚至Redis的 Nosql ,cache系统,
etcd更多的优势是在于它的可靠性,可靠性的保证就是以raft为核心的一致性协议所提供

Java实现

作者用Java语言,复刻了Golang etcd/raft的代码,用以学习和测试Raft协议,后续会不断添加新功能
raft-java

Raft Core的主要模块和架构

RaftCore

RaftCore是raft协议的核心

  1. 逻辑控制
    接受来自外部的Message请求并处理,是通过方法 Step 来处理。 不同的角色(Leader,Candidate,Follower)有各自的处理方法。
    也包括了,是否发起自身竞争成为Leader的机制以及投票给其他Leader的机制。
  2. RaftStatus
    每一个节点都有存储了本节点关于Raft协议下的各种必要状态。 包括当前的term,leader信息,各类超时信息,以及一些配置参数。
  3. Node Progress
    如果该节点是Leader,会通过 Map 来存储其他节点的状态,包括每一个节点本地commit日志的index等,用来同步数据。
  4. Messages
    再控制流转流程中,需要对外部发送的数据都会存放在Msg数组中

Message

定义了消息的状态信息,包括数据的信息,用以在不同节点中传输。消息是以Protbuf作为序列化

Storeage

定义数据的存储方式。代码中以MemoryStorage来存储,用以测试核心流程
Unstable 和 Snapshot配合存在。

通信模块

通信模块也是可以自由实现,测试代码


作者:3h_william
联系: https://github.com/3h-william
出处:http://3h-william.github.io


Share Comments