设为首页 加入收藏

TOP

说透 Nacos 一致性协议(二)
2023-09-23 15:44:46 】 浏览:313
Tags:说透 Nacos
ers4AP(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; }); } }

仅做完?致性协议抽象还不够:

  • 服务注册发现及配置管理还是要依赖?致性协议接口,在两个计算模块中耦合了带状态的接口
  • 虽然做了比较高度的?致性协议抽象,服务模块及配置模块却依然还是要在自己代码模块去显式处理?致性协议的读写请求逻辑
  • 需要自己去实现?个对接?致性协议的存储

服务发现及配置模块,更应专注数据使用及计算,而非数据咋存储、咋保障数据?致性,数据存储及多节点?致问题应交由存储层保证。

为了:

  • 降低?致性协议出现在服务注册发现及配置管理两模块的频次
  • 尽可能让?致性协议只在内核模块中感知

Nacos又做数据存储抽象。

5 数据存储抽象

?致性协议是为保证数据?致,如利用?致性协议实现存储,那服务模块以及配置模块,就由原来的依赖?致性协议接口转为依赖存储接口,而存储接口后面具体实现就比?致性协议丰富,且服务模块、配置模块也无需为直接依赖?致性协议而承担多余编码工作(快照、状态机实现、数据同步)。使这两模块可更专注自己核心逻辑。对于数据抽象,这里仅以服务注册发现模块为例:

package com.alibaba.nacos.core.storage.kv;

public interface KvStorage {
    
    enum KvType {
        /**
         * Local file storage.
         */
        File,
    
        /**
         * Local memory storage.
         */
        Memory,
    
        /**
         * RocksDB storage.
         */
        RocksDB,
    }
  // ...
}

由于 Nacos 的服务模块存储,更多是根据单或多个唯? key 去执行点查,因此KV存储接口最适合。接口定义后,就是这KVStore具体实现。可直接将 KVStore 实现对接 Redis,DB或直接根据 Nacos 内核模块的?致性协议,在此基础之上,实现?个内存或者持久化的分布式强(弱)?致性 KV。

通过功能边界将 Nacos 进程进?步分离为计算逻辑层和存储逻辑层,计算层和存储层之间的交互仅通过薄薄数据操作胶水代码,就在单个 Nacos 进程里面实现计算、存储彻底分离。

存储层

进?步实现插件化的设计,对于中小公司且有运维成本要求的话,可以直接使用 Nacos 自带的内嵌分布式存储组件来部署?套 Nacos 集群。

服务实例数据以及配置数据的量级很大的话,并且本身有?套比较好的 Paas 层服务,那么完全可以复用已有的存储组件,实现 Nacos 的计算层与存储层彻底分离。

本文由博客一文多发平台 OpenWrite 发布!

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇LeetCode279:完全平方数,动态规.. 下一篇RocketMQ 入门实战(3)--Admin Too..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目