三方源码 画饼图_分享计划花一天时间学习 Nacos 源码

7b4728618180a5866376de5b9012edf2.png

 —— 封面来自腾讯云

对技术人来说,把时间挤出来学习。或许能够让思维短暂的离开,那令人烦恼的生活。

Nacos 是我最近几周在学习的内容,对于 Nacos 给我的感觉是:

首先,它不是一个成熟的产品,因为它有很多的功能列表等待实现。

其次,它是一个成功的产品,因为它有许多成功的案例。

最后,通过对它的学习,还是能够感受到一个自我提升。

一、架构介绍

获取一下完整的项目代码 git clone https://github.com/alibaba/nacos.git,导入到 Eclipse 就可以开始本次的源码学习之旅。如图:

8ecdc6639f58070a461dd82321eb1602.png

完整的项目架构图

Nacos 是一个典型的 Maven 架构项目,在导入的过程中 Eclipse 会自动的联网下载需要的 jar。开源的第三方还可以下载对应的 sources 源代码,这对于运行调试有很大帮助。

主要的文件目录与作用:

  • nacos-address               地址服务器

  • nacos-api                        HTTP 接口

  • nacos-auth                     安全认证管理

  • nacos-client                   Java 客户端

  • nacos-cmbd                   元数据管理

  • nacos-common              工具管理

  • nacos-config                  配置管理

  • nacos-consistency        一致性管理

  • nacos-console                控制台管理

  • nacos-core                      Nacos 内核

  • nacos-distribution          配置启动管理

  • nacos-example               示例工程

  • nacos-lstio                       lstio 服务网格

  • nacos-naming                 服务注册发现

  • nacos-test                       测试工程

  • style                                  社区代码风格文件

官方提供的逻辑架构是这样的:

2deec62ce24d92c8d2b67556deeea915.png

逻辑架构组件图

从主要的文件目录、逻辑架构可以看出,Nacos 核心骨架包括了 nacos-core 组件、元数据、服务管理组件、配置管理组件、元数据管理组件、OpenAPI。基于核心骨架又添加了易于管理与第三方接入的 Console、SDK、Agent、CLI 模块,以及各种插件模块。

二、核心骨架

核心骨架对应的文件目录包括了:

nacos-core, nacos-common, nacos-consistency, nacos-auth, nacos-api, nacos-naming, nacos-address, nacos-cmbd。

1. nacos-api

首先是目录结构、POM 文件的引用依赖。

c2192decb99aab76d5d4a08e7639552e.png

POM 文件在排除不太重要的之外,使用了三种重要的第三方库。分别是用来序列化和反序列化的 jackson、用于基础通用操作的 commons-lang,以及用于处理并发操作的 guava。

NacosFactory.java 提供了六种工厂方法分别生产 ConfigService、NamingService、NamingMaintainService 接口对象。

以 ConfigService 接口对象为例,它提供了八个接口方法。分别是获取 config,获取 config 并注册监听,注册、删除监听,发布 、移除 config,关闭服务。(完整的接口实现在 nacos-client 项目,篇幅原因不详细展开。)

也就是说,nacos-api 是一个核心项目,它没有提供具体的实现功能,只是定义了大量的 nacos 核心注解、接口、工厂类、异常类等等。

2. nacos-common

首先是目录结构、POM 文件的引用依赖。

d37368417fd9938390fa24f007e1727f.png

POM 文件在排除不太重要的之外,使用了三种重要的第三方库。分别是用来序列化和反序列化的 jackson、用于基础通用 I/O 操作的 commons-io,以及用于处理异步 HTTP 操作的 httpasyncclient。

nacos-common 提供了线程工厂类与线程池管理类、封装了异步 HTTP 调用、通知消息与监听、任务创建与任务管理等工具类。

3. nacos-common

首先是目录结构、POM 文件的引用依赖。

fa19b6b452b4d406e281d9c53b9beae2.png

POM 文件在排除不太重要的之外,使用了三种重要的第三方库。分别是元组类型工具 javatuples、二进制格式传输服务框架 hessian、序列化与反序列化工具 protobuf-java。

nacos-consisitency 定义了两种协议 APProtocol.java 和 CPProtocol.java,通过 protobuff 实现了 GetRequest、Response、Log 的创建者工具。

小知识点:

分布式系统有一个重要特性,也就是 CAP。其中,三个元素最多只能同时实现两个,不可能三者兼顾。因为分布式系统的分区容错性最基本的要求,所以只能在 C 与 A 之间进行选择。是牺牲强一致性来满足高可用性,还是牺牲高可用性来满足强一致性。

其中:

C:一致性 Consistency

A:可用性 Availability

P:分区容错性 Partition

4. nacos-auth

首先是目录结构、POM 文件的引用依赖。

fbfe04cfe6c03aebde1c72507bdfe31b.png

POM 文件在排除不太重要的之外,使用了三种重要的第三方库。分别是 spring-boot-starter、tomcat-embed-core、jjwt-api。

这是一个定义了 auth 认证基本参数的 spring-boot-starter 项目。

5. nacos-core

首先是目录结构、POM 文件的引用依赖。

745a69a0b19156cca6dde19209c22787.png

这是 nacos 最核心的项目工程,引用了以上四个小项目。分别是 nacos-api、nacos-common、nacos-consistency、nacao-auth。

AuthConfig.java 使用 @Configuration、@Bean 注解实现 FilterRegistrationBean 注入,对 “/*” 请求启用 AuthFilter.java 进行 auth 认证。

DistroTaskEngineHolder.java 使用 @Component 实现了对 DistroDelayTaskExecuteEngine、DistroExecuteWorkersManager 的初始化。

JRaftProtocol.java 使用了 JRaft 算法实现了 CP 协议。

809579326a631634eabcbf6d942f21fc.png

nacos-core 还是有很多晦涩难懂的地方,由于个人实力有限,本周的源码学习就学到这里啦~~

三、Example

举一个官方的案例

85619719530857e39105beafbd49b78f.png

通过 NacosFactory 的方法创建一个 ConfigService 对象。

调用 ConfigService 创建监听的接口,对 configInfo 参数进行监听,同时预留获取执行者的监听方法。

通过 ConfigService 获取、发布、删除 Config 配置。

四、总结

简单梳理了 Nacos 源码,发现 alibaba 开源的产品底层也是很多的开源第三方库。四舍五入约等于“善用开源第三方库就能创造一个产品”

7b5a12f26bd17c2b27b6f6dc41c2e874.png

30个 Branch、330个 Issues、10个 Pull Request、2752次 Commit。

Nacos 还有很长一段路需要走,加油!奥利给!

让我们下周再见。?


0d4bf521d110f89644de23df237983fa.png

感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。

文章有帮助可以点个「在看」或「分享」,都是支持,我都喜欢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值