Nacos作为云平台配置中心的若干问

研究Nacos一个多月了,对其配置中心多多少少了解了一点。
本文就对Nacos的三大功能之一:服务的配置管理作一定的探索。
花圈处


配置中心架构图

动态更新流程介绍

在这里插入图片描述

配置内容,Key-Value?文件?

答:服务端存Key-Value,存MsSQL中
在这里插入图片描述
客户端存本地,存储路径:
~/nacos/config/fixed-{address}8848nacos/snapshot/DEFAULT_GROUP/{dataId}

持久层对比,Mysql?Oracle?能否支持分库?分库保证CP还是AP?

答:只支持MySQL,不支持分库。默认是一主一从。

Server端保证是CP还是AP?

看看Maintainer的回答吧

加配置的方式,是页面配置还是Http请求?

答:控制台+OpenAPI

  • Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常见配置格式
  • 在线编辑、语法高亮、格式校验(帮助用户高效编辑的同时大幅降低格式错误带来的风险)
  • Nacos支持配置标签的能力(帮助用户更好更灵活的做到基于标签的配置分类及管理)
  • 支持编辑DIFF能力,帮助用户校验修改内容,降低改错带来的风险。

取配置的方式,嵌入SDK?Http请求?;配置中心通知还是客户端自己轮询?

答:嵌入SDK和Http结合
客户端维持一个长轮询,当服务端配置信息发生变更时,客户端将最新的数据获取下来之后,保存在了 CacheData 中。所以只需要通过一个无状态的 http 请求即可获取到服务端的数据。

客户端存配置的方式,是直接刷新Java系统配置?是Load到Bean里?还是落本地文件?

答:Load到Bean里。

客户端拉取最新的数据后保存在 CacheData 中,同时更新该 CacheData 的 Md5 值,当下次执行 checkListenerMd5 方法时,若本地的Md5 值和最新配置的Md5值不一样,就意味着Server端的配置信息发生改变,这时将最新的数据通知给监听器的持有者。

监听器获取配置方式:

configService.addListener(dataId, group, new Listener() {
   @Override
   public void receiveConfigInfo(String configInfo) {
       System.out.println("receive: " + configInfo);
   }
   @Override
   public Executor getExecutor() {
       return null;
   }
});

Spring cloud中@RefreshCope 方式刷新配置:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章