目录
一、⼀致性协议下沉
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;
...
}