目录
一、⼀致性协议下沉
 1、⼀致性协议抽象
 
 
public interface ConsistencyProtocol<T extends Config, P extends RequestProcessor> exten
ds CommandOperations {
    ...
    /**
    * Obtain data according to the request. *
    * @param request request
    * @return data {@link Response} 
    * @throws Exception {@link Exception}
    */
    Response getData(ReadRequest request) throws Exception;
    /**
    * Data operation, returning submission results synchronously. *
    * @param request {@link com.alibaba.nacos.consistency.entity.WriteRequest}
    * @return submit operation result {@link Response} 
    * @throws Exception {@link Exception} 
    */
    Response write(WriteRequest request) throws Exception;
    ... 
}public class ProtocolManager extends MemberChangeListener implements DisposableBean {
    ... 
    private void initAPProtocol() {
        ApplicationUtils.getBeanIfExist(APProtocol.class, protocol -> {
            Class configType = ClassUtils.resolveGenericType(protocol.getClass());
            Config config = (Config) ApplicationUtils.getBean(configType);
            injectMembers4AP(config);
            protocol.init((config));
            ProtocolManager.this.apProtocol = protocol;
       });
    }
    private void initCPProtocol() {
        ApplicationUtils.getBeanIfExist(CPProtocol.class, protocol -> {
            Class configType = ClassUtils.resolveGenericType(protocol.getClass());
            Config config = (Config) ApplicationUtils.getBean(configType);
            injectMembers4CP(config);
            protocol.init((config));
            ProtocolManager.this.cpProtocol = protocol;
       });
    } 
    ...
 }2、数据存储抽象
public interface KvStorage {
enum KvType {
/**
 * Local file storage. 
 */
File, 
/**
 * Local memory storage. 
 */
Memory, 
/**
 * LSMTree storage.
 */
LSMTree, AP, CP, 
}
// 获取⼀个数据
byte[] get(byte[] key) throws KvStorageException;
// 存入⼀个数据
void put(byte[] key, byte[] value) throws KvStorageException;
// 删除⼀个数据
void delete(byte[] key) throws KvStorageException;
... 
}











