作为一个注册中心,和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

最新文章

  1. VS 常用快捷键
  2. Hibernate第一个例子
  3. XIII Open Cup named after E.V. Pankratiev. GP of America
  4. CSS3与页面布局学习总结
  5. IE6下Png透明最佳解决方案(推荐) Unit PNG Fix
  6. [CSS]列表属性(List)
  7. PHP 魔术方法之__set__get__unset,__isset,__call
  8. foreach绑定
  9. JS中对于prototype的理解
  10. 使用Hibernate模板调用存储过程
  11. JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
  12. javaScript基础概念小知识点集
  13. BIOS基础
  14. BASE64Decoder小解
  15. tjoi2018
  16. javascript事件绑定和普通事件的区别
  17. 详解Windows不重启使环境变量修改生效(经典)
  18. Educational Codeforces Round 47 (Rated for Div. 2) 题解
  19. JS学习笔记9_JSON
  20. 【LOJ】#2182. 「SDOI2015」寻宝游戏

热门文章

  1. LIKE 运算符
  2. dubbo起停之服务注解
  3. kafka入门之broker--日志存储设计
  4. CentOS下关于集群同步/LB/HA 的尝试
  5. GoLang 自学系列(二)—— defer
  6. 在django中使用原生sql语句
  7. 第15.3节 PyCharm程序调试功能介绍
  8. crawlergo动态爬虫去除Spidername使用
  9. .NET 开源导入导出库 Magicodes.IE 2.5发布
  10. HTML引入外部字体