作为一个注册中心,和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. 检查字符串结尾 判断一个字符串(str)是否以指定的字符串(target)结尾。

    function confirmEnding(str, target) { var arr = str.replace(/\s+/g, ""); var bb = arr.subs ...

  2. Matlab 补充知识

    1:disp函数和fprintf函数类似 disp(a) 自动输出a变量的值 disp('dadad') 输出一个字符串 Disp(['a','b','ccc']) 三个字符串连在一起 2:matla ...

  3. IPv6 Rapid Deployment, IPv6 6rd初探

    IPv6 Rapid Deployment: Provide IPv6 Access to Customers over an IPv4-Only Network 原文地址:https://www.c ...

  4. idea 安装教程

    臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭臭是猪臭 ...

  5. 一次SQL注入导致的"越权"

    原文来自SecIN社区-作者:tkswifty 相关背景   在实际的业务开发中,SQL交互往往是业务系统中不可或缺的一项.在Java中提供了类似Mybatis.Hibernate.SpringDat ...

  6. Ajax Status(状态码) & readyState()

    Ajax Status & readyState readyState(状态值) 是指运行AJAX所经历过的几种状态,论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤,使用" ...

  7. git的使用以及git和码云的连接

    什么是git? ​ Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.可以保存许多的历史版本,并且可以多人同时进行开发. 分布式版本控制系统 ​ 每个人拥有该项目 ...

  8. @RequestParam,@RequestBody,@PathVariable注解还分不清吗?

    前言 在使用 SpringMVC 开发时,经常遇到前端传递的各种参数,比如 form 表单,JSON 数据,String[] 数组,再或者是最常见的 String 字符串等等,总之大部分场景都是在标题 ...

  9. 用STM32定时器测量信号频率——测频法和测周法[原创cnblogs.com/helesheng]

    工业测试与控制系统中,经常需要对未知信号的频率进行测试.对于10MHz以下的信号,用单片机(MCU)定时器完成这项任务显然是最常见和最佳的选择.目前性价比最高的单片机STM32拥有功能强大且数量众多的 ...

  10. 如何在苹果电脑上创建一个html格式文件,并在浏览器正确打开

    之前一直使用windows系统的电脑,创建文件很简单,改格式也非常的简单.但换了苹果电脑,如何创建一个HTML文件?却把我给整蒙了. 首先,为什么mac上不能直接新建文本文件? 因为mac一都是以应用 ...