作为一个注册中心,和eureka类似,核心的功能点:

1.服务注册:nacos客户端携带自身信息向nacos服务端进行注册。

2.服务心跳:客户端定时向服务端发送心跳,告知服务端自己处于可用状态

3.服务健康检查:服务端定时检查客户端是否有发送心跳,如果超过15s没有收到心跳,那么就会将该客户端实例设置为不健康状态,如果超过30s没有收到心跳则会剔除该客户端实例

4.服务同步:服务端为了高可用,通常都是集群模式,那么集群之间需要进行数据的同步。

5.服务发现:客户端向服务端查询所有注册的服务列表。客户端获取到之后会放入自己的本地缓存,需要使用的时候,先从本地缓存拿,没有再去服务获取。同时还有定时任务,去服务端拉取注册列表,更新本地缓存,如果失败拉取的间隔时间会根据失败次数增加。

源码分析:

从客户端开始入手,切入点当然是spring-cloud-starter-alibaba-nacos-discovery包的spring.factories文件中的自动配置类

1.最为关键的就是NacosDiscoveryAutoConfiguration 和 NacosServiceRegistryAutoConfiguration 这两个配置类了,eureka是通过SmartLifecycle整合进spring的,从配置类中创建的NacosAutoServiceRegistration这个类,追溯一下可以看到这个是实现了ApplicationListener接口,所以nacos是通过这个接口整合进spring的

2.nacos源码中很多地方都是初始化的时候就设置好了定时任务,或者线程池,后续的任务都是直接扔进去执行就是了。

3.nacos提供了AP和CP 两种模式。非持久化实例注册,数据放在内存中,和eureka类似,集群节点之间都是点对点的。如果是持久化实例,则是CP模式,集群节点会有leader和follower,客户端注册的数据会写入磁盘,节点重启时会从磁盘上把数据读取出来。

4.和eureka不同的是,nacos还有主动推送功能,eureka的注册列表发生改变的时候,eureka是失效读写缓存,等待下一次只读缓存(如果使用了)来更新时,重建读写缓存,或者客户端拉取数据时重建读写缓存。nacos并没有使用多级缓存。当注册列表发生改变时,会发送ServiceChangeEvent事件,然后主动向客户端推送信息

源码关键流程图:基于1.4.0

nacos注册中心源码流程分析的更多相关文章

  1. SpringCloud Alibaba Nacos注册中心源码浅析

    一.前置了解 1.1 简介 Nacos是一款阿里巴巴推出的一款微服务发现.配置管理框架.我们本次对将对它的服务注册发现功能进行简单源码分析. 1.2 流程 Nacos的分析分为两部分,一部分是我们的客 ...

  2. 微服务之Nacos配置中心源码解析(二)

    Nacos配置中心源码解析 源码入口 ConfigFactory.createConfigService ConfigService configService = NacosFactory.crea ...

  3. Nacos配置中心源码分析

    1.使用 compile 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.3.RELEASE' spring: app ...

  4. Apollo配置中心源码分析

    Apollo配置中心源码分析 1. apollo的核心代码分享 SpringApplication启动的关键步骤 在SpringApplication中,会加载所有实现了Init方法的类 protec ...

  5. Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...

  6. Flask源码流程分析(一)

    Flask源码流程分析: 1.项目启动: 1.实例化Flask对象 1. 重要的加载项: * url_rule_class = Rule * url_map_class = Map * session ...

  7. u-boot中nandflash初始化流程分析(转)

    u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/ ...

  8. nacos统一配置中心源码解析

    配置文件想必大家都很熟悉,无论什么架构 都离不开配置,虽然spring boot已经大大简化了配置,但如果服务很多 环境也好几个,管理配置起来还是很麻烦,并且每次改完配置都需要重启服务,nacos c ...

  9. U-boot中SPL功能和源码流程分析

    在U-boot目录下,有个比较重要的目录就是SPL的,SPL到底是什么呢?为什么要用它呢? SPL(Secondary programloader)是uboot第一阶段执行的代码.主要负责搬移uboo ...

随机推荐

  1. centos克隆虚拟机

    首先我们把所要克隆的虚拟机关机,然后在所要克隆的虚拟机上右键,选择管理,选择克隆,出现如下界面: 点击下一步,选择虚拟机的当前状态,继续点击下一步 接着选择创建完整克隆,选择这个时,表明克隆出来的这个 ...

  2. JQuery案例:折叠菜单

    折叠菜单(jquery) <html> <head> <meta charset="UTF-8"> <title>accordion ...

  3. GAN和GAN的改进

    GAN 原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例: 其中是真实样本分布,是由生成器产生的样本分布. 第一个式子我们不看梯度符号的话即为判别器的损失函数,log ...

  4. Java 关于策略模式+简单工厂模式下的思考

    导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...

  5. C#中的WinForm问题——如何设置窗体的大小为超过屏幕显示的最大尺寸?

    今天在学习C#时遇到了一个问题,在此记录下来,留作日后总结复习之用,也分享给有同样问题和困扰的园友. 我手上的电脑是笔记本电脑,屏幕的尺寸大小为1366*768,然而项目所使用的屏幕大小为1920*1 ...

  6. CentOS中安装Docker步骤

    1.安装仓库所需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 2.设置yum加速源 yum-config-mana ...

  7. MySQL慢查询日志(SLOW LOG)

    慢查询日志可以帮助DBA或开发人员定位可能存在问题的SQL语句,从而进行优化. 如何开启 默认情况下,MySQL是不开启慢查询日志的.可以通过以下命令查看是否开启: mysql> SHOW VA ...

  8. .Net Core JWT 动态设置接口与权限

    通过上一篇.Net Core官方的 JWT 授权验证学习到了JWT的授权.可以发现一个问题,就是如果每个接口可以使用的角色都是写死的,这样如果有所修改会非常麻烦,虽然用policy可以一定程度上缓解, ...

  9. linux下的bash shell

    运行bash shell命令的方式 vi t1.sh 并输入 pwd ls pwd 然后:x保存关闭 1.首先查看权限 ls -l,如果没有执行权限则用chmod a+x t1.sh ,最后运行./t ...

  10. PyQt(Python+Qt)学习随笔:窗口layout布局的SizeConstraint和部件的大小约束策略sizePolicy不起作用的问题

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在写一个测试代码时,发现无论怎么设置窗口以及子部件 ...