深入浅出高性能服务发现、配置框架Nacos系列 2: Nacos项目结构介绍

今天,我们分析一下Nacos工程的包模块结构,都是负责什么功能的,从全局看一下整个工程,从整体到细节,还没下载源码的同学,赶紧动起来!https://github.com/alibaba/nacos,这个是github代码地址,开始之前先start关注一下,加上watch,后续的邮件列表也会通知到你,可以关注到Nacos的最新实时消息,及各大牛之间的精彩讨论。

截止本文发出,代码最新是master分支上0.2.0版本的,新开源版迭代会比较频繁,很可能某个类,或者模块依赖关系,下个版本就不一样了,请不要疑惑。

通过分析Nacos源码工程中的pom模块依赖,画出了如下每个模块的依赖关系,每个component就对应者工程里面的一个maven module,我们重点关注一下工程代码相关的模块的依赖关系,依赖关系从上往下,下图右边部分:

接下来,将介绍一下每个模块在Nacos工程中的职责及依赖关系。

console模块:

目前里面是空的,根据Nacos的版本规划,预计在0.3.0版本里面,会在这个模块里面放入Nacos控制台相关代码,及前端资源,它依赖config和naming模块,由此可以看出,consule前端依赖的api,将直接由这2个模块进行提供

config模块:

大家知道,Nacos目前有3大核心功能,其中一个是动态配置发现,这个包里面,放的就是配置中心的代码,打开模块,内部的包结构如下图:

基本上从名字都能猜出个大概,这里就不详细讲解里面的具体实现了,后续有章节介绍。工程是基于spring boot构建的,所以会有一个入口类Config,里面打开就是Spring boot玩家熟悉的spring boot加载入口方法了,SpringApplication.run(Config.class, args)

naming:

这个是Nacos的另外一个核心功能的代码模块,动态服务发现,内部的包结构如下:


和config模块类似,NamingApp是spring boot的入口类,其他的都通过包隔离了,各个包的名字,大家也可以猜出大概是承担什么功能的

core模块

从上图可以看出,由config直接依赖,目前里面是空的,看来还是属于规划之中,从core上里面,这里可能会抽取出一些核心服务,供多个功能模块使用,例如数据层,一致性协议等

common模块

目前由config通过core间接依赖到,翻开了里面的代码,是一些公用的工具类,如下图所示:

目前只有这些工具类,naming目前没有依赖到,但是后续和config模块进行融合时,这里面后续会放入共同依赖的一些类,例如请求对象,异常,协议结构等

client模块

这个里面放的是Nacos客户端的代码,服务发现和配置管理2个功能的客户端,目前在工程模块上已经做了统一,但是,在代码包上面,还是分离到,可以从包结构里面看出,如下:

很明显分了2个模块,配置和naming,后续随着整合到深度,这些都会陆续合并掉,真正做到统一

api模块

这个里面,主要是把naming和config的api进行了抽取,从结构上看更清晰一些,api的具体实现,都还在client模块里面,它包结构如下:

Nacos的使用手册中,使用到的工厂类,NacosFactory在构建对应实例时,调用的就是api里面的,根据不同的方法,再通过反射构造出对应的实例:


public static ConfigService createConfigService(String serverAddr) throws NacosException {
   Properties properties = new Properties();
   properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
   try {
      Class<?> driverImplClass = Class.forName("com.alibaba.nacos.client.config.NacosConfigService");
      Constructor constructor = driverImplClass.getConstructor(Properties.class);
      ConfigService vendorImpl = (ConfigService) constructor.newInstance(properties);
      return vendorImpl;
   } catch (Throwable e) {
      throw new NacosException(-400, e.getMessage());
   }
}
  • 其他非工程源码的模块,是用来放测试用例,文档,打包文件,启动脚本的,这个就不详细讲了,大家有兴趣可以翻开来看看。

总结

Nacos的工程,包含了Nacos Server和Nacos Client2个工程的代码,后续会再console的代码也放入总工程中,这些代码都放在一起,对使用和学习者来说,是非常方便的,其中,Nacos Server,由配置和服务发现2个大功能,分别由config和naming承载,client和naming模块的代码,都没有共同依赖的类,由此可以看出,client与server之间的协议,是和语言没有关系,没有涉及到自己的私有应用层协议,这样的话,多语言客户端的接入,会简单很多,在客户端的模块里面,这2个功能就统一到了NacosClient模块里面,server目前还是不同的模块,后续这块需要看Nacos的架构融合演进。

总的来说,目前Nacos的工程,将框架都搭好了,但是一些整合的实现和优化,都还未清晰,好几个包都是空的,功能和系统架构,还在规划之中,因此大家多参与进来,有很多的机会和空间给你们发挥,你的提议很可能会成为Nacos的标准,服务于世界级工程应用!

转载请联系:微信(zjjxg2018)

原文地址:http://blog.51cto.com/13995002/2287542

时间: 2024-08-29 18:32:38

深入浅出高性能服务发现、配置框架Nacos系列 2: Nacos项目结构介绍的相关文章

深入浅出高性能服务发现、配置框架Nacos系列 3: 服务发现:Nacos客户端初始化流程

上一章节,我们从全局了解了一下Nacos项目的模块架构,做到了心中有数,现在,我们去逐步去挖掘里面的代码细节,很多人在学习开源的时候,无从下手,代码那么多,从哪个地方开始看呢?我们可以从一个接口开始入手,这个接口是你使用过的,知道它大概做什么事,有体感的,大家还记得第一章时,我们写的HelloWorld吗,对,就从里面的接口开始剥洋葱. 这个是Nacos的github代码地址,开始之前先start关注一下,加上watch,后续Nacos的邮件列表也会通知到你,可以关注到Nacos的最新实时消息,

深入浅出高性能服务发现、配置框架Nacos系列 1: HelloWorld

Nacos是什么? 引用官方的介绍,他主要提供以下几个功能点: 动态配置服务 服务发现及管理 动态DNS服务 动态配置服务 就是通过一个系统,管理系统中的配置项,在配置项需要更新的时候,可以通过管理系统去操作更新,更新完了之后,会主动推送到订阅了这个配置的客户端 具体的使用场景,例如,在系统中,会有数据库的链接串,账号密码等配置信息,常规的做法是写在配置文件里面,如果需要修改更新,需要重新打包编译,如果你是分布式集群,那成本太大了,通常我们都会将它抽取出来,存放到db,或者一个管理系统,Naco

Nacos系列:Nacos的三种部署模式

三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 单机模式 启动 Nacos Server Linux:sh startup.sh -m standalone Windows:cmd startup.cmd -m standalone 或 双击 startup.cmd 启动 关闭 Nacos Server Linux:sh shutdown.sh

Nacos系列:Nacos的Java SDK使用

Maven依赖 Nacos提供完整的Java SDK,便于配置管理和服务发现及管理,以 Nacos-0.8.0 版本为例 添加Maven依赖: <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>0.8.0</version> </dependency> 仅仅引入naco

二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu.com/s/1o6MAKCa       前言:前面几章讲解了开发一个Web系统的完整目录结构与界面开发框架JqueryEasyUI,接下来几章讲解开发Winform系统的完整目录结构与界面开发的相关控件.开发Winform系统又分为两种类型,C/S模式和C/S/S模式:其中C/S/S模式的中间

Android实际开发中的首页框架搭建(一、项目结构搭建)

前段时间忙得不可开交,一直想抽个时间写一个博客,然后就一直拖到了现在,确实感觉有点愧疚... 这段时间买了几本书正在看,想让自己好好沉下心来,又去慕课网看了些视频,确实发现以前自己落下了蛮多知识点,还是有点收获, 所以,在此呼吁一下,干我们这行,需要不断学习,只有在学习中,才能明白自己有多水,才能让自己不断变强! 好了,进入正题,这一次准备了一些很基础的东西,但也是非常重要的东西,对于我们实际开发真的很有帮助 知识点一:使用BaseFragment/BaseActivity的作用:抽象到父类的思

Apache配置站点详细讲解(apache目录结构介绍)

apache模块: 查看Apache有哪些参数:/application/apache2.2.34/bin/apachectl 查看Apache安装了哪些模块:/application/apache2.2.34/bin/apachectl -l跟踪apache进程:strace /application/apache2.2.34/bin/apachectl -M 如果解析很慢,打开/etc/hosts/文件在第一行后面加上httpd ############################vi

Vue开发系列二 熟悉项目结构

初始项目结构如上所示.src:  写代码地方,我们大部分的操作都在此 static :资源目录 static目录下还可以放一些第三方的js库,通用的css等,这样每次打包的时候节省打包时间 原文地址:https://www.cnblogs.com/menchao/p/8425749.html

SpringCloud使用Nacos服务发现实现远程调用

本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. <SpringBoot使用Nacos配置中心> <SpringBoot使用Nacos服务发现> 在SpringBoot使用的时候,需要自行去向Nacos服务注册自己的服务,Nacos也提供了SpringCloud服务发现的依赖,本文结合spring-cloud-starter-alib