Raft

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> {
}

JRaft

参考