Raft
本文基于 alibaba/nacos 源码中的 raft 进行分析
Raft 协议
nacos 对一致性协议进行抽象,将其关键的方法抽象到 ConsistencyProtocol
接口中,关键的方法有同步/异步读写数据等:
public interface ConsistencyProtocol<T extends Config, P extends RequestProcessor> extends CommandOperations {
// 初始化
void init(T config);
Response getData(ReadRequest request) throws Exception;
Response write(WriteRequest request) throws Exception;
CompletableFuture<Response> aGetData(ReadRequest request);
CompletableFuture<Response> writeAsync(WriteRequest request);
// 新的成员节点列表,一致性协议自行处理相应的成员节点是加入还是离开
void memberChange(Set<String> addresses);
}
// CP 协议
public interface CPProtocol<C extends Config, P extends RequestProcessor4CP> extends ConsistencyProtocol<C, P> {
boolean isLeader(String group);
}
// AP 协议
public interface APProtocol<C extends Config, P extends RequestProcessor4AP> extends ConsistencyProtocol<C, P> {
}