微服务实战(五) Nacos架构源码分析---配置中心

 

本章节主要内容:Nacos的架构介绍、配置中心源码初步分析

nacos官网 https://nacos.io/

nacos源码 https://github.com/alibaba/Nacos

我们已经在前面章节启动了Nacos,并且作为了 服务注册发现中心 和 配置中心,作为微服务开发者,其实很有必要去了解下微服务这些核心组件的架构、实现,虽然在实际开发中这些组件都是拿来即用的,但是这些组件里面涵盖了很多优秀的分布式架构思想,如果能边用边深入了解,相信随着积累,架构思想会潜移默化地影响你,这也是开发人员差距之所以这么大的原因。

Nacos架构图

Nacos工程结构

首先要做的当然是下载Nacos源码咯,maven构建完成后的工程目录如下:

 

Nacos配置中心

配置中心在微服务架构中主要负责各个微应用自有或者公有的配置信息管理,包括配置信息的添加编辑、读取、变化后的通知等。Nacos还提供了配置信息的版本控制、监听管理等增强功能。下面一起去看一下Nacos配置中心的主要功能吧。

主要功能点

咱们暂且就根据功能图一步步去了解具体功能都是在哪儿怎么实现的吧,一篇文章肯定也不可能逐行把代码分析清楚,这里我就主要流程上的关键节点简单分析一下,其实最重要的是掌握阅读源码的方法,先有个提纲,把流程实现弄明白,具体细节先知道有这么回事就行了,等流程清晰了,每个细节去深入分析也不迟。

【配置CRUD】

配置中心的配置发布以及获取功能我们在之前章节已经演示过了,下面我们打开nacos-config工程,直接进入到 核心功能的控制器中,可以看到该控制器中的接口对应着我们之前用过的几个功能。

配置CRUD控制器的位置:/nacos-config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java

(源码本身有一丢丢中文注释,不愧是国货啊)

我们就抱着试一试的态度简单看一下配置发布这个功能吧,其余的咱也不花太多时间看了,关于看代码这件事嘛,我一直觉得最重要的是要把整体的流程看明白,至于每一步里的一些细节,看个大概(闲得蛋疼的时候可以去看看具体咋实现)。

功能点1:增加或更新配置数据     

方法入口< publishConfig>    /nacos-config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java

重点看这个调用,前面那些花里胡哨的参数校验,参数的处理就先跳过啦!

persistService.insertOrUpdate(srcIp, srcUser, configInfo, time, configAdvanceInfo, false);

数据源的选择

通过多年的临床经验,一眼就能看出这是将提交的配置信息持久化。

看到这儿或许有点懵吧,想起前面咱们的部署过程,并没有去安装啥数据库吧!难道是放到内存中了吗?那还能持久吗?

顺藤摸瓜找到 PersistService--->init()--->dynamicDataSource.getDataSource()

 public DataSourceService getDataSource() {
        DataSourceService dataSourceService = null;

        if (STANDALONE_MODE && !propertyUtil.isStandaloneUseMysql()) {
            dataSourceService = (DataSourceService)applicationContext.getBean("localDataSourceService");
        } else {
            dataSourceService = (DataSourceService)applicationContext.getBean("basicDataSourceService");
        }

        return dataSourceService;
    }

又一眼看出,如果咱们启动模式是 单机模式,就是使用的 localDataSourceService ,而集群模式启动的话,就是用的 basicDataSourceService。  

嗯,单机模式用的是derby数据库,而集群模式的话就需要使用mysql咯(单机模式也可以强制配置使用mysql)。

直接打开 /nacos-config/src/main/java/com/alibaba/nacos/config/server/service/LocalDataSourceServiceImpl.java

private static final String JDBC_DRIVER_NAME = "org.apache.derby.jdbc.EmbeddedDriver";

在内部会执行初始化脚本,建立好数据表,derby的初始化脚本: META-INF

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值