Nacos,一款非常优秀的注册中心(附视频)

news2024/11/22 19:18:05

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 分钟来查看本章内容,期待你的加入,相信学习完会收获满满!!!

技术分享是美好的,技术提升是关键的,技术原理是核心的,你们的支持,才是我写下去的动力,谢谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 的 if 语句如何使用说明

文章目录1. 一个示例2. 条件测试2.1 检查是否相等2.2 检查是否相等时不考虑大小写2.3 检查是否不相等2.4 比较数字2.5 检查多个条件2.6 布尔表达式3. if 语句4. 使用 if 语句处理列表1. 一个示例 关于 if 条件语句的使用,我们来写一个示例进行说明: #写…

6.14 Rayleigh商

定义 矩阵在某个向量处的瑞利商Rayleigh quotient是这样定义的: ρ(x):xHAxxHx\rho(x) :\frac{x^HAx}{x^Hx} ρ(x):xHxxHAx​   这个怎么理解呢?上面是埃尔米特内积的表达式,下面是标准埃尔米特内积。但是矩阵不一定是对称阵,如果不是复数的话&#x…

ChatGPT 这个风口,普通人怎么抓住:比如APP集成ChatGPT,公众号集成ChatGPT...

文章目录1. 引出问题2. 简单介绍ChatGPT2.1 ChatGPT是什么2.2 如何使用ChatGPT3. 普通人利用ChatGPT 变现方式1. 引出问题 最近几天OpenAI发布的ChatGPT聊天机器人如日中天,连着上了各个平台的热搜榜。 很多平台也都已集成了ChatGPT,比如csdn的客户端A…

json-server使用

文章目录json-server使用简介安装json-server启动json-server操作创建数据库查询数据增加数据删除数据修改数据putpatch配置静态资源静态资源首页资源json-server使用 简介 github地址 安装json-server npm install -g json-server启动json-server json-server --watch db…

Linux系统位运算函数以及相应CPU ISA实现收录

以32位数据的二进制表示为例,习惯的写法是LSB在左,MSB在右,注意BIT序和大小端的字节序没有关系。Linux和BIT操作有关的接口在定义在头文件bitops.h中,bitops.h定义有两层,通用层和架构层,对应两个bitops.h&…

【重要】2023年上半年有三AI新课程规划出炉,讲师持续招募中!

2023年正式起航,想必大家都已经完全投入到了工作状态中,有三AI平台今年将在已有内容的基础上,继续进行新课程开发,本次我们来介绍今年上半年的课程计划,以及新讲师招募计划。2023年新上线课程我们平台的课程当前分为两…

【Python爬虫案例】批量采集网站壁纸,实现自动更换桌面壁纸

前言 美照天天换,才不会腻 不知道你们是不是这样,我的手机壁纸电脑壁纸,隔三岔五就喜欢换,看久了 我就腻了,索性就用python把这个网站的壁纸都采集下来,顺便再让电脑自动更换我的桌面壁纸 ~ 一篇文章教会…

【AI简报第20230210期】 ChatGPT爆火背后、为AIoT和边缘侧AI喂算力的RISC-V

1. ChatGPT爆火背后:AI芯片迎接算力新挑战原文:https://www.163.com/dy/article/HT7BHN3C05199NPP.htmlChatGPT的出圈走红为AIGC打开全新市场增量,催生了更高的算力需求。作为人工智能三大核心要素之一,算力也被誉为人工智能“发动机”。华泰…

使用服务器搭建alist和webdav

docker镜像官网:https://hub.docker.com/r/xhofe/alist 一、准备工作 环境:centos7、docker 二、步骤 1.拉取alist镜像 在根目录下执行以下命令: docker pull xhofe/alist:latest2.运行alist docker run -d --restartalways -v /etc/ali…

互联网医院源码 线上问诊 智慧医院源码 C#源码

互联网医院平台源码 智慧医院管理系统源码 开发环境:ASP.NET C# VS2019 SQL2008 依托于实体医院利用互联网技术对接院内业务信息系统,向患者提供基于线上问诊、预约挂号、缴费结算、医患互动、诊后随访、健康科普和复诊等全面的医疗健康互联网服务。…

一文读懂 Zebec Chain 的“先行网络” Nautilus 链

最近,Zebec上线了DAO治理系统后,上线并通过了关于Nautilus链的提案,这也是DAO系统上线后通过的首个提案。Nautilus链可以被看作是Zebec Chain上线前的“先行”链,并且是目前行业内为数不多的以“Layer3”作为特点的模块化通用链&a…

花2到5块钱注册体验chatgpt

最近很火的chatGPT不对中国开放,简直太坑了。不过网上也有很多例子去如何注册, 1. 需要可以上网的非中国IP。 有梯子的也可以, 我是某宝3块钱租了一个一天体验的国外服务器,可以查阅资料,有需要可以直接去淘。 2.一个…

vsCode添加右击打开文件夹或者文件功能

1. 前言 vsCode有两种安装方式,通过exe执行安装或者绿色版的软件安装。如果使用绿色版软件,不会自动右击文件夹用vscode打开。此时就需要通过修改注册表的方式进行操作。 2. 修改注册表 2.1 打开注册表 win r regedit2.2 右击文件用vscode打开 找到…

I.MX6ULL内核开发4:设备号的组成与哈希表

目录 一、设备号 二、hash table 一、设备号 文件夹&#xff1a;/home/geralt/linux_driver/kernel/ebf_linux_kernel_6ull_depth1/include/linux/kdev.h 这里面是linux中关于设备号的具体描述 #define MINORBITS 20 #define MINORMASK ((1U << MINORBITS) - 1)#defin…

【C++】十、继承

一、继承的概念及定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构&#xff…

Flink CEP 新特性进展与在实时风控场景的落地

摘要&#xff1a;本文整理自阿里云开发工程师耿飙&阿里云开发工程师胡俊涛&#xff0c;在 FFA 实时风控专场的分享。本篇内容主要分为四个部分&#xff1a;Flink CEP 介绍&新功能解读动态多规则支持与 DemoFlink CEP SQL 语法增强未来规划■ 分享中的动态 CEP 和 CEP S…

mysql面试题(集合)

mysql如何实现索引机制 mysql中索引分三类&#xff1a;B树索引、Hash索引、全文索引 InnoDB索引与MYISAM索引实现的区别是什么 1.InnoDB的辅助索引data域存储相应记录主键的值而不是地址 2.InnoDB的数据文件本身就是主索引文件 3.MyISAM的索引和数据是分开存储的 一个表中如…

ChatGPT 来了,你准备好了吗?

周三的晚上&#xff0c;我做了一次直播&#xff0c;题目叫做《ChatGPT 来了&#xff0c;老师和同学们准备好了吗&#xff1f;》。如果你还没看&#xff0c;欢迎看看回放视频。做这次直播&#xff0c;是因为受了三重刺激。第一重&#xff0c;来自于我的一位好友&#xff0c;也是…

自上而下的传输协议-TCP/IP 的演化

动机来自昨天下班路上快到家发的一则朋友圈&#xff1a; 作为因果的历史是不存在的。因为有无数种对等的解释。这个可以用拓扑学证明的&#xff0c;模型非常简单&#xff0c;事件作为点&#xff0c;事件之间的关系作为连接两点的有向边。 最近思考一个问题&#xff0c;传输协…

MongoDB 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。 update() 方法 update() 方法用于更新已存在的文档。语法格式如下&#xff1a; db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document…