0
点赞
收藏
分享

微信扫一扫

【微服务】Nacos 如何做到⼀致性协议下沉的与自研 Distro 协议

是波波呀 2022-12-20 阅读 27

 

目录

一、⼀致性协议下沉

1、⼀致性协议抽象

2、数据存储抽象

二、Nacos 自研 Distro 协议

1、背景

2、设计思想

2.1、数据初始化

2.2、数据校验

2.3、写操作

2.4、读操作

3、小结


一、⼀致性协议下沉


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;

... 
}

 

二、Nacos 自研 Distro 协议

1、背景

2、设计思想

2.1、数据初始化

2.2、数据校验

2.3、写操作

2.4、读操作

3、小结

举报

相关推荐

0 条评论