Nacos 核心源码精讲 - IT贱男 - 掘金小册全方位源码精讲,深度剖析 Nacos 注册中心和配置中心的核心思想。「Nacos 核心源码精讲」由IT贱男撰写,375人购买https://s.juejin.cn/ds/BuC3Vs9/
先简单说两句
你好,很高兴你能够点开本小册,相信你一定是对本小册产生了一点点兴趣。接下来我再占用你 5 分钟时间,邀请你认真浏览一下本章,相信这 5 分钟,能够让你对 Nacos 更加感兴趣。
作者我没有高学历,没有雄厚背景,没有待过阿里、腾讯、华为、字节,我只有一颗对技术知识渴望的心、高颜值和 1 米 8 的个头。
从 2013 年的冬天我开始学习 VB(Visual Basic)语言,时隔一年开始学习 C 语言、C#,2015 年接触 Java 到现在,算下来在研发领域也将近十年之余了。学习技术是我坚持最久的一件事,把爱好发展成职业,也慢慢喜欢去分享技术,从 2018 年开始写技术相关的博客,相信技术、传递价值。
本小册最初的由来: 有一天我在逛掘金课程的时候,没有发现专门讲解 Nacos 源码相关的课程,那怎么行?所以,我在 2022 年 6 月份开始规划 Nacos 的学习路线,并且 11 月决定用小册
的方式写下来。
为什么想讲注册中心?
注册中心,是我们踏入微服务门槛的第一个组件,同时也是微服务必备
的一个组件。
在传统的服务与服务之间调用,A 服务想要调用 B 服务,最常见的就是在项目中通过 ip + port 进行调用,如果 B 服务是集群,那我们还需要自己搭建一个负载均衡服务来实现,这种方式的缺点有:
- 需要在项目中维护调用的 ip + port,更改还需要重启应用,不灵活;
- 集群实例增加,需要额外来更改负载均衡配置。
而使用注册中心,能够很好地实现服务治理、服务动态扩容,以及调用时能有负载均衡的效果,调用链路如下:
- 服务提供者:每台服务提供者,会把自己本身的 ip + port 信息提供给注册中心。
- 注册中心:会记录每台服务名称以及每台服务对应的 ip + port。
- 消费者:订阅注册中心,根据服务名称,动态根据负载均衡策略选择其中一台 ip + port ,从而完成服务调用。
采用注册中心这种方式就能很好地解决传统模式中的痛点,并且能够很好地管理、监控服务,所以它成为了微服务中必备的组件之一,同时也是我们必须掌握的。
为什么会选择 Nacos?
Nacos 则是一款非常优秀的注册中心框架
,在市场的使用占有率也是日益增长,它不仅仅帮助我们管理服务,还能帮助我们管理项目中的配置文件。
Nacos 提供了一个简洁易用的 UI 来帮助我们管理所有服务和应用的配置, Nacos 两个核心功能
如下。
-
服务管理。Nacos 可以为我们提供很好的服务治理,服务实例状态响应时效快,Nacos 可以根据 Namespace 命名空间、Group 分组来区分不同的项目、不同的环境,使用上更加灵活。而且 Nacos 还提供了对服务实时的健康检查,阻止向不健康的主机或服务实例发送请求。
-
配置管理。Nacos 可以让微服务配置中心化,采用外部化和动态化的方式管理所有环境配置和应用配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
除此之外,在学习过程中,你还会发现 Nacos 有如下优点
。
-
第一个,学习门槛不高。
学习 Nacos 的源码,绝对不像 Spring 那样烧脑,Spring 中的源码我每年都需要不断地去学习,逻辑也比较复杂,对于经验不够的同学,学习 Spring 门槛太高了。Nacos 不一样,Nacos 服务端其实就是一个
SpringBoot
项目,它也有Controller
,它里面也会使用@RestController
、@RequestMapping
注解,这些同学们都应该很熟悉了吧,所以源码阅读起来也会比较得心应手。 -
第二个,优秀的设计思路。
Nacos 里面有很多好的设计思路,比如 Nacos 支撑高并发异步任务 + 内存队列这种设计思想, 在实际工作中需要大量处理一些不紧急的任务时,就可以借鉴 Nacos 里面的源码实现思路,还有 Nacos 中的
http
请求包,我也是参考 Nacos 的源码,最后运用在公司业务网关模块中,使公司网关对于业务处理更加灵活、方便。(所以,再灵魂拷问下,你们觉得学习源码有用吗?) -
第三个,源码简洁清爽。
Nacos 的源码是真的很清爽,方法里面的逻辑基本是一屏就能浏览完,下图是实例注册源码中的部分源码截图:
本小册主要学习内容
做事情,凡事都讲究一个方式方法,我们学习源码也是一样。
本小册源码讲解过程中,并非是直接告诉你,这一块代码有什么用、那一块代码有什么用,因为这样缺少了一个分析过程,学习效果不好。 而是以第一人称
的方式,从官方文档浏览、项目实战、思考问题、查看源码解决问题的方法,带着大家一步一脚印,慢慢挖掘 Nacos 源码。
对于没有使用过 Nacos 的同学,在前面第一模块的学习中,我会讲解 Nacos 相关概念和原理、搭建、项目实战,在实战过程中,会带大家总结一些疑问。有了疑问,我们学习源码才不会迷茫、枯燥,也是循序渐进。
本小册一共分为 三大模块
。
第一模块,主要讲解 Nacos 核心功能源码,最基本的实例注册、服务发现、健康心跳检查、服务下线等核心源码,尤其是实例注册这一块,会涉及到 Nacos 内存注册表、高并发异步任务架构、内存任务队列、并发读写冲突核心源码。
第二模块,在上一模块的基础之上,再来讲解集群的相关源码。由于很多同学都不了解什么是 CAP 原则,所以这一模块首先是详细讲解 CAP 原则、什么是 CP 架构和 AP 架构,以及 Raft 协议理论知识。学习完理论之后,我们再回到 Nacos 源码当中,分析一下 Nacos 是如何实现 Raft 协议的,以及在集群架构下,心跳集群架构、节点状态集群同步、新增实例集群同步等源码分析。
第三模块,主要讲解客户端启动如何读取配置文件、如何感知配置文件变更,Nacos 服务端如何持久化配置文件,以及集群架构多节点数据同步等。
本小册的详细课程目录如下图:
在源码学习的过程中,边学习,边总结,边画图
。 画图的好处就是更加直观地总结学习内容,并且对于后期的复习也是有很大帮助的。每一个章节源码总结图我也会画好贴出来
,但这个是“别人”总结的,希望你在学习的时候,能够自己动手画,这样才是属于自己的。
适宜人群
学习本小册至少是要了解微服务概念和常见的组件,使用过最好。这个我相信应该都没什么问题,我以前刚毕业那会儿,会用 Spring、MyBatis 就可以了,现在我面试初级的程序员,简历项目中,都会涉及到 Spring Cloud 等相关技术,真是一代更比一代强。
适合工作经验一两年,想要在技术这一块儿进阶的同学,Nacos 源码是一个很好的选择。对 Nacos 源码比较感兴趣的同学,那本小册就更加符合你的胃口了。
最后
感谢你花费 5 分钟来查看本章内容,期待你的加入,相信学习完会收获满满!!!
技术分享是美好的,技术提升是关键的,技术原理是核心的,你们的支持,才是我写下去的动力,谢谢大家!